SlideShare a Scribd company logo
1 of 34
FileMaker Konferenz2010




               Datenaustausch zwischen FileMaker
                          und MySQL

                                Lesen, Vergleichen, Schreiben




Nicolaus Busch, N. Busch GmbH                                   FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                               www.filemaker-konferenz.com
Struktur

               1. Szenario: FileMaker-Runtime und MySQL-Server
                     1. Beispiel MVB3
                     2. Beispiel Litlink
                     3. Lizenz beachten!
               2. Was brauchen wir?
                     1. FileMaker Advanced
                     2. PHP-Plugins
                     3. MySQL
               3. Arbeiten mit FileMaker PHP am Beispiel Smartpill
                     1. Verschiedene Arten, PHP-Code zu integrieren – Script, Feldwert,
                        Custom Function, externe Funktion
                     2. Den Function-Maker nutzen
                     3. Funktionen erstellen
                     4. Update zur Laufzeit via URL



Nicolaus Busch, N. Busch GmbH                                                   FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                               www.filemaker-konferenz.com
Struktur

               4. Aufbau der SQL-Datenbank
               5. Den Datenabgleich organisieren
                     1. Warum ein Transfermodul?
                     2. Was sind neue Daten?
                     3. Protokoll einrichten
                     4. Datenstrukturen vergleichen
                     5. Daten zum SQL-Server schicken
                     6. Daten vom SQL-Server holen
                     7. Konflikte lösen
                     8. Daten schreiben
                     9. Protokoll abschliessen




Nicolaus Busch, N. Busch GmbH                             FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                         www.filemaker-konferenz.com
Szenario

           MVB3: Teamsoftware für die Mütter- und Väterberatung
           • FileMaker Runtime
           • Gleichzeitige Erfassung und Bearbeitung von Daten auf diversen
             Rechnern
           • Datennutzung soweit separat, dass in der Praxis keine Konflikte zu
             erwarten sind
           • Datenabgleich mit MySQL-Server

           Litlink: Wissensmanagement für Geisteswissenschaftler mit Web-
           Anwendung
           • FileMaker Runtime oder Vollversion
           • Erfassung alternierend auf verschiedenen Rechnern des gleichen Users
              oder in der Weboberfläche
           • Projektfreigabe für andere User
           • Datenabgleich mit MySQL-Server




Nicolaus Busch, N. Busch GmbH                                           FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                       www.filemaker-konferenz.com
Lizenz beachten

           Keine Netzwerk-Funktion für Runtime nachbauen

               "All use of the Runtime and Runtime Solutions must be on a standalone
               basis only. You are prohibited from using the Runtime with any
               middleware, application server, CGI, or other software or technology that
               allows more than a single client to access the Runtime."




Nicolaus Busch, N. Busch GmbH                                              FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                          www.filemaker-konferenz.com
Was brauchen wir?

           •   FileMaker natürlich
           •   FileMaker Advanced dringend empfohlen (Data Viewer!)
           •   Ein PHP-Plugin
           •   MySQL (>> XAMP)




Nicolaus Busch, N. Busch GmbH                                         FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                     www.filemaker-konferenz.com
PHP-Plugins

           • Monkeybread MBS SQL Connection
             http://www.monkeybreadsoftware.de
             Umfangreicher Befehlssatz

           • Scodigo Smartpill
             www.scodigo.com
             Stellt Umgebung für PHP zur Verfügung

           • 360works ScriptMaster
             www.360works.com
             Groovy (Java) statt PHP




Nicolaus Busch, N. Busch GmbH                        FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                    www.filemaker-konferenz.com
MySQL Testumgebung einrichten

           Virtuelle Maschine, Website, Server
           Xampp verwenden: http://www.apachefriends.org/de/xampp.html




Nicolaus Busch, N. Busch GmbH                                       FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                   www.filemaker-konferenz.com
PHP-Code: Arbeitsvarianten

           • Code direkt im Script
           • Custom Functions nutzen
           • Mit dem Smartpill Function Maker arbeiten




Nicolaus Busch, N. Busch GmbH                            FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                        www.filemaker-konferenz.com
Code direkt im Script

           Variable setzen [$table; Wert:GetValue( Get( ScriptParameter ) ; 1 )]
           Variable setzen [$ID; Wert:GetValue( Get( ScriptParameter ) ; 2 )]
           Variable setzen [$Command;
             Wert:"echo fm_sql_select("SELECT count(1) FROM "" & $table & ""
             WHERE "_pk_GUID" = '" & $ID & "'") ;" ]
           Variable setzen [$$SQL_Result; Wert:PHP_Execute ( $Command)]
           Aktuelles Script verlassen [$$SQL_Result]




           Probleme mit Anführungszeichen
           Feldname und Tabellennamen in Anführung  "Feldname"
           " im Text  "  "Feldname"
           " im Text  "  "Feldname"

           Feldwert in Hochkomma  ID = '34523'
           Berechneter Wert  "_pk_GUID" = '" & $ID & "'


Nicolaus Busch, N. Busch GmbH                                          FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                      www.filemaker-konferenz.com
Code in Custom Functions

           • Beispiel 1: Temporären Pfad ermitteln
             cf.GetUserTmpFolder:
              PHP_Execute( "echo FM_TEMPORARY_PATH;" )

           • Beispiel 2: Verschlüsselung
             Cf.Encode_Base64:

               Parameter( Text, PW)
               PHP_Execute ( "
                  $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);
                  echo base64_encode($crypt_text);
               ")


Nicolaus Busch, N. Busch GmbH                                         FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                     www.filemaker-konferenz.com
Function Maker

              Code ohne umständliche Anführungszeichen
              Package variables – Sauberer Code
              Kontrollierte Übergabe von Parametern
              Fehlerbehandlung
              Testumgebung




Nicolaus Busch, N. Busch GmbH                             FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                         www.filemaker-konferenz.com
Funktionsbibliotheken erstellen
          •   Den Function-Maker nutzen
          •   Tests definieren
          •   Sets erstellen
          •   Version-Funktion nutzen




Nicolaus Busch, N. Busch GmbH                   FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                               www.filemaker-konferenz.com
Update 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                                      FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                  www.filemaker-konferenz.com
Den Datenabgleich organisieren




                FileMaker-      Transfermodul
                                                 SQL
                Datenbank           (FM)




Nicolaus Busch, N. Busch GmbH                   FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                               www.filemaker-konferenz.com
Aufbau der SQL-Datenbank
                                In allen FM-Tabellen:
                                s_ChanceLocal_n          - Wert "1" wenn lokal geändert

   FileMaker-                   In Global-Tabelle:
   Datenbank                    d_LLwebLastsyncNo_ng
                                d_LLwebNextsyncNo_ng
                                                         – Nummer des letzten abgeschlossenen Synchs
                                                         – Nummer des laufenden Synchs
                                d_LLwebLastDate_tg       - Zeitstempel letzter Abgleich



                                                        Tabellen enthalten immer alle Feldnamen, die in der
                                                        Geschichte des Projekts existierten  Import funktioniert
                                                        immer mit Option "Gleiche Feldnamen"
                           Transfermodul
                               (FM)

                                                                                •   Gleiche Tabellen- und Feldnamen wie in
                                                                                    FileMaker verwenden
                                                                                •   Zusätzliche Tabellen für Metadaten:
                                                                                    web_global, web_synchlog
                                                        SQL                     •   Synchnummer: Sitzungsnummer des
                                                                                    Datenabgleich-Vorgangs in jedem Datensatz
                                                                                •   Webänderung: Timestamp von Upload oder
                                                                                    Bearbeitung im Web




Nicolaus Busch, N. Busch GmbH                                                                     FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                                 www.filemaker-konferenz.com
Warum ein Transfermodul?

           •   Sicherheit
           •   Update-Erwägungen: Aktualisierung unabhängig von Kundendaten
           •   Anpassungen der Daten vor dem Import & Export
           •   Flexibilität – Import aus verschiedenen Fremdsystemen




Nicolaus Busch, N. Busch GmbH                                        FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                    www.filemaker-konferenz.com
Ablauf des Abgleichs

           •   Transfermodul leeren
           •   Neue Daten lokal identifizieren
           •   Datenset in das Transfermodul laden
           •   Daten zum SQL-Server schicken
           •   Transfermodul leeren
           •   Neue Daten auf Server identifizieren
           •   Daten vom Server holen
           •   Daten im Transfermodul aufbereiten
           •   Daten nach Litlink schreiben




Nicolaus Busch, N. Busch GmbH                          FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                      www.filemaker-konferenz.com
Was sind neue Daten

           • Upload:
           Zeitstempel letzte lokale Änderung > Letzter Abgleich UND
           s_ChangeLocal_n = 1

           • Download:
           Synchnummer SQL-Datensatz > Synchnummer letzter Abgleich
             ODER
           ( Zeitstempel Webänderung > Zeitstempel letzter Abgleich
             UND
           Synchnummer SQL-Datensatz <> Synchnummer letzter Abgleich)

           "Pingpong" verhindern:
           Upload nur Elemente, die auf diesem Rechner bearbeitet wurden
           Gleichzeitiger Upload mehrerer Clients ist möglich




Nicolaus Busch, N. Busch GmbH                                          FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                      www.filemaker-konferenz.com
Rechte des Users prüfen

           PHPx_SQL_CheckUserAccount:

           $user = fm_get_parameter('user');
           $pwd = fm_get_parameter('pwd');
           (…)

           $SQL_connect= mysql_connect($server,$account,$password);
             if( $SQL_connect===false) {
                  errorHandler(SQL_ERR_COULD_NOT_CONNECT, 'Database: ' . $db);
             return ;
            }
           mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error());
           $user = mysql_real_escape_string( $user);
           $pwd = mysql_real_escape_string( $pwd);
           $query = "SELECT count(1) as Counter FROM Adressen WHERE d_Email_t='".$user."' and
                d_Passwort_t='".$pwd."' and d_active_i='1'";
           $res = mysql_query($query);
           if(!empty($res)){
              $row = mysql_fetch_assoc($res);
              echo $row['Counter'];
           }


Nicolaus Busch, N. Busch GmbH                                                 FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                             www.filemaker-konferenz.com
Letzte Sitzungsnummer holen…

           PHPx_SQL_GetSynchNo:

           mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error());
           $query = "SELECT * FROM Adressen WHERE d_Email_t='".$user."' and
              d_Passwort_t='".$pwd."' and d_active_i='1'";
           $res     = mysql_query($query);
           $iad     = 0;
           while($row          = mysql_fetch_assoc($res)){
            $litdat_ID         = $row['_pk_guid'];
            $litdat_lastsynch = $row['d_SynchId_n'];
            $iad++;
            echo $litdat_ID."<br>";
            echo $litdat_lastsynch;

            }

             if( $iad!=1) {
             echo 'Error';
             return ;
            }



Nicolaus Busch, N. Busch GmbH                                                          FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                      www.filemaker-konferenz.com
…und neue Sitzungsnummer schreiben
           PHPx_SQL_SetServerSynchNo:

           $sid = fm_get_parameter('sid');
           mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error());
           $user = mysql_real_escape_string( $user);
           $pwd = mysql_real_escape_string( $pwd);
           $query = "UPDATE Adressen SET d_SynchId_n='".$sid."',d_LastUploadId_n='".$sid."'
              ,d_LastUpload_t=now()
           WHERE d_Email_t='".$user."' AND d_Passwort_t='".$pwd."'";
           $res = mysql_query($query);




Nicolaus Busch, N. Busch GmbH                                                      FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                  www.filemaker-konferenz.com
Die ganze Übung im FM-Script
          Variable setzen [$SQL_call; Wert:PHPx_SQL_GetSynchNo ( _DGlobal::d_LLwebuser_tg;
            _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ;
            sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword )]
          Wenn [$SQL_Call = "Error"]
            Aktuelles Script verlassen ["Error: Konnte Synch-Nr. nicht lesen"]
          Sonst
            Variable setzen [$Result; Wert:Substitute( $SQL_call ; "<br>" ; ¶)]
            Variable setzen [$$SQLUserID; Wert:GetValue( $Result ; 1)]
            Variable setzen [$$SQLLastSynchID; Wert:GetValue( $Result ; 2)]
            Feldwert setzen [_DGlobal::d_LLwebnextsyncno_ng[]; $$SQLLastSynchID+1]
            Schreibe Änderung Datens./Abfrage [Ohne Dialogfeld]
          Ende-Wenn

          Variable setzen [$SQL_call; PHPx_SQL_SetServerSynchNo ( _DGlobal::d_LLwebuser_tg;
            _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ;
            sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword ;
            _DGlobal::d_LLwebnextsyncno_ng)]
          Wenn [$SQL_Call = "Error"]
            Aktuelles Script verlassen ["Error: Konnte Synch-Nr. nicht schreiben"]
          Sonst
            Aktuelles Script verlassen ["OK"]
          Ende-Wenn


Nicolaus Busch, N. Busch GmbH                                                FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                            www.filemaker-konferenz.com
Datenstrukturen vergleichen

           Statt hart codiertem Datenaustausch Datenbanken analysieren

           1. Tabellenlisten auslesen & vergleichen
               o FM: Variable Setzen[ $TablesInFM ; "Autoren" & ¶ & "Periodikum" & ¶ & "Titel" …]

               o SQL: $TablesInSQL
                  mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error());
                  $query = mysql_query("SHOW TABLES");
                  while($row = mysql_fetch_assoc($query)) {
                    echo $row['Tables_in_'.$db]."<br>" ;
                  }

               o Schnittmenge: [$TableList = TrText_SortLines( "-unused" ; TrText_ANDText( "-
                 unused" ; $TablesInSQL ; $$TablesInFM )




Nicolaus Busch, N. Busch GmbH                                                         FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                     www.filemaker-konferenz.com
Datenstrukturen vergleichen

2. Feldlisten auslesen & vergleichen

     o Script ausführen ["fn.Smartpill: Get Fieldlist from MYSQL(List)"]
     o Variable setzen [$Table_sql; Wert:Get(ScriptResult)]
     o Script ausführen [" fn.Get Fieldlist from Transfer(List)"]
     o Variable setzen [$Table_fm; Wert:Get(ScriptResult)]
     o Wenn [$Table_sql = "Error" or $Table_fm = "Error"]
     o   Aktuelles Script verlassen ["Error"]
     o Sonst
        $Result = Let( [
         $list     = TrText_SortLines( "-unused" ; TrText_ANDText( "-unused" ; $table_sql ; $table_fm ));
         $list2 = cf.LinesNotStartingWith( $list ; "x";ValueCount( $list );"¶");
         $length = Length($list2) -1];
         Left( $list2 ; $length))
     o Aktuelles Script verlassen [$Result]
     o Ende (wenn)




Nicolaus Busch, N. Busch GmbH                                                       FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                   www.filemaker-konferenz.com
Daten zum SQL-Server schicken
           Variable setzen [$Source; Wert:Get(LayoutTableName)]
           Schleife (Anfang)
             Variable setzen [$ID; Wert:Evaluate($Source & "::_pk_guid")]

               Variable setzen [$Commonfields;
                 Wert:Let( $Fields = cf.SQLInsertCommand ( $Datafields ; "x" ; ValueCount($Datafields)
               );Left( $Fields; Length( $Fields )-2))]

               Variable setzen [$Values;
                Wert:Let($Prevalues = cf.SQLInsertCommandValues ( $Datafields ; "x" ;
               ValueCount($Datafields)) ;"¶" & Left( $Prevalues ; Length( $Prevalues )-2))]

               Variable setzen [$Result;
               Wert:PHPx_SQL_WriteRecordInSQL_DB ( _DGlobal::d_LLwebuser_tg;
               _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ;
               sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword ; $$Kontext ; $ID ;
               $Commonfields ; $Values ; _DGlobal::d_LLwebnextsyncno_ng)]

             Variable setzen [$$SQL_error; Wert:PHP_GetLastError]
             Gehe zu Datens./Abfrage/Seite [Nächste(r); Nach letztem beenden]
           Schleife (Ende)




Nicolaus Busch, N. Busch GmbH                                                          FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                      www.filemaker-konferenz.com
cf.SqlInsertCommand
           //Use like: SetField(Field; cf.SQLUpdateCommand ( T1; T2; ValueCount(T1) ))
           //Params: pT1, pSearch, NpT1

           SetzeVars(
             [line = HoleWert(pT1; NpT1);
              content = Berechne( line )
           ];

               Falls( NpT1 > 1; cf.SQLInsertCommand(pT1; pSearch; NpT1-1)) &
               Falls( ZeichenLinks(line; Länge( pSearch )) <> psearch UND NICHT IstLeer( content );
                line & ",¶")
           )



            "Ort¶PLZ¶Land¶Region"  "Ort,¶PLZ,¶Land,¶Region,¶"




Nicolaus Busch, N. Busch GmbH                                                          FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                      www.filemaker-konferenz.com
cf.SqlInsertCommandValues
           //Use like: SetField(Field; cf.SQLInsertCommandValues ( T1; T2; ValueCount(T1) ))
           //Params: pT1, pSearch, NpT1
           //cf.SQLInsertCommandValues=

           SetzeVars(
             [line=HoleWert(pT1; NpT1);
              Str1 = Falls( ZeichenLinks( line ;1 ) = "_" ODER ZeichenRechts(line;2) <> "_t" ODER
                ZeichenLinks(line; 10)="d_datentyp" ODER $$UTFSupport <> 1 ; Berechne( line ) ;
                cf.CSStoFMText ( LiesAlsCSS( Berechne( line ))));
              Str2 = Austauschen( Str1 ; "" ; "");
              Content = "'" & Austauschen( Str2 ; ["'" ; "''"];[""" ; """];["“" ; "“"];["”" ; "”"];["‟" ; "‟"];["„" ;
                "„"];["„";"„"]) & "'"
           ];

             Falls( NpT1 > 1; cf.SQLInsertCommandValues(pT1; pSearch; NpT1-1)) &
             Falls( ZeichenLinks(line; Länge( pSearch )) <> psearch UND NICHT IstLeer( Str1 );
            content & ",¶")
           )
           D_Titel_t¶d_Ort_t¶d_Schlagworte_t (Städte mit schwierigen Namen¶北京¶N'Djamena)
           'St&auml;dte mit schwierigen Namen',¶'&#21271;&#20140;',¶'N''Djamena',



Nicolaus Busch, N. Busch GmbH                                                                                FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                                            www.filemaker-konferenz.com
SQL_WriteRecordInSQL_DB
           $id ='_pk_GUID';
           $noempty=false; // print out only non empty fields
            if(isset($dbtable) && !empty($dbtable)){
              $commonfields .=",x_fk_User, s_webAenderung_t, x_web_synchid";
              $content .=",'".$litdat_ID."', now(),'".$websynchid."'";
              $where =" WHERE _pk_GUID='". $idsel."'";
              $checkres = mysql_query("select * from ".$dbtable." ".$where );
              $resdel = True;
              if(mysql_fetch_assoc($checkres)){ // record already exists
                    $resdel = mysql_query( "delete from ".$dbtable."".$where);
                    if($resdel===False) echo "Failed delete: ".$idsel."<br>";
              }
              $update = "insert into ".$dbtable." (".$commonfields.") VALUES (".$content.") ";
              if($resdel){
                 $updres = mysql_query($update);
                 if( $updres === False ) {
                   echo "Failed insert: ".$idsel." ";
                   echo mysql_error();
                }
              }
            }




Nicolaus Busch, N. Busch GmbH                                                          FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                      www.filemaker-konferenz.com
Daten vom SQL-Server holen

           1. Die Selection definieren
           …
           $sel = "WHERE x_fk_User='".$litdat_ID."'";
           if(!empty( $lastid)) $sel.=" AND x_web_synchid > '".$lastid."'";
           if(!empty($nextid)) $sel.=" AND x_web_synchid != '".$nextid."'";

           if(!empty($litdat_datesince)){
            date_default_timezone_set('Europe/Berlin');
            $sel .= " AND s_webAenderung_t >'".$litdat_datesince."'";
           }
           $query ="SELECT ".$commonfields." FROM ".$dbtable." ".$sel;
           $res = mysql_query($query);
           …




Nicolaus Busch, N. Busch GmbH                                                 FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                             www.filemaker-konferenz.com
Daten vom SQL-Server holen
           2. Werte lesen und in FM-Tabelle schreiben

            while($dbrow = mysql_fetch_assoc($res)){ // loop over all records
               $fields = ""; $content=""; $if=0;
               foreach($dbrow as $fieldname => $value){
                    $value = str_replace("'","''",$value);
                    if(!empty($fields)){ $fields .=","; $content .=",";}
                    $fields .= """.$fieldname.""";
                    $content .="'".$value."'";
               }
               $ID       = $dbrow['_pk_GUID'];
               $ir++;
               $fields .=",x_IDzuAktualisieren";
               $content .=",'".$ID."'";
               $insert = "insert into "TD_".$dbtable."" (".$fields.") VALUES (".$content.") ";
               $resins = fm_sql_execute($insert);
               if($resins===False) {echo "Failed: ".$ID." ";
                 echo fm_get_last_error();
                 echo "<br>";}
               }
              echo "export ".$dbtable.": ".$ir." records<br>";
              $pb = fm_close_progress_bar('web2local');
            }

Nicolaus Busch, N. Busch GmbH                                                              FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                                          www.filemaker-konferenz.com
Konflikte lösen

           • ID bekannt  Vorhandenen Datensatz aktualisieren
           • ID unbekannt, aber Match über Namen: User fragen:
              Zuordnen zu vorhandenem Datensatz, Relationen anpassen
              Neuer Datensatz
              Verwerfen




Nicolaus Busch, N. Busch GmbH                                     FileMaker Konferenz 2012 Salzburg
Datenaustausch mit SQL                                                 www.filemaker-konferenz.com
Daten schreiben

           Daten aus dem Transfermodul nach Filemaker zurückschreiben
            Codierungen zurückrechnen
           Datensatz erzeugen wenn neu
            Datensatz updaten




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

                    Vielen Dank unseren Sponsoren




       Danke für das Bewerten dieses Vortrages


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

More Related Content

What's hot

Share point rbs overview deutsch
Share point rbs overview deutschShare point rbs overview deutsch
Share point rbs overview deutschSamuel Zürcher
 
Apple iOS - Daten
Apple iOS - DatenApple iOS - Daten
Apple iOS - Datenmesseb
 
Webinar ABAP 7.40 sp5/sp8 Releaseinformationen
Webinar ABAP 7.40 sp5/sp8 ReleaseinformationenWebinar ABAP 7.40 sp5/sp8 Releaseinformationen
Webinar ABAP 7.40 sp5/sp8 ReleaseinformationenCadaxo GmbH
 
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas HirtFMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas HirtVerein FM Konferenz
 
Samuel Zürcher new power of search
Samuel Zürcher new power of searchSamuel Zürcher new power of search
Samuel Zürcher new power of searchDigicomp Academy AG
 
Web 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryWeb 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryStephan Schmidt
 
Überblick Oracle Datenbank 12c
Überblick Oracle Datenbank 12cÜberblick Oracle Datenbank 12c
Überblick Oracle Datenbank 12cIleana Somesan
 

What's hot (8)

Share point rbs overview deutsch
Share point rbs overview deutschShare point rbs overview deutsch
Share point rbs overview deutsch
 
Apple iOS - Daten
Apple iOS - DatenApple iOS - Daten
Apple iOS - Daten
 
Webinar ABAP 7.40 sp5/sp8 Releaseinformationen
Webinar ABAP 7.40 sp5/sp8 ReleaseinformationenWebinar ABAP 7.40 sp5/sp8 Releaseinformationen
Webinar ABAP 7.40 sp5/sp8 Releaseinformationen
 
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas HirtFMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
 
Samuel Zürcher new power of search
Samuel Zürcher new power of searchSamuel Zürcher new power of search
Samuel Zürcher new power of search
 
Web 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryWeb 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface Library
 
Query Result Caching
Query Result CachingQuery Result Caching
Query Result Caching
 
Überblick Oracle Datenbank 12c
Überblick Oracle Datenbank 12cÜberblick Oracle Datenbank 12c
Überblick Oracle Datenbank 12c
 

Viewers also liked

FMK2012: 100% automatisierte Katalog-Produktion von Marcel Moré
FMK2012: 100% automatisierte Katalog-Produktion von Marcel MoréFMK2012: 100% automatisierte Katalog-Produktion von Marcel Moré
FMK2012: 100% automatisierte Katalog-Produktion von Marcel MoréVerein FM Konferenz
 
FMK 2013 FM_Mentoring, Friedrich Egbert
FMK 2013  FM_Mentoring, Friedrich EgbertFMK 2013  FM_Mentoring, Friedrich Egbert
FMK 2013 FM_Mentoring, Friedrich EgbertVerein FM Konferenz
 
Eine kleine praktische Philosophie über das Requirements Engineering
Eine kleine praktische Philosophie über das Requirements EngineeringEine kleine praktische Philosophie über das Requirements Engineering
Eine kleine praktische Philosophie über das Requirements Engineeringadesso AG
 
SAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-A
SAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-ASAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-A
SAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-Adankl+partner consulting gmbh
 
Status of syslog as of 2005
Status of syslog as of 2005Status of syslog as of 2005
Status of syslog as of 2005Rainer Gerhards
 
FMK2012: ERP-Erweiterungen mit FileMaker von Marcin Pankowski
FMK2012: ERP-Erweiterungen mit FileMaker von Marcin PankowskiFMK2012: ERP-Erweiterungen mit FileMaker von Marcin Pankowski
FMK2012: ERP-Erweiterungen mit FileMaker von Marcin PankowskiVerein FM Konferenz
 
Power point daniela 4º a
Power point daniela 4º aPower point daniela 4º a
Power point daniela 4º aRosalía Santos
 
Bibel Zeitleiste - Bible Timeline
Bibel Zeitleiste - Bible TimelineBibel Zeitleiste - Bible Timeline
Bibel Zeitleiste - Bible TimelineFreekidstories
 
Basiswissen hsp rsp
Basiswissen hsp rspBasiswissen hsp rsp
Basiswissen hsp rspkkreienbrink
 
Daftar harga barang
Daftar harga barangDaftar harga barang
Daftar harga barangAditya Eka
 
Hürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for OvercomingHürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for OvercomingFreekidstories
 
Die Geschichte des Schreibens
Die Geschichte des SchreibensDie Geschichte des Schreibens
Die Geschichte des Schreibenshabasch
 
ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...
ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...
ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...ULC Business Solutions GmbH
 
Social Media Atlas 2012
Social Media Atlas 2012Social Media Atlas 2012
Social Media Atlas 2012Faktenkontor
 
FMK 2013, Barrierefreie Software, Patrick Risch
FMK 2013, Barrierefreie Software, Patrick RischFMK 2013, Barrierefreie Software, Patrick Risch
FMK 2013, Barrierefreie Software, Patrick RischVerein FM Konferenz
 
Complex Event Processing (CEP) gets in touch with JSF
Complex Event Processing (CEP) gets in touch with JSFComplex Event Processing (CEP) gets in touch with JSF
Complex Event Processing (CEP) gets in touch with JSFadesso AG
 

Viewers also liked (19)

FMK2012: 100% automatisierte Katalog-Produktion von Marcel Moré
FMK2012: 100% automatisierte Katalog-Produktion von Marcel MoréFMK2012: 100% automatisierte Katalog-Produktion von Marcel Moré
FMK2012: 100% automatisierte Katalog-Produktion von Marcel Moré
 
FMK 2013 FM_Mentoring, Friedrich Egbert
FMK 2013  FM_Mentoring, Friedrich EgbertFMK 2013  FM_Mentoring, Friedrich Egbert
FMK 2013 FM_Mentoring, Friedrich Egbert
 
Vitiligo Q&A German
Vitiligo Q&A GermanVitiligo Q&A German
Vitiligo Q&A German
 
Eine kleine praktische Philosophie über das Requirements Engineering
Eine kleine praktische Philosophie über das Requirements EngineeringEine kleine praktische Philosophie über das Requirements Engineering
Eine kleine praktische Philosophie über das Requirements Engineering
 
SAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-A
SAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-ASAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-A
SAP PM (EAM) Training für Einsteiger und Fortgeschrittene - Training TA01-12b-A
 
Status of syslog as of 2005
Status of syslog as of 2005Status of syslog as of 2005
Status of syslog as of 2005
 
FMK2012: ERP-Erweiterungen mit FileMaker von Marcin Pankowski
FMK2012: ERP-Erweiterungen mit FileMaker von Marcin PankowskiFMK2012: ERP-Erweiterungen mit FileMaker von Marcin Pankowski
FMK2012: ERP-Erweiterungen mit FileMaker von Marcin Pankowski
 
Schenker presentation
Schenker presentationSchenker presentation
Schenker presentation
 
Power point daniela 4º a
Power point daniela 4º aPower point daniela 4º a
Power point daniela 4º a
 
Bibel Zeitleiste - Bible Timeline
Bibel Zeitleiste - Bible TimelineBibel Zeitleiste - Bible Timeline
Bibel Zeitleiste - Bible Timeline
 
Basiswissen hsp rsp
Basiswissen hsp rspBasiswissen hsp rsp
Basiswissen hsp rsp
 
Daftar harga barang
Daftar harga barangDaftar harga barang
Daftar harga barang
 
Hürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for OvercomingHürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for Overcoming
 
Die Geschichte des Schreibens
Die Geschichte des SchreibensDie Geschichte des Schreibens
Die Geschichte des Schreibens
 
Food 2
Food 2Food 2
Food 2
 
ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...
ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...
ULC-Vortrag beim ConnectDay 2013 in Köln zu Prozessoptimierung auf Basis IBM ...
 
Social Media Atlas 2012
Social Media Atlas 2012Social Media Atlas 2012
Social Media Atlas 2012
 
FMK 2013, Barrierefreie Software, Patrick Risch
FMK 2013, Barrierefreie Software, Patrick RischFMK 2013, Barrierefreie Software, Patrick Risch
FMK 2013, Barrierefreie Software, Patrick Risch
 
Complex Event Processing (CEP) gets in touch with JSF
Complex Event Processing (CEP) gets in touch with JSFComplex Event Processing (CEP) gets in touch with JSF
Complex Event Processing (CEP) gets in touch with JSF
 

Similar to FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch

FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...Verein FM Konferenz
 
FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...
FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...
FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...Verein FM Konferenz
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzVerein FM Konferenz
 
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzFMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzVerein FM Konferenz
 
FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …
FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …
FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …Verein FM Konferenz
 
FMK2017 - MBS FileMaker Plugin by Christian Schmitz
FMK2017 - MBS FileMaker Plugin by Christian SchmitzFMK2017 - MBS FileMaker Plugin by Christian Schmitz
FMK2017 - MBS FileMaker Plugin by Christian SchmitzVerein FM Konferenz
 
FMK2017 - FileMaker Server in der Cloud by Volker Krambrich
FMK2017 - FileMaker Server in der Cloud by Volker KrambrichFMK2017 - FileMaker Server in der Cloud by Volker Krambrich
FMK2017 - FileMaker Server in der Cloud by Volker KrambrichVerein FM Konferenz
 
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinVerein FM Konferenz
 
FMK2016 - Christian Schmitz - MBS FileMaker Plugin
FMK2016 - Christian Schmitz - MBS FileMaker PluginFMK2016 - Christian Schmitz - MBS FileMaker Plugin
FMK2016 - Christian Schmitz - MBS FileMaker PluginVerein FM Konferenz
 
FMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin ZieglerFMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin ZieglerVerein FM Konferenz
 
FMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web Services
FMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web ServicesFMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web Services
FMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web ServicesVerein FM Konferenz
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichVerein FM Konferenz
 
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichFMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichVerein FM Konferenz
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebAndreas Schmidt
 
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam AugustinVerein FM Konferenz
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerSteven Grzbielok
 
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserFMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserVerein FM Konferenz
 
FMK2017 - Plugins für die FileMaker Cloud by Christian Schmitz
FMK2017 - Plugins für die FileMaker Cloud by Christian SchmitzFMK2017 - Plugins für die FileMaker Cloud by Christian Schmitz
FMK2017 - Plugins für die FileMaker Cloud by Christian SchmitzVerein FM Konferenz
 

Similar to FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch (20)

FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
 
FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...
FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...
FMK2013: FileMaker und Kerio Connect by Bernhard Schulz - schubec GmbH und Ca...
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian Schmitz
 
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzFMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
 
FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …
FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …
FMK2012: Programmstrukturen - FileMaker Skripten nicht nur für Experten …
 
FMK2017 - MBS FileMaker Plugin by Christian Schmitz
FMK2017 - MBS FileMaker Plugin by Christian SchmitzFMK2017 - MBS FileMaker Plugin by Christian Schmitz
FMK2017 - MBS FileMaker Plugin by Christian Schmitz
 
FMK2017 - FileMaker Server in der Cloud by Volker Krambrich
FMK2017 - FileMaker Server in der Cloud by Volker KrambrichFMK2017 - FileMaker Server in der Cloud by Volker Krambrich
FMK2017 - FileMaker Server in der Cloud by Volker Krambrich
 
BizSpark goes Cloud
BizSpark goes CloudBizSpark goes Cloud
BizSpark goes Cloud
 
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
 
FMK2016 - Christian Schmitz - MBS FileMaker Plugin
FMK2016 - Christian Schmitz - MBS FileMaker PluginFMK2016 - Christian Schmitz - MBS FileMaker Plugin
FMK2016 - Christian Schmitz - MBS FileMaker Plugin
 
FMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin ZieglerFMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
FMK 2013 Schnittstellen Datenaustausch, Longin Ziegler
 
Node.js
Node.jsNode.js
Node.js
 
FMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web Services
FMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web ServicesFMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web Services
FMK2016 - Volker Krambrich - FileMaker Cloud - Amazon Web Services
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
 
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichFMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserFMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
 
FMK2017 - Plugins für die FileMaker Cloud by Christian Schmitz
FMK2017 - Plugins für die FileMaker Cloud by Christian SchmitzFMK2017 - Plugins für die FileMaker Cloud by Christian Schmitz
FMK2017 - Plugins für die FileMaker Cloud by Christian Schmitz
 

More from Verein FM Konferenz

FMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfFMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfVerein FM Konferenz
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsVerein FM Konferenz
 
FMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsFMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsVerein FM Konferenz
 
FMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzFMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzVerein FM Konferenz
 
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzFMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzVerein FM Konferenz
 
FMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam AugustingFMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam AugustingVerein FM Konferenz
 
FMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinFMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinVerein FM Konferenz
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtVerein FM Konferenz
 
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtFMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtVerein FM Konferenz
 
FMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonFMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonVerein FM Konferenz
 
FMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussFMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussVerein FM Konferenz
 
FMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussFMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussVerein FM Konferenz
 
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdfFMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdfVerein FM Konferenz
 
FMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonFMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonVerein FM Konferenz
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoVerein FM Konferenz
 
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaFMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaVerein FM Konferenz
 
FMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaFMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaVerein FM Konferenz
 
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairFmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairVerein FM Konferenz
 
FMK2019 Layout und Eigene Menüs-Management by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management  by Jörg KösterFMK2019 Layout und Eigene Menüs-Management  by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management by Jörg KösterVerein FM Konferenz
 
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...Verein FM Konferenz
 

More from Verein FM Konferenz (20)

FMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfFMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdf
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
 
FMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsFMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp Puls
 
FMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzFMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin Schwarz
 
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzFMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
 
FMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam AugustingFMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam Augusting
 
FMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinFMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam Augustin
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas Hirt
 
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtFMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
 
FMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonFMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell Watson
 
FMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussFMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph Kluss
 
FMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussFMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph Kluss
 
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdfFMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
 
FMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonFMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell Watson
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
 
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaFMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
 
FMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaFMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza Koudelka
 
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairFmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
 
FMK2019 Layout und Eigene Menüs-Management by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management  by Jörg KösterFMK2019 Layout und Eigene Menüs-Management  by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management by Jörg Köster
 
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...
 

FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch

  • 1. FileMaker Konferenz2010 Datenaustausch zwischen FileMaker und MySQL Lesen, Vergleichen, Schreiben Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 2. Struktur 1. Szenario: FileMaker-Runtime und MySQL-Server 1. Beispiel MVB3 2. Beispiel Litlink 3. Lizenz beachten! 2. Was brauchen wir? 1. FileMaker Advanced 2. PHP-Plugins 3. MySQL 3. Arbeiten mit FileMaker PHP am Beispiel Smartpill 1. Verschiedene Arten, PHP-Code zu integrieren – Script, Feldwert, Custom Function, externe Funktion 2. Den Function-Maker nutzen 3. Funktionen erstellen 4. Update zur Laufzeit via URL Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 3. Struktur 4. Aufbau der SQL-Datenbank 5. Den Datenabgleich organisieren 1. Warum ein Transfermodul? 2. Was sind neue Daten? 3. Protokoll einrichten 4. Datenstrukturen vergleichen 5. Daten zum SQL-Server schicken 6. Daten vom SQL-Server holen 7. Konflikte lösen 8. Daten schreiben 9. Protokoll abschliessen Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 4. Szenario MVB3: Teamsoftware für die Mütter- und Väterberatung • FileMaker Runtime • Gleichzeitige Erfassung und Bearbeitung von Daten auf diversen Rechnern • Datennutzung soweit separat, dass in der Praxis keine Konflikte zu erwarten sind • Datenabgleich mit MySQL-Server Litlink: Wissensmanagement für Geisteswissenschaftler mit Web- Anwendung • FileMaker Runtime oder Vollversion • Erfassung alternierend auf verschiedenen Rechnern des gleichen Users oder in der Weboberfläche • Projektfreigabe für andere User • Datenabgleich mit MySQL-Server Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 5. Lizenz beachten Keine Netzwerk-Funktion für Runtime nachbauen "All use of the Runtime and Runtime Solutions must be on a standalone basis only. You are prohibited from using the Runtime with any middleware, application server, CGI, or other software or technology that allows more than a single client to access the Runtime." Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 6. Was brauchen wir? • FileMaker natürlich • FileMaker Advanced dringend empfohlen (Data Viewer!) • Ein PHP-Plugin • MySQL (>> XAMP) Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 7. PHP-Plugins • Monkeybread MBS SQL Connection http://www.monkeybreadsoftware.de Umfangreicher Befehlssatz • Scodigo Smartpill www.scodigo.com Stellt Umgebung für PHP zur Verfügung • 360works ScriptMaster www.360works.com Groovy (Java) statt PHP Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 8. MySQL Testumgebung einrichten Virtuelle Maschine, Website, Server Xampp verwenden: http://www.apachefriends.org/de/xampp.html Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 9. PHP-Code: Arbeitsvarianten • Code direkt im Script • Custom Functions nutzen • Mit dem Smartpill Function Maker arbeiten Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 10. Code direkt im Script Variable setzen [$table; Wert:GetValue( Get( ScriptParameter ) ; 1 )] Variable setzen [$ID; Wert:GetValue( Get( ScriptParameter ) ; 2 )] Variable setzen [$Command; Wert:"echo fm_sql_select("SELECT count(1) FROM "" & $table & "" WHERE "_pk_GUID" = '" & $ID & "'") ;" ] Variable setzen [$$SQL_Result; Wert:PHP_Execute ( $Command)] Aktuelles Script verlassen [$$SQL_Result] Probleme mit Anführungszeichen Feldname und Tabellennamen in Anführung  "Feldname" " im Text  "  "Feldname" " im Text  "  "Feldname" Feldwert in Hochkomma  ID = '34523' Berechneter Wert  "_pk_GUID" = '" & $ID & "' Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 11. Code in Custom Functions • Beispiel 1: Temporären Pfad ermitteln cf.GetUserTmpFolder: PHP_Execute( "echo FM_TEMPORARY_PATH;" ) • Beispiel 2: Verschlüsselung Cf.Encode_Base64: Parameter( Text, PW) PHP_Execute ( " $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); echo base64_encode($crypt_text); ") Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 12. Function Maker  Code ohne umständliche Anführungszeichen  Package variables – Sauberer Code  Kontrollierte Übergabe von Parametern  Fehlerbehandlung  Testumgebung Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 13. Funktionsbibliotheken erstellen • Den Function-Maker nutzen • Tests definieren • Sets erstellen • Version-Funktion nutzen Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 14. Update 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 FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 15. Den Datenabgleich organisieren FileMaker- Transfermodul SQL Datenbank (FM) Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 16. Aufbau der SQL-Datenbank In allen FM-Tabellen: s_ChanceLocal_n - Wert "1" wenn lokal geändert FileMaker- In Global-Tabelle: Datenbank d_LLwebLastsyncNo_ng d_LLwebNextsyncNo_ng – Nummer des letzten abgeschlossenen Synchs – Nummer des laufenden Synchs d_LLwebLastDate_tg - Zeitstempel letzter Abgleich Tabellen enthalten immer alle Feldnamen, die in der Geschichte des Projekts existierten  Import funktioniert immer mit Option "Gleiche Feldnamen" Transfermodul (FM) • Gleiche Tabellen- und Feldnamen wie in FileMaker verwenden • Zusätzliche Tabellen für Metadaten: web_global, web_synchlog SQL • Synchnummer: Sitzungsnummer des Datenabgleich-Vorgangs in jedem Datensatz • Webänderung: Timestamp von Upload oder Bearbeitung im Web Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 17. Warum ein Transfermodul? • Sicherheit • Update-Erwägungen: Aktualisierung unabhängig von Kundendaten • Anpassungen der Daten vor dem Import & Export • Flexibilität – Import aus verschiedenen Fremdsystemen Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 18. Ablauf des Abgleichs • Transfermodul leeren • Neue Daten lokal identifizieren • Datenset in das Transfermodul laden • Daten zum SQL-Server schicken • Transfermodul leeren • Neue Daten auf Server identifizieren • Daten vom Server holen • Daten im Transfermodul aufbereiten • Daten nach Litlink schreiben Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 19. Was sind neue Daten • Upload: Zeitstempel letzte lokale Änderung > Letzter Abgleich UND s_ChangeLocal_n = 1 • Download: Synchnummer SQL-Datensatz > Synchnummer letzter Abgleich ODER ( Zeitstempel Webänderung > Zeitstempel letzter Abgleich UND Synchnummer SQL-Datensatz <> Synchnummer letzter Abgleich) "Pingpong" verhindern: Upload nur Elemente, die auf diesem Rechner bearbeitet wurden Gleichzeitiger Upload mehrerer Clients ist möglich Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 20. Rechte des Users prüfen PHPx_SQL_CheckUserAccount: $user = fm_get_parameter('user'); $pwd = fm_get_parameter('pwd'); (…) $SQL_connect= mysql_connect($server,$account,$password); if( $SQL_connect===false) { errorHandler(SQL_ERR_COULD_NOT_CONNECT, 'Database: ' . $db); return ; } mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error()); $user = mysql_real_escape_string( $user); $pwd = mysql_real_escape_string( $pwd); $query = "SELECT count(1) as Counter FROM Adressen WHERE d_Email_t='".$user."' and d_Passwort_t='".$pwd."' and d_active_i='1'"; $res = mysql_query($query); if(!empty($res)){ $row = mysql_fetch_assoc($res); echo $row['Counter']; } Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 21. Letzte Sitzungsnummer holen… PHPx_SQL_GetSynchNo: mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error()); $query = "SELECT * FROM Adressen WHERE d_Email_t='".$user."' and d_Passwort_t='".$pwd."' and d_active_i='1'"; $res = mysql_query($query); $iad = 0; while($row = mysql_fetch_assoc($res)){ $litdat_ID = $row['_pk_guid']; $litdat_lastsynch = $row['d_SynchId_n']; $iad++; echo $litdat_ID."<br>"; echo $litdat_lastsynch; } if( $iad!=1) { echo 'Error'; return ; } Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 22. …und neue Sitzungsnummer schreiben PHPx_SQL_SetServerSynchNo: $sid = fm_get_parameter('sid'); mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error()); $user = mysql_real_escape_string( $user); $pwd = mysql_real_escape_string( $pwd); $query = "UPDATE Adressen SET d_SynchId_n='".$sid."',d_LastUploadId_n='".$sid."' ,d_LastUpload_t=now() WHERE d_Email_t='".$user."' AND d_Passwort_t='".$pwd."'"; $res = mysql_query($query); Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 23. Die ganze Übung im FM-Script Variable setzen [$SQL_call; Wert:PHPx_SQL_GetSynchNo ( _DGlobal::d_LLwebuser_tg; _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ; sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword )] Wenn [$SQL_Call = "Error"] Aktuelles Script verlassen ["Error: Konnte Synch-Nr. nicht lesen"] Sonst Variable setzen [$Result; Wert:Substitute( $SQL_call ; "<br>" ; ¶)] Variable setzen [$$SQLUserID; Wert:GetValue( $Result ; 1)] Variable setzen [$$SQLLastSynchID; Wert:GetValue( $Result ; 2)] Feldwert setzen [_DGlobal::d_LLwebnextsyncno_ng[]; $$SQLLastSynchID+1] Schreibe Änderung Datens./Abfrage [Ohne Dialogfeld] Ende-Wenn Variable setzen [$SQL_call; PHPx_SQL_SetServerSynchNo ( _DGlobal::d_LLwebuser_tg; _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ; sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword ; _DGlobal::d_LLwebnextsyncno_ng)] Wenn [$SQL_Call = "Error"] Aktuelles Script verlassen ["Error: Konnte Synch-Nr. nicht schreiben"] Sonst Aktuelles Script verlassen ["OK"] Ende-Wenn Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 24. Datenstrukturen vergleichen Statt hart codiertem Datenaustausch Datenbanken analysieren 1. Tabellenlisten auslesen & vergleichen o FM: Variable Setzen[ $TablesInFM ; "Autoren" & ¶ & "Periodikum" & ¶ & "Titel" …] o SQL: $TablesInSQL mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error()); $query = mysql_query("SHOW TABLES"); while($row = mysql_fetch_assoc($query)) { echo $row['Tables_in_'.$db]."<br>" ; } o Schnittmenge: [$TableList = TrText_SortLines( "-unused" ; TrText_ANDText( "- unused" ; $TablesInSQL ; $$TablesInFM ) Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 25. Datenstrukturen vergleichen 2. Feldlisten auslesen & vergleichen o Script ausführen ["fn.Smartpill: Get Fieldlist from MYSQL(List)"] o Variable setzen [$Table_sql; Wert:Get(ScriptResult)] o Script ausführen [" fn.Get Fieldlist from Transfer(List)"] o Variable setzen [$Table_fm; Wert:Get(ScriptResult)] o Wenn [$Table_sql = "Error" or $Table_fm = "Error"] o Aktuelles Script verlassen ["Error"] o Sonst $Result = Let( [ $list = TrText_SortLines( "-unused" ; TrText_ANDText( "-unused" ; $table_sql ; $table_fm )); $list2 = cf.LinesNotStartingWith( $list ; "x";ValueCount( $list );"¶"); $length = Length($list2) -1]; Left( $list2 ; $length)) o Aktuelles Script verlassen [$Result] o Ende (wenn) Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 26. Daten zum SQL-Server schicken Variable setzen [$Source; Wert:Get(LayoutTableName)] Schleife (Anfang) Variable setzen [$ID; Wert:Evaluate($Source & "::_pk_guid")] Variable setzen [$Commonfields; Wert:Let( $Fields = cf.SQLInsertCommand ( $Datafields ; "x" ; ValueCount($Datafields) );Left( $Fields; Length( $Fields )-2))] Variable setzen [$Values; Wert:Let($Prevalues = cf.SQLInsertCommandValues ( $Datafields ; "x" ; ValueCount($Datafields)) ;"¶" & Left( $Prevalues ; Length( $Prevalues )-2))] Variable setzen [$Result; Wert:PHPx_SQL_WriteRecordInSQL_DB ( _DGlobal::d_LLwebuser_tg; _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ; sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword ; $$Kontext ; $ID ; $Commonfields ; $Values ; _DGlobal::d_LLwebnextsyncno_ng)] Variable setzen [$$SQL_error; Wert:PHP_GetLastError] Gehe zu Datens./Abfrage/Seite [Nächste(r); Nach letztem beenden] Schleife (Ende) Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 27. cf.SqlInsertCommand //Use like: SetField(Field; cf.SQLUpdateCommand ( T1; T2; ValueCount(T1) )) //Params: pT1, pSearch, NpT1 SetzeVars( [line = HoleWert(pT1; NpT1); content = Berechne( line ) ]; Falls( NpT1 > 1; cf.SQLInsertCommand(pT1; pSearch; NpT1-1)) & Falls( ZeichenLinks(line; Länge( pSearch )) <> psearch UND NICHT IstLeer( content ); line & ",¶") )  "Ort¶PLZ¶Land¶Region"  "Ort,¶PLZ,¶Land,¶Region,¶" Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 28. cf.SqlInsertCommandValues //Use like: SetField(Field; cf.SQLInsertCommandValues ( T1; T2; ValueCount(T1) )) //Params: pT1, pSearch, NpT1 //cf.SQLInsertCommandValues= SetzeVars( [line=HoleWert(pT1; NpT1); Str1 = Falls( ZeichenLinks( line ;1 ) = "_" ODER ZeichenRechts(line;2) <> "_t" ODER ZeichenLinks(line; 10)="d_datentyp" ODER $$UTFSupport <> 1 ; Berechne( line ) ; cf.CSStoFMText ( LiesAlsCSS( Berechne( line )))); Str2 = Austauschen( Str1 ; "" ; ""); Content = "'" & Austauschen( Str2 ; ["'" ; "''"];[""" ; """];["“" ; "“"];["”" ; "”"];["‟" ; "‟"];["„" ; "„"];["„";"„"]) & "'" ]; Falls( NpT1 > 1; cf.SQLInsertCommandValues(pT1; pSearch; NpT1-1)) & Falls( ZeichenLinks(line; Länge( pSearch )) <> psearch UND NICHT IstLeer( Str1 ); content & ",¶") )  D_Titel_t¶d_Ort_t¶d_Schlagworte_t (Städte mit schwierigen Namen¶北京¶N'Djamena)  'St&auml;dte mit schwierigen Namen',¶'&#21271;&#20140;',¶'N''Djamena', Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 29. SQL_WriteRecordInSQL_DB $id ='_pk_GUID'; $noempty=false; // print out only non empty fields if(isset($dbtable) && !empty($dbtable)){ $commonfields .=",x_fk_User, s_webAenderung_t, x_web_synchid"; $content .=",'".$litdat_ID."', now(),'".$websynchid."'"; $where =" WHERE _pk_GUID='". $idsel."'"; $checkres = mysql_query("select * from ".$dbtable." ".$where ); $resdel = True; if(mysql_fetch_assoc($checkres)){ // record already exists $resdel = mysql_query( "delete from ".$dbtable."".$where); if($resdel===False) echo "Failed delete: ".$idsel."<br>"; } $update = "insert into ".$dbtable." (".$commonfields.") VALUES (".$content.") "; if($resdel){ $updres = mysql_query($update); if( $updres === False ) { echo "Failed insert: ".$idsel." "; echo mysql_error(); } } } Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 30. Daten vom SQL-Server holen 1. Die Selection definieren … $sel = "WHERE x_fk_User='".$litdat_ID."'"; if(!empty( $lastid)) $sel.=" AND x_web_synchid > '".$lastid."'"; if(!empty($nextid)) $sel.=" AND x_web_synchid != '".$nextid."'"; if(!empty($litdat_datesince)){ date_default_timezone_set('Europe/Berlin'); $sel .= " AND s_webAenderung_t >'".$litdat_datesince."'"; } $query ="SELECT ".$commonfields." FROM ".$dbtable." ".$sel; $res = mysql_query($query); … Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 31. Daten vom SQL-Server holen 2. Werte lesen und in FM-Tabelle schreiben while($dbrow = mysql_fetch_assoc($res)){ // loop over all records $fields = ""; $content=""; $if=0; foreach($dbrow as $fieldname => $value){ $value = str_replace("'","''",$value); if(!empty($fields)){ $fields .=","; $content .=",";} $fields .= """.$fieldname."""; $content .="'".$value."'"; } $ID = $dbrow['_pk_GUID']; $ir++; $fields .=",x_IDzuAktualisieren"; $content .=",'".$ID."'"; $insert = "insert into "TD_".$dbtable."" (".$fields.") VALUES (".$content.") "; $resins = fm_sql_execute($insert); if($resins===False) {echo "Failed: ".$ID." "; echo fm_get_last_error(); echo "<br>";} } echo "export ".$dbtable.": ".$ir." records<br>"; $pb = fm_close_progress_bar('web2local'); } Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 32. Konflikte lösen • ID bekannt  Vorhandenen Datensatz aktualisieren • ID unbekannt, aber Match über Namen: User fragen:  Zuordnen zu vorhandenem Datensatz, Relationen anpassen  Neuer Datensatz  Verwerfen Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 33. Daten schreiben Daten aus dem Transfermodul nach Filemaker zurückschreiben  Codierungen zurückrechnen Datensatz erzeugen wenn neu  Datensatz updaten Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com
  • 34. FileMaker Konferenz2010 Vielen Dank unseren Sponsoren Danke für das Bewerten dieses Vortrages Nicolaus Busch, N. Busch GmbH FileMaker Konferenz 2012 Salzburg Datenaustausch mit SQL www.filemaker-konferenz.com