FMK2012: Mit SQL-Kommandos FileMaker Daten lesen - und schreiben von Nico Busch
Upcoming SlideShare
Loading in...5
×
 

FMK2012: Mit SQL-Kommandos FileMaker Daten lesen - und schreiben von Nico Busch

on

  • 3,084 views

Integriertes SQL in FileMaker 12

Integriertes SQL in FileMaker 12
SQL mit Plugins nutzen.

Ein Vortrag im Rahmen der FileMaker Konferenz 2012 in Salzburg.

Statistics

Views

Total Views
3,084
Views on SlideShare
3,084
Embed Views
0

Actions

Likes
1
Downloads
68
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

FMK2012: Mit SQL-Kommandos FileMaker Daten lesen - und schreiben von Nico Busch FMK2012: Mit SQL-Kommandos FileMaker Daten lesen - und schreiben von Nico Busch Presentation Transcript

  • FileMaker Konferenz2010 Mit SQL-Kommandos FileMaker Daten lesen - und schreiben Integriertes SQL in FileMaker 12 SQL mit Plugins nutzenNicolaus Busch, N. Busch GmbH 1 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Struktur 1. Was ist SQL? 2. Konzeptionelle Unterschiede SQL-FM 3. Neu in FileMaker 12: SQL-Select 1. Aufbau einer SQL-Abfrage 2. Was geht, was geht nicht? 3. Caveat: Das macht Probleme 4. Was kann man damit anstellen? Anwendung an Beispielen 1. Vorhandensein eines Datensatzes prüfen (SELECT BY ID) 2. Einschub: Das macht Probleme 3. Einschub: Dynamische vs. statische Argumente 4. Werte aus einem Datensatz holen ohne Beziehung oder Suche (SELECT fieldnames) 5. Liste verschiedener Werte innerhalb Suchbereich holen (SELECT DISTINCT) 6. Array gruppierter Summen holen (SELECT COUNT GROUP BY) 7. Join oder: One Night Stand statt BeziehungNicolaus Busch, N. Busch GmbH 2 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Struktur 4. Mit Plugins SQL ausschöpfen 1. Plugins im Markt 2. Vorsicht bitte! 3. Erweiterte Möglichkeiten durch CREATE, UPDATE & DELETE 1. Datensatz in beliebige Tabelle einfügen (INSERT INTO) 2. Datensatz in beliebiger Tabelle aktualisieren (UPDATE … WHERE …) 3. Datensätze löschen aufgrund Bedingung (DELETE FROM … WHERE) 4. Exkurs: Erweiterte Möglichkeiten durch PHP-Programmierung (oder andere Sprache) 5. Auch hier: Umbenennungs-Probleme 5. Funktionsbibliotheken am Beispiel Smartpill 4. Den Function-Maker nutzen 5. Funktionen zur Laufzeit laden 6. Update vie URLNicolaus Busch, N. Busch GmbH 3 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Was ist SQL? • SQL ist keine Datenbank • SQL ist eine Sprache (Structured English Query Language) • Entwickelt Anfang der 1970er Jahre bei IBM • Wenige Sprachelemente zur Abfrage und Manipulation von Daten und Datenbankstruktur • Von zahlreichen DBMS unterstützt (MySQL, MS SQL Server, Oracle, DB/2, FileMaker,…) • Sprache im Wesentlichen unabhängig von verwendeter EngineNicolaus Busch, N. Busch GmbH 4 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Konzeptionelle Unterschiede SQL-FM • FileMaker: Suche selektiert Datensätze für weitere Bearbeitung • Befehle beziehen sich auf die Fundmenge • SQL: Jedes Statement steht für sich • Suche und Datenausgabe/Manipulation im selben Befehl • Erstellen, Editieren, Löschen mit BedingungsangabeNicolaus Busch, N. Busch GmbH 5 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Neu in FileMaker 12: SQL-Select • SQL-Statements an FileMaker schicken • Allgemeine Form: SQLQueryAusführen( "SELECT field(s) FROM table [WHERE Bedingung ]") • Einfachstes Beispiel SQLQueryAusführen( "SELECT * FROM Adressen" ; "";"")  156231,Müller,DE,Walter,Helmut Kohl Allee 12,55116,Mainz  2312,Meier,AT,Irene,Erzherzog-Johann-Strasse 5,1172,Wien  12156,Ganter,CH,Hansueli,Bankenplatz 1,8000,Zürich  15612,Zehnder,,Rudolf,Paradeplatz 12,1100,Wien  Unsortierte Liste, Feldreihenfolge wie erstelltNicolaus Busch, N. Busch GmbH 6 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Datensatz prüfen • Gibt es dich schon? IstLeer( SQLQueryAusführen( " SELECT id FROM Adressen WHERE Nachname = Sarasin AND Vorname = Philipp "; "" ; "" )) •Ergebnis: Leer oder ID-Liste • Weichere Abfrage: SQLQueryAusführen( " SELECT id FROM Adressen WHERE LOWER( Nachname ) = sarasin AND LOWER( Vorname ) = philipp "; "" ; "" )Nicolaus Busch, N. Busch GmbH 7 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Das macht Probleme • Was geht: alle Arten von Abfragen mit SELECT Was geht nicht: alle Arten von Manipulation der Daten oder der Struktur • Unterstützung durch FileMaker bei Fehlern: keine • gross- und KLEINschreiBunG von Argumenten • Umbenennungs-Probleme • _Sonderzeichen in Feldname ⇒ " benutzen • Keine SQL-Abfragen in gespeicherten Berechnungen! • Kein SQL-Abfragen im Data Viewer stehen lassen!Nicolaus Busch, N. Busch GmbH 8 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Dynamische vs. statische Argumente  SQLQueryAusführen( "SELECT id FROM Adressen WHERE Nachname = Sarasin AND Vorname = Philipp "; "" ; "" )  SQLQueryAusführen( "SELECT id FROM Adressen WHERE Nachname = " & Adressen::Nachname & " AND Vorname = " & Adressen::Vorname & " "; "" ; "" )  SQLQueryAusführen( "SELECT id FROM Adressen WHERE Nachname = ? AND Vorname = ? "; "" ; "" ; Adressen::Nachname ; Adressen::Vorname )Nicolaus Busch, N. Busch GmbH 9 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Werte aus einem Datensatz holen SQLQueryAusführen( "SELECT plz, ort, land, strasse FROM Adressen WHERE NOT land = ? "; "" ; "" ; "AT" ) //end SQLQuery  55116,Mainz,DE, Helmut Kohl Allee 12  8000,Zürich,CH,Bankenplatz 1  1100,Wien,, Paradeplatz 12Nicolaus Busch, N. Busch GmbH 10 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Einsatz im FileMaker-Script Beispiel: Neue Person anlegen Script ausführen[ fn.TroiDL_Input["Title =" & "Neue Person" & ¶ & "Labels =Name#Vorname " & ¶ &)" Aus Datei:“LL4_Toolbox”; (…) Variable setzen [ $Selection; Wert:HoleWert( Hole( ScriptErgebnis ) ; 1) ] Wenn [ $Selection = 1 ] Variable setzen [ $Nachname; Wert:HoleWert( Hole( ScriptErgebnis ) ; 2) ] Variable setzen [ $Vorname; Wert:HoleWert( Hole( ScriptErgebnis ) ; 3) ] Variable setzen [ $Matches; Wert:SQLQueryAusführen( "SELECT "_pk_GUID", "d_Nachname_t", "d_Vorname_t", "d_Geburtsort_t", "d_Geburtsjahr_n" FROM DAutor WHERE LOWER( d_Nachname_t ) = ?" & Falls( NICHT IstLeer( $Vorname) ; " AND LOWER( d_Vorname_t )= ?") & " ORDER BY d_Nachname_t, d_Vorname_t"; ", " ; "" ; Kleinbuchstaben( $Nachname ); Kleinbuchstaben( $Vorname )) ] Wenn [ NICHT IstLeer( $Matches ) ] Script ausführen[ "fn.TroiDL_SelectFromList["Text =" & _::AuswahlDatensatzOderNeu ; & "¶" & "B1 =OK ¶B2 =Neu ¶B3 =NeueSuche ¶B4 =Abbruch ¶" Aus Datei: “LL4_Toolbox”; (…) (…)Nicolaus Busch, N. Busch GmbH 11 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Liste verschiedener Werte holen SQLQueryAusführen("SELECT d_AutorNachname_t , d_AutorVorname_t FROM DTitel WHERE LOWER( d_ort_t ) = ?" ; ", ";"dublin")  Connolly, James  Connolly, James  Mitchell, Arthur  Martin, F.X.  Martin, F.X.  Nowlan, Kevin B.  OBroin, Leon  OBroin, Leon  Nevin, Donal  Cronin, James  Cronin, James  Lalor, Fintan  Nowlan, KieranNicolaus Busch, N. Busch GmbH 12 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Liste verschiedener Werte holen II SQLQueryAusführen("SELECT DISTINCT d_AutorNachname_t, d_AutorVorname_t FROM DTitel WHERE LOWER(d_ort_t) = ? ORDER BY d_AutorNachname_t, d_AutorVorname_t" ; ", " ; "dublin")  Connolly, James  Cronin, James  Lalor, Fintan  Martin, F.X.  Mitchell, Arthur  Nevin, Donal  Nowlan, Kevin B.  Nowlan, Kieran  OBroin, LeonNicolaus Busch, N. Busch GmbH 13 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Array gruppierter Summen holen SQLQueryAusführen( "SELECT d_Ort_t, COUNT(d_Titel_t) FROM DTitel GROUP BY d_Ort_t"; "" ; "")  ,24  Dublin,1  Frankfurt,1  Frankfurt a.M,1  Frankfurt am Main,2  Hamburg,2  Stuttgart,1  Zürich,2Nicolaus Busch, N. Busch GmbH 14 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Array im Script einsetzen Beispiel: Show count of distinct Values Variable setzen [$Feldname; Wert: Get( ActiveFieldName)] Variable setzen [$Tabelle; Wert: Get( LayoutTableName)] Variable setzen [$Query; Wert: "echo fm_sql_select("Select COUNT( DISTINCT " & $Feldname & ") FROM " & $Tabelle & "");"] Variable setzen [$Result; Wert:PHP_Execute ($Query)] Eigenes Dialogfeld anzeigen ["Unique values of " & $Feldname; $Result]Nicolaus Busch, N. Busch GmbH 15 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Join oder: One Night Stand statt Beziehung ExecuteSQL ("SELECT Ti.d_Titel_t , Ti.d_Ort_t , Ti.d_Datierung_t, Au.d_Nachname_t , Au.d_Vorname_t , Au.d_Geburtsort_t , Au.d_Geburtsjahr_n FROM DTitel Ti JOIN DAutor Au ON Ti."_fk_Autor" = Au."_pk_GUID" WHERE Ti.d_Ort_t = ? ORDER BY Au.d_Nachname_t ASC";"";""; "Dublin") ExecuteSQL ("SELECT Ti.d_Titel_t , Ti.d_Ort_t , Ti.d_Datierung_t, Au.d_Nachname_t , Au.d_Vorname_t , Au.d_Geburtsort_t , Au.d_Geburtsjahr_n FROM DTitel Ti, DAutor Au WHERE Ti.d_Ort_t = ? AND Ti."_fk_Autor"=Au."_pk_GUID" ORDER BY Au.d_Nachname_t ASC";"";""; "Dublin")Nicolaus Busch, N. Busch GmbH 16 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Script mit Join #Ruft die Titel auf, bei denen Publikationsort gleich Geburtsort des Autors ist Variable setzen [ $Result ; Wert:SQLQueryAusführen ( " SELECT Ti."_pk_GUID" FROM DTitel Ti JOIN DAutor Au ON Ti."_fk_Autor" = Au."_pk_GUID" AND Ti."d_Ort_t" = Au."d_Geburtsort_t" ORDER BY Au."d_Nachname_t" ASC"; "";"") ] Wenn [ NICHT IstLeer( $Result ) ] Feldwert setzen [ DGlobals::v_TitelID_tg ; $Result ] Fenster fixieren Gehe zu Layout [ “DGlobals” (DGlobals) ] Gehe zu Bezugsdatensatz[ Aus Tabelle: “DGlobals.Titel” ; Mit Layout: “lst.Titel” (DTitel) , Nur Bezugsdatensätze zeigen ] Ende (wenn)Nicolaus Busch, N. Busch GmbH 17 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Mit Plugins SQL ausschöpfen • Erweiterte Möglichkeiten durch INSERT, UPDATE & DELETE • Erweiterte Möglichkeiten durch PHP-ProgrammierungNicolaus Busch, N. Busch GmbH 18 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Plugins im Markt • 2empower FM SQL Runner www.dracoventions.com Reines SQL-Plugin, kostenlos, FM-Daten lesen in Versionen pre-12 • myFMButler DoSQL http://www.myfmbutler.com/ Lesen und schreiben in FM via SQL, unterstützt neben SELECT, INSERT, UPDATE und DELETE auch CREATE, ALTER und DROP • Monkeybread MBS SQL Connection http://www.monkeybreadsoftware.de Unterstützt SELECT, INSERT, UPDATE und DELETE Umfangreicher Befehlssatz • Scodigo Smartpill www.scodigo.com Unterstützt SELECT, INSERT, UPDATE und DELETE Stellt Umgebung für PHP zur Verfügung • 360Works ScriptMaster4 www.360works.com Unterstützt SELECT, INSERT, UPDATE und DELETE Stellt Umgebung für Groovy(Java) zur VerfügungNicolaus Busch, N. Busch GmbH 19 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • CAVEAT!  Ab hier geht es Ihren Daten an den Kragen!  Testen, testen und nochmal testen  Varianten erproben  Save often, save early fm_sql_Execute(" INSERT INTO Autor (Nachname, Vorname) VALUES (Sarasin,Philipp)"); ") fm_sql_Execute(" UPDATE Autor SET "ID"=99ab23; ")Nicolaus Busch, N. Busch GmbH 20 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Datensatz einfügen (INSERT INTO) Allgemeine Form: fm_sql_Execute( "INSERT INTO " & $Database & " (" & $Names & ") " & " VALUES (" & $Values & ")");" Beispiel: echo fm_sql_Execute( "INSERT INTO DTitel ( _fk_Autor, _pk_GUID, d_AusgabeSeite_t, d_AutorNachname_t, d_AutorVorname_t, d_CoAutoren_t, d_Datentyp_t, d_Datentyp2_t, d_Datierung_t, d_Kurztitel_t, d_Reihe_t, d_Titel_t, s_AenderungName_t, s_AenderungZeit_ts, s_ErstellungName_t, s_ErstellungZeit_ts ) VALUES ( A_WFMDAABX8JWWKLAKJ.MN.120210.112303, HPYWWJVG5FP92U5VC.MN.120210.115013, 8-14, Dyk, Silke, Stephan Lessenich, t, Aufsatz, 2010, Potentiale des Alters, Mittelweg 36, 19. Jg., Die Potentiale des Alters und die Soziologie, nb, 19.02.2012 13:45:05, ps, 10.02.2012 11:50:13 ) ");Nicolaus Busch, N. Busch GmbH 21 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Datensatz aktualisieren (UPDATE) Allgemeine Form: fm_sql_Execute( "UPDATE " & $Database & " SET " & $NamesValues & " WHERE ID = " & $ID & "");" Beispiel:: echo fm_sql_Execute( " UPDATE Titel SET "_fk_Autor"=A_WFMDAABX8JWWKLAKJ.MN.120210.112303, "_fk_Bibliothek"=25634, "d_Titel_t"= Diskursanalyse meets Gouvernementalitätsforschung : Perspektiven auf das Verhältnis von Subjekt, Sprache, Macht und Wissen, (…) "s_ZoteroKey_t"=17F2YA89, WHERE _pk_GUID = HPYWWJVG5FP92U5VC.MN.120210.115013 ");Nicolaus Busch, N. Busch GmbH 22 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • INSERT & UPDATE fm_sql_Execute(" INSERT INTO Autor (ID) VALUES (99ab23)"); ") fm_sql_Execute(" UPDATE Autor SET "Nachname"=Sarasin, "Vorname"=Philipp WHERE "ID" = 99ab23; ")Nicolaus Busch, N. Busch GmbH 23 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Datensatz löschen (DELETE) Let( $Command = "echo fm_sql_execute( " DELETE FROM " & table & " WHERE "_pk_GUID"=" & id & " ");"; PHP_Execute ($Command) ) LETZTE WARNUNG: NICHT SO Let( $Command = "echo fm_sql_execute( " DELETE FROM " & table ");"; PHP_Execute ($Command) )Nicolaus Busch, N. Busch GmbH 24 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Exkurs: Erweiterte Möglichkeiten durch PHP- Programmierung Beispiel: Daten verschlüsseln Variable setzen [$PW; Wert:"IchBinGeheim"] Variable setzen [$Text; Wert:Get ( ActiveFieldContents )] Variable setzen [$Query; Wert:"$cipher = MCRYPT_RIJNDAEL_128;$key = hash(md5, " & $PW & ");$iv_size = mcrypt_get_iv_size($cipher, MCRYPT_MODE_ECB);$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);$crypt_text = mcrypt_encrypt($cipher, $key, " & $Text & ", MCRYPT_MODE_ECB, $iv);$Result = base64_encode($crypt_text);echo $Result;"] Variable setzen [$Result; Wert:PHP_Execute ( $Query )] Variable setzen [$Error; Wert:PHP_GetLastError] Feldwert setzen [; $Result] Gehe zu Feld []Nicolaus Busch, N. Busch GmbH 25 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Exkurs: Erweiterte Möglichkeiten durch PHP- Programmierung Beispiel: Anzahl Werte ausgeben Variable setzen [$Feldname; Wert:Get( ActiveFieldName)] Variable setzen [$Tabelle; Wert:Get( LayoutTableName)] Variable setzen [$Query; Wert:"echo fm_sql_select("Select COUNT( DISTINCT " & $Feldname & ") FROM " & $Tabelle & "");"] Variable setzen [$Result; Wert:PHP_Execute ( $Query )] Variable setzen [$Error; Wert:PHP_GetLastError] Eigenes Dialogfeld anzeigen ["Unique values of " & $Feldname; $Number]Nicolaus Busch, N. Busch GmbH 26 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Funktionsbibliotheken am Beispiel Smartpill  Den Function-Maker nutzen  Tests definieren  Sets erstellenNicolaus Busch, N. Busch GmbH 27 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Funktionen zur Laufzeit laden Laden aus lokalen Dateien SetzeVar[ $Result ; Value:PHP_LoadFunctions ] Laden via URL SetzeVar[ $result; Value:PHP_LoadFunctionsFromURL ( "http://www.beispiel.ch/xml/PHPx_Functions.xml" ) ]Nicolaus Busch, N. Busch GmbH 28 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • Further reading • http://www.w3schools.com/sql/ • filemakerhacks.com: FM 12 ExecuteSQL: Robust Coding, part 1 • Wikibooks: Einführung in SQLNicolaus Busch, N. Busch GmbH 29 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com
  • FileMaker Konferenz2010 Vielen Dank unseren Sponsoren Danke für das Bewerten dieses VortragesNicolaus Busch, N. Busch GmbH 30 FileMaker Konferenz 2012 SalzburgSQL-Kommandos www.filemaker-konferenz.com