@MySQLGetLastInsertIDPreparedStatement
Syntax
@MySQLGetLastInsertIDPreparedStatement(MySQLPreparedStatementHandle);
Beschreibung
Wenn die Anfrage ein INSERT Statement enthält und dieses auf eine AUTOINCREMENT ID Spalte einwirkt, wird die generierte ID zurückgegeben.
Return:
Im Fehlerfall @Error sonst den abgefragten Wert
Beispiel: @MySQLGetLastInsertIDPreparedStatement(MySQLPreparedStatementHandle);
/* 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))*/
