FileMaker Konferenz2010




                     Mit SQL-Kommandos FileMaker
                       Daten lesen - und schreiben

                                Integriertes SQL in FileMaker 12
                                     SQL mit Plugins nutzen




Nicolaus Busch, N. Busch GmbH                  1                   FileMaker Konferenz 2012 Salzburg
SQL-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 Beziehung




Nicolaus Busch, N. Busch GmbH                                2                            FileMaker Konferenz 2012 Salzburg
SQL-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 URL




Nicolaus Busch, N. Busch GmbH                               3                                FileMaker Konferenz 2012 Salzburg
SQL-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 Engine




Nicolaus Busch, N. Busch GmbH                4                      FileMaker Konferenz 2012 Salzburg
SQL-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 Bedingungsangabe




Nicolaus Busch, N. Busch GmbH                         5                 FileMaker Konferenz 2012 Salzburg
SQL-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 erstellt




Nicolaus Busch, N. Busch GmbH                               6                       FileMaker Konferenz 2012 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 12




Nicolaus Busch, N. Busch GmbH                             10   FileMaker Konferenz 2012 Salzburg
SQL-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 Salzburg
SQL-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.
                        O'Broin, Leon
                        O'Broin, Leon
                        Nevin, Donal
                        Cronin, James
                        Cronin, James
                        Lalor, Fintan
                        Nowlan, Kieran




Nicolaus Busch, N. Busch GmbH               12                  FileMaker Konferenz 2012 Salzburg
SQL-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
                        O'Broin, Leon




Nicolaus Busch, N. Busch GmbH               13                FileMaker Konferenz 2012 Salzburg
SQL-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,2




Nicolaus Busch, N. Busch GmbH              14                     FileMaker Konferenz 2012 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-Kommandos                                                                    www.filemaker-konferenz.com
Mit Plugins SQL ausschöpfen

           • Erweiterte Möglichkeiten durch INSERT, UPDATE & DELETE
           • Erweiterte Möglichkeiten durch PHP-Programmierung




Nicolaus Busch, N. Busch GmbH              18                    FileMaker Konferenz 2012 Salzburg
SQL-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ügung


Nicolaus Busch, N. Busch GmbH                19                     FileMaker Konferenz 2012 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-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 Salzburg
SQL-Kommandos                                                                         www.filemaker-konferenz.com
Funktionsbibliotheken am Beispiel
                            Smartpill
           Den Function-Maker nutzen
           Tests definieren
           Sets erstellen




Nicolaus Busch, N. Busch GmbH           27   FileMaker Konferenz 2012 Salzburg
SQL-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 Salzburg
SQL-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 SQL




Nicolaus Busch, N. Busch GmbH                29                     FileMaker Konferenz 2012 Salzburg
SQL-Kommandos                                                            www.filemaker-konferenz.com
FileMaker Konferenz2010

                    Vielen Dank unseren Sponsoren




       Danke für das Bewerten dieses Vortrages


Nicolaus Busch, N. Busch GmbH     30         FileMaker Konferenz 2012 Salzburg
SQL-Kommandos                                     www.filemaker-konferenz.com

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

  • 1.
    FileMaker Konferenz2010 Mit SQL-Kommandos FileMaker Daten lesen - und schreiben Integriertes SQL in FileMaker 12 SQL mit Plugins nutzen Nicolaus Busch, N. Busch GmbH 1 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 2.
    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 Beziehung Nicolaus Busch, N. Busch GmbH 2 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 3.
    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 URL Nicolaus Busch, N. Busch GmbH 3 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 4.
    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 Engine Nicolaus Busch, N. Busch GmbH 4 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 5.
    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 Bedingungsangabe Nicolaus Busch, N. Busch GmbH 5 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 6.
    Neu in FileMaker12: 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 erstellt Nicolaus Busch, N. Busch GmbH 6 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 7.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 8.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 9.
    Dynamische vs. statischeArgumente  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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 10.
    Werte aus einemDatensatz 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 12 Nicolaus Busch, N. Busch GmbH 10 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 11.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 12.
    Liste verschiedener Werteholen 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.  O'Broin, Leon  O'Broin, Leon  Nevin, Donal  Cronin, James  Cronin, James  Lalor, Fintan  Nowlan, Kieran Nicolaus Busch, N. Busch GmbH 12 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 13.
    Liste verschiedener Werteholen 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  O'Broin, Leon Nicolaus Busch, N. Busch GmbH 13 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 14.
    Array gruppierter Summenholen 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,2 Nicolaus Busch, N. Busch GmbH 14 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 15.
    Array im Scripteinsetzen 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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 16.
    Join oder: OneNight 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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 17.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 18.
    Mit Plugins SQLausschöpfen • Erweiterte Möglichkeiten durch INSERT, UPDATE & DELETE • Erweiterte Möglichkeiten durch PHP-Programmierung Nicolaus Busch, N. Busch GmbH 18 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 19.
    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ügung Nicolaus Busch, N. Busch GmbH 19 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 20.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 21.
    Datensatz einfügen (INSERTINTO) 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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 22.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 23.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 24.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 25.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 26.
    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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 27.
    Funktionsbibliotheken am Beispiel Smartpill  Den Function-Maker nutzen  Tests definieren  Sets erstellen Nicolaus Busch, N. Busch GmbH 27 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 28.
    Funktionen zur Laufzeitladen 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 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 29.
    Further reading • http://www.w3schools.com/sql/ • filemakerhacks.com: FM 12 ExecuteSQL: Robust Coding, part 1 • Wikibooks: Einführung in SQL Nicolaus Busch, N. Busch GmbH 29 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com
  • 30.
    FileMaker Konferenz2010 Vielen Dank unseren Sponsoren Danke für das Bewerten dieses Vortrages Nicolaus Busch, N. Busch GmbH 30 FileMaker Konferenz 2012 Salzburg SQL-Kommandos www.filemaker-konferenz.com