Function DE Version 5.00

@MySQLExecutePreparedStatement

SQL

Syntax

@MySQLExecutePreparedStatement(MySQLPreparedStatementHandle[;Parameter]);

Beschreibung

Führt eine vorbereitete Anfrage zum MySQLPreparedStatementHandle aus.
Nach dem Handle werden die Parameter korrespondierend zur Anfrage angegeben.

Return:
Im Erfolgsfall TRUE sonst @Error;

ACHTUNG der MySQLPreparedStatementHandle kann durch den Aufruf dieser Funktion verändert werden (wenn eine Ergebnismenge erzeugt wird) und sollte deshalb bei der Übergabe in DEFFN-Funktionen stehts by Referenz übergeben werden!


Beispiel: @MySQLExecutePreparedStatement(MySQLPreparedStatementHandle[;Parameter]);

/* Beispiel: Einfache Übertragung von Notes-Dokumenten in eine MySQL-Tabelle.
Dieses Script führt keinen Abgleich und keine Synchronisation durch.
Die Zieltabelle wird zuerst geleert, danach werden alle passenden Notes-Dokumente neu eingefügt.
Die von MySQL erzeugte ID wird zurück in das jeweilige Notes-Dokument geschrieben. */

SrcDBPath:="test\\testdb1.nsf";
SrcDBh:=@OpenDB(SrcDBPath);

/* Wenn die Notes-Datenbank nicht geöffnet werden konnte, Fehler protokollieren. */
IF(@IsError(SrcDBh)){
@LogReport(SrcDBh;3);
}ELSE{

/* MySQL-Handle initialisieren. */
MySQLh:=@MySQLInit;

/* Wenn die MySQL-Initialisierung fehlschlägt, Fehler protokollieren. */
IF(@IsError(MySQLh)){
   @LogReport(MySQLh;3);
}ELSE{
   /* MySQL-Optionen setzen bzw. initialisieren. */
   @MySQLOptions(MySQLh);
   
   /* Verbindungsdaten für den MySQL-Server festlegen. */
   MySQLUser:="MySQLConnector";
   MySQLPassword:="ConnectorPassword";
   MySQLDefaultDatabase:="testdb";
   MySQLHost:="172.16.1.215";
   
   /* Verbindung zur MySQL-Datenbank herstellen. */
   Ret:=@MySQLConnect(MySQLh;MySQLHost;MySQLUser;MySQLPassword;MySQLDefaultDatabase);
   
   /* Wenn die Verbindung fehlschlägt, Fehler protokollieren. */
   IF(@IsError(Ret)){
      @LogReport(Ret;3);
   }ELSE{
      /* Ziel-Tabelle vor der Übertragung leeren.
       Es findet kein Abgleich statt; die Daten werden vollständig neu übertragen. */
      QueryStr:="TRUNCATE testdb.amount;";
      Ret:=@MySQLQuery(MySQLh;QueryStr);
      IF(@IsError(Ret)){
         /* Wenn die Tabelle nicht geleert werden kann, wird der Import nicht fortgesetzt. */
         @LogReport(Ret;3);
      }ELSE{
         /* Prepared Statement für das Einfügen der Notes-Daten in MySQL vorbereiten.
          ModTime wird direkt in MySQL über NOW() gesetzt. */
         QueryStr:="INSERT INTO testdb.amount (Name,Amount,UID,ModTime) VALUES (?,?,?,NOW());";
         
         /* Datentypen und Feldlängen für die Parameter des Prepared Statements festlegen. */
         QueryDataTypes:=253:4:253;
         QueryLengths:=30:0:32;
         
         /* Prepared Statement erzeugen. */
         MySql_PrepStat:=@MySQLCreatePreparedStatement(MySQLh;QueryStr;QueryDataTypes;QueryLengths);
         
         /* Wenn das Prepared Statement nicht erzeugt werden konnte, Fehler protokollieren. */
         IF(@IsError(MySql_PrepStat)){
            @LogReport(MySql_PrepStat;3);
         }ELSE{
            /* Notes-Dokumente auswählen, die übertragen werden sollen. */
            ScanFormula:="SELECT Form=\"MySqlAmount\";";
            
            /* Quelldatenbank nach passenden Dokumenten scannen und UNIDs sammeln. */
            UNIDList:=@ScanDB(SrcDBh;ScanFormula;@AnyAllDay;1;2);
            
            /* Schleife über alle gefundenen UNIDs vorbereiten. */
            UNIDList_Index:=1;
            UNIDList_Ele:=@Elements(UNIDList);
            WHILE(UNIDList_Index<=UNIDList_Ele){
               /* Aktuelle UNID aus der Liste lesen und zusätzlich als Text aufbereiten. */
               ThisNoteUNID:=@GetListElement(UNIDList;UNIDList_Index);
               ThisNoteUNIDText:=@GetListElement(@Text(ThisNoteUNID);1);
               
               /* Aktuelles Notes-Dokument über seine UNID öffnen. */
               ThisNoteh:=@OpenNoteByUID(SrcDBh;ThisNoteUNID;ThisNoteh;1);
               
               /* Zu übertragende Werte protokollieren. */
               @LogReport("UNID :"+ThisNoteUNIDText;3);
               @LogReport("Name :"+Name[ThisNoteh];3);
               @LogReport("Amount :"+@Text(Amount[ThisNoteh]);3);
               
               /* Prepared Statement mit den Werten aus dem Notes-Dokument ausführen. */
               Ret:=@MySQLExecutePreparedStatement(MySql_PrepStat;Name[ThisNoteh];Amount[ThisNoteh];ThisNoteUNIDText);
               
               /* Nur bei erfolgreichem INSERT die erzeugte MySQL-ID lesen und zurückschreiben. */
               IF(@IsError(Ret)){
                  @LogReport(Ret;3);
               }ELSE{
                  /* Die von MySQL erzeugte ID des eingefügten Datensatzes ermitteln. */
                  ThisQueryInsertedID:=@MySQLGetLastInsertIDPreparedStatement(MySql_PrepStat);
                  
                  /* Die erzeugte MySQL-ID zurück in das Notes-Dokument schreiben. */
                  MySQLID[ThisNoteh]:=ThisQueryInsertedID;
                  @LogReport("MySQLID:"+@Text(MySQLID[ThisNoteh]);3);
               }
               
               /* Notes-Dokument speichern und schließen. */
               ThisNoteh:=@CloseNote(ThisNoteh;1);
               
               /* Zum nächsten Listeneintrag wechseln. */
               @Increment(UNIDList_Index);
            } /*WHILE(UNIDList_Index<=UNIDList_Ele)*/
            
            /* Prepared Statement schließen. */
            MySql_PrepStat:=@MySQLClosePreparedStatement(MySql_PrepStat);
         } /*END ELSE IF(@IsError(MySql_PrepStat))*/
      } /*END ELSE IF(@IsError(Ret)) TRUNCATE*/
   } /*END ELSE IF(@IsError(Ret)) @MySQLConnect*/
   
   /* MySQL-Verbindung schließen. */
   MySQLh:=@MySQLClose(MySQLh);
} /*END ELSE IF(@IsError(MySQLh))*/

/* MySQL-Thread-Kontext beenden bzw. aufräumen. */
@MySQLThreadEnd;

/* Notes-Quelldatenbank schließen. */
SrcDBh:=@CloseDB(SrcDBh);
} /*END ELSE IF(@IsError(SrcDBh))*/