Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
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 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
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. 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
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
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 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
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
Nicolaus Busch, N. Busch GmbH 13 FileMaker Konferenz 2012 Salzburg
SQL-Kommandos www.filemaker-konferenz.com
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
Nicolaus Busch, N. Busch GmbH 14 FileMaker Konferenz 2012 Salzburg
SQL-Kommandos www.filemaker-konferenz.com
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]
Nicolaus Busch, N. Busch GmbH 15 FileMaker Konferenz 2012 Salzburg
SQL-Kommandos www.filemaker-konferenz.com
16. 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
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 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
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
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
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 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
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