30
FileMaker Konferenz 2012 Salzburg www.filemaker-konferenz.com Nicolaus Busch, N. Busch GmbH SQL-Kommandos 1 Mit SQL-Kommandos FileMaker Daten lesen - und schreiben Integriertes SQL in FileMaker 12 SQL mit Plugins nutzen FileMaker Konferenz2010 FileMaker Konferenz 2012 Salzburg www.filemaker-konferenz.com Nicolaus Busch, N. Busch GmbH SQL-Kommandos

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

Embed Size (px)

Citation preview

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

1

Mit SQL-Kommandos FileMaker Daten lesen - und schreiben

Integriertes SQL in FileMaker 12SQL mit Plugins nutzen

FileMaker Konferenz2010

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

2

Struktur

1. Was ist SQL?

2. Konzeptionelle Unterschiede SQL-FM

3. Neu in FileMaker 12: SQL-Select1. 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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

3

Struktur

4. Mit Plugins SQL ausschöpfen1. 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 Smartpill4. Den Function-Maker nutzen

5. Funktionen zur Laufzeit laden

6. Update vie URL

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

6

Neu in FileMaker 12: SQL-Select

• SQL-Statements an FileMaker schicken

• Allgemeine Form:SQLQueryAusführen( "SELECT field(s) FROM table [WHERE Bedingung ]")

• Einfachstes BeispielSQLQueryAusfü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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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 AdressenWHERE LOWER( Nachname ) = 'sarasin' ANDLOWER( Vorname ) = 'philipp' "; "" ; "" )

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

8

Das macht Probleme

• Was geht: alle Arten von Abfragen mit SELECTWas 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!

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

9

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 )

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

10

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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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”; (…)

(…)

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

12

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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

13

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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

14

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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

15

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]

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

16

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 AuWHERE Ti.d_Ort_t = ? AND Ti.\"_fk_Autor\"=Au.\"_pk_GUID\" 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 TiJOIN DAutor Au ON Ti.\"_fk_Autor\" = Au.\"_pk_GUID\" WHERE Ti.d_Ort_t = ? ORDER BY Au.d_Nachname_t ASC";"";"";"Dublin")

Join oder: One Night Stand statt Beziehung

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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)

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

18

Mit Plugins SQL ausschöpfen

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

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

19

Plugins im Markt• 2empower FM SQL Runner

www.dracoventions.comReines SQL-Plugin, kostenlos, FM-Daten lesen in Versionen pre-12

• myFMButler DoSQLhttp://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 Connectionhttp://www.monkeybreadsoftware.deUnterstützt SELECT, INSERT, UPDATE und DELETEUmfangreicher Befehlssatz

• Scodigo Smartpillwww.scodigo.comUnterstützt SELECT, INSERT, UPDATE und DELETEStellt Umgebung für PHP zur Verfügung

• 360Works ScriptMaster4www.360works.comUnterstützt SELECT, INSERT, UPDATE und DELETEStellt Umgebung für Groovy(Java) zur Verfügung

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

20

CAVEAT!

Ab hier geht es Ihren Daten an den Kragen!Testen, testen und nochmal testenVarianten erprobenSave often, save early

fm_sql_Execute(" INSERT INTO Autor (Nachname,

Vorname) VALUES ('Sarasin','Philipp')");

")

fm_sql_Execute(" UPDATE Autor

SET \"ID\"='99ab23';")

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

21

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' )");

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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'");

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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';")

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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))

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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 []

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

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]

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

27

Funktionsbibliotheken am Beispiel Smartpill

Den Function-Maker nutzen Tests definieren Sets erstellen

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

28

Funktionen zur Laufzeit laden

Laden aus lokalen DateienSetzeVar[ $Result ; Value:PHP_LoadFunctions ]

Laden via URLSetzeVar[ $result; Value:PHP_LoadFunctionsFromURL (

"http://www.beispiel.ch/xml/PHPx_Functions.xml" ) ]

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

29

Further reading

• http://www.w3schools.com/sql/• filemakerhacks.com: FM 12 ExecuteSQL: Robust Coding, part 1• Wikibooks: Einführung in SQL

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.com

Nicolaus Busch, N. Busch GmbHSQL-Kommandos

30

FileMaker Konferenz2010

Vielen Dank unseren Sponsoren

Danke für das Bewerten dieses Vortrages