Plugins Weblink Webshop Christian Schmitz (Jg. 1981) entwickelt seit 11 Jahren Software und seit 2006 auch FileMaker Plugins. Außerdem Plugins für Real Studio und allerlei Software für Mac OS X, Windows, Linux und iOS. MBS Plugin [email protected] Nachdruck aus dem FileMaker Magazin siehe auch: www.filemaker-magazin.de Datensätze effizient kopieren Mit etwas SQL und dem MBS-Plugin Haben Sie schon einmal ein Script geschrieben, um den Inhalt einer Tabelle in eine andere zu kopieren? Zum Beispiel, wenn Ihre Daten in eine neuere Version der Datenbank überführt werden sollen oder von der Produktiv­ datenbank in eine Entwicklungsdatenbank – oder zurück. Das Problem Immer wieder stehen wir vor der Aufgabe, den Inhalt von Ta­ bellen bewegen zu müssen. Der Export und der anschließende Import in Textdateien ist fehleranfällig, denn bei der Kon­ vertierung gehen häufig Informationen verloren. Dabei wird zum Beispiel „vergessen“, ob ein Textfeld leer oder undefiniert ist, bei Zahlen wird mitunter gerundet oder Im- und Export sind sich nicht „einig“ über Tausender- bzw. Dezimaltrenner. Containerwerte gehen beim Export ohnehin verloren. All das muss nicht sein, denn es gibt eine Lösung. Die Lösung Die Funktion „FM.InsertRecordQuery“, die es seit der Ver­ sion 5.1 des MBS-Plugins gibt, kann Datensätze anlegen. Die Daten dazu holt sie sich aus einer SQL-Abfrage. Aber keine Angst, es handelt sich nur um einen SELECT-Befehl zum Ab­ fragen, der ganz einfach sein kann. Die Funktion sieht in der Deklaration so aus: MBS ("FM.InsertRecordQuery"; InsertFileName; InsertTableName; FieldNames; QueryFileName; SQL Statement; Params) Mindestens fünf Parameter sind notwendig, wovon der e­ rste – der Name der Datenbank für die Zieltabelle – gleich op­ tional ist. Der Name hilft dabei, die Anfrage eindeutig auf die richtige Datenbank zu lenken, falls es den Tabellennamen FMM_201504 mehr als einmal gibt. Ansonsten übergeben Sie an dieser Stelle ei­ nen leeren Text und FileMaker sucht sich die Tabelle aus einer der offenen Datenbanken. Dafür benötigen Sie keine Bezie­ hungen oder sonstige Verknüpfungen, sondern Sie müssen ledig­ lich dafür sorgen, dass die Zieldatenbank geöffnet ist. Bei dem zweiten Parameter handelt es sich um den Namen der Zielda­ tenbank. Quelle und Ziel können identisch sein, denn zuerst wird die Abfrage ausgeführt und erst danach neu eingefügt. So kann keine Endlosschleife innerhalb der Tabelle entstehen. Der dritte Parameter erwartet eine Liste mit den Feldnamen der Zieltabelle. Die Reihenfolge muss mit dem SQL-Befehl im nächsten Parameter exakt übereinstimmen, ansonsten bekommen Sie eventuell amüsante, aber wenig nützliche Ergebnisse. Der SQL-Befehl selbst kann recht beliebig pro­ grammiert werden – Sie können ihn problemlos im Fenster Datenanzeige mit der MBS-Funktion „FM.ExecuteSQL“ ausprobieren und am Ergebnis feilen. Die folgende SQL-Zeile fragt die Felder Vorname und Nachname ab. In der Beispieldatei wurden zwei zusätzliche Zahlenfelder eingefügt, die in der Abfrage addiert bzw. mul­ tipliziert werden, sodass in der Zieldatenbank zwei Felder di­ rekt mit dem Ergebnis gefüllt werden können. SELECT Vorname, Nachname, Zahl1+Zahl2, Zahl1*Zahl2 FROM Quelle Im Datenanzeige-Fenster, das unter dem Menüpunkt Werkzeuge ➝ Datenanzeige zu finden ist, gehen Sie auf den Tab „Überwachen“, wo Sie nach einem Klick auf die Plustaste den Befehl so eingeben können: MBS ("FM.ExecuteSQL"; "SELECT Vorname, Nachname, Zahl1+Zahl2, Zahl1*Zahl2 FROM Quelle") © 1994 – 2015 K&K Verlag GmbH, Hamburg 39 Plugins Mit einem Klick auf die Taste „Jetzt auswerten“ führt das MBS-Plugin die Abfrage durch und FileMaker zeigt die Er­ gebnisse an. Sind diese Ergebnisse so, wie Sie erwartet haben, können Sie sich den Aufruf für „FM.InsertRecordQuery“ zu­ sammenstellen. Das könnte zum Beispiel so aussehen: MBS ("FM.InsertRecordQuery"; "Ziel.fmp12"; "Ziel"; "Vorname¶Nachname¶Summe¶Produkt"; "Quelle.fmp12"; "SELECT Vorname, Nachname, Zahl1+Zahl2, Zahl1*Zahl2 FROM Quelle") Nachdruck aus dem FileMaker Magazin siehe auch: www.filemaker-magazin.de verknüpft werden. Der am Ende stehende Befehl GROUP BY sorgt dafür, dass die Daten nach der Kundennummer grup­ piert werden und über den Anfang der Abfrage wird die Sum­ me über die Rechnungssumme gebildet. Somit erhalten wir mit einer Befehls-Zeile eine Liste aller Kundennummern und deren Gesamtrechnungssumme. „FM.InsertRecordQuery“ trägt diese Informationen dann als neue Datensätze in eine Auswertungstabelle ein. ♦ Flexibel Die Funktion ist äußerst flexibel. Mit ihrer Hilfe können Sie Datensätze innerhalb der Tabelle oder Datensätze von einer Tabelle in eine andere kopieren – auch über Datenbankgren­ zen hinweg. Beim Kopieren haben Sie über den SQL-Befehl die Möglichkeit, Felder, die Sie übernehmen möchten, ein­ zeln auszuwählen. Verwenden Sie mathematische Opera­ tionen oder verketten Sie Felder zu einem Wert – ganz nach Bedarf. Sie können auch Felder als Konstante in der Abfrage angeben oder etwas per SQL-Parameter einfügen. Über den SQL-Befehl SUM werden Summen direkt bei der Abfrage gebildet und falls Sie sich mit JOINs auskennen, können Sie sogar mehrere Tabellen kreuzen und die Ergebnismenge ab­ speichern. Die Quelldatenbank aus dem Beispiel mit den Namen und den zwei Zahlen. Schauen Sie sich mal diese Zeile an: SELECT sum ("RechnungsSumme"), "KundenNr" FROM Kunden, Rechnungen WHERE Kunden.KundenNr = Rechnungen.KundenNr GROUP BY KundenNr Für dieses Beispiel nutzen wir eine Tabelle Kunden, bei der je­ der Datensatz über eine eindeutige Kundennummer verfügt, die sich im Feld KundenNr befindet. Eine zweite Tabelle enthält Rechnungen. Wie die Posten und Artikel gespeichert sind, ist hier nicht von Belang, wichtig ist lediglich das Feld (eventuell ein berechnetes) mit dem Gesamtbetrag der Rech­ nung. Unsere Abfrage sucht alle Kunden und alle Rechnungen zusammen, wobei die Datensätze über die Kundennummer 40 Die Zieldatenbank mit den Feldern für Namen, Summe und Produkt. Außerdem noch ein Zeitstempel, den FileMaker automatisch setzt. FMM_201504 2008 01 Deutschland e 9,50 | www.filemaker-magazin.de Das unabhängige Magazin für FileMaker Anwender und Entwickler FMM_200801 Geschüttelt, nicht gerührt … Das FileMaker Magazin ● Einzige, deutschsprachige Fachzeitschrift zu FileMaker ● Wissen aus erster Hand von anerkannten FileMaker Fachautoren ● Große Themenvielfalt für Anwender, Entwickler und Fortgeschrittene Gut zu wissen Ist Maintenance eigentlich ansteckend? FileMaker für Einsteiger Wie Sie in FileMaker Ihre ersten „Felder bestellen“ Buchbesprechungen © 1994 - 2008 K&K Verlag GmbH, Hamburg Neue Fachbücher zu FileMaker 9 FMM_2008_01.Titel.indd 1 Exklusiv für Premium-Abonnenten 29.04.2008 10:09:42 Uhr ● Sechs FMM Ausgaben pro Jahr ● Kostenlose Nutzung des Abonnentenbereichs auf www.filemaker-magazin.de ● PDF-Online-Archiv mit allen bisher erschienenen Ausgaben ● Jede Ausgabe mit kostenlosen Beispieldateien und Zusatzinfos zum Download Unser Service ● Aktuelle Neuheiten, Tipps und Infos, Kleinanzeigen und vieles mehr jederzeit online auf unseren Webseiten ● Hilfe bei allen Fragen zu FileMaker im FMM Forum ● Kompetente Beratung zum Kauf von FileMaker Lizenzen: Einfach anrufen +49 (0)40 589 65 79 70. Hier finden Sie Aktuelles zu FileMaker Produkten, egal ob Sie kaufen, mieten oder sich einfach informieren möchten. Eine kostenlose Leseprobe des FileMaker Magazins erhalten Sie, wenn Sie hier klicken. Wenn Sie sich für ein FileMaker Magazin Abo interessieren, klicken Sie bitte hier! K&K Verlag GmbH · www.filemaker-magazin.de · Telefon +49 40 589657970