@MySQLFetchRow
Syntax
@MySQLFetchRow(MySQLResultHandle;FNAnzahl[;ErgebnisFelder;...]);
Beschreibung
Holt eine Zeile ab der aktuellen Position (siehe @MySQLSeekResult) eines gespeicherten Ergebnisses einer @MySQLQuery Anfrage.
Der VSPECMYSQLRES MySQLResultHandle wird von @MySQLQuery geliefert.
Nachdem die aktuelle Zeile mit dieser Funktion abgefragt wurde, zeigt der interne Zeilenindex automatisch auf die nächste Zeile, so dass ein nachfolgender Aufruf der Funktion die Daten dieser nächste Zeile abruft und so weiter…
HINWEIS:
Derzeit wird immer nur eine Zeile auf einmal unterstützt (FN FNAnzahl wird ignoriert, sollte aber 1 sein, falls es hier zukünftig zu einer Erweiterung kommt)!!!
Die Anzahl der angegebenen ErgebnisFelder-Variablen muß mit der Anzahl der abgefragten Spalten des Query übereinstimmen.
In den ErgebnisFelder-Variablen werden die abgefragten Werte zurückgegeben.
Return:
Im Erfolgsfall wird TRUE zurückgegeben andernfalls @Error oder FALSE;
Beispiel: @MySQLFetchRow(MySQLResultHandle;FNAnzahl[;ErgebnisFelder;…]);
/* Beispiel: Einfache MySQL-Abfrage aus der Engine.
Das Skript stellt eine Verbindung zu einer MySQL-Datenbank her,
liest einen Datensatz aus der Tabelle testdb.amount,
übernimmt die Ergebniswerte in Variablen und gibt diese im Log aus. */
/* MySQL-Handle initialisieren. */
MySQLh:=@MySQLInit;
/* Fehlerstatus vorbelegen: 1 bedeutet Fehler bzw. noch keine erfolgreiche Verbindung. */
MySQLError:=1;
/* Prüfen, ob die Initialisierung des MySQL-Handles erfolgreich war. */
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);
}ELSE{
/* Verbindung war erfolgreich; Fehlerstatus zurücksetzen. */
MySQLError:=0;}
/* Die Abfrage nur ausführen, wenn die Verbindung erfolgreich hergestellt wurde. */
IF(!MySQLError){
/* Datensatz mit einem bestimmten Namen aus der MySQL-Tabelle lesen. */
QueryStr:="SELECT ID,Name,Amount,UID FROM testdb.amount WHERE Name=\"Test User\";";
/* Query ausführen und das Ergebnis-Handle in MySQLResH zurückgeben. */
Ret:=@MySQLQuery(MySQLh;QueryStr;MySQLResH);
IF(@IsError(Ret)){
@LogReport(Ret;3);}
/* Anzahl der von der Abfrage zurückgegebenen Zeilen ermitteln. */
NumRows:=@MySQLGetNumRows(MySQLResH);
@LogReport("NumRows:"+@Text(NumRows);3);
/* Genau einen erwarteten Datensatz auslesen. */
IF(NumRows=1){
/* Erste Ergebniszeile lesen und die Spaltenwerte in Variablen übernehmen. */
Ret:=@MySQLFetchRow(MySQLResH;1;ThisQueryID;ThisQueryName;ThisQueryAmount;ThisQueryUID);
IF(@IsError(Ret)){
@LogReport(Ret;3);}
}ELSE{
/* Wenn kein eindeutiger Datensatz gefunden wurde, Standardwerte setzen. */
ThisQueryID:=-1;
ThisQueryAmount:=0;
ThisQueryName:=ThisQueryUID:="";
}
/* Ergebnis-Handle freigeben. */
MySQLResH:=@MySQLFreeResult(MySQLResH);
/* Die gelesenen bzw. gesetzten Ergebniswerte ausgeben. */
@LogReport("ThisQueryID :"+@Text(ThisQueryID);3);
@LogReport("ThisQueryName :"+ThisQueryName;3);
@LogReport("ThisQueryAmount:"+@Text(ThisQueryAmount);3);
@LogReport("ThisQueryUID :"+ThisQueryUID;3);
}
/* MySQL-Verbindung schließen. */
MySQLh:=@MySQLClose(MySQLh);
}
/* MySQL-Thread-Kontext beenden bzw. aufräumen. */
@MySQLThreadEnd;
MySQL DB für dieses Beispiel:
CREATE DATABASE testdb
CHARACTER SET latin1 COLLATE latin1_german1_ci;
CREATE TABLE testdb.amount (
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(30),
`Amount` FLOAT,
`UID` VARCHAR(32),
`ModTime` DATETIME,
PRIMARY KEY(`ID`),
INDEX `Name` USING BTREE (`Name`),
INDEX `UID` USING BTREE (`UID`)
)
ENGINE = MYISAM
CHARACTER SET latin1 COLLATE latin1_german1_ci;
INSERT INTO testdb.amount (Name,Amount,UID,ModTime) VALUES ("Test User",123.45,"1234567890ABCDEFABCD1234567890AB",NOW());
Ausgabe im APILOG für dieses Beispiel:
NumRows:1
ThisQueryID :1
ThisQueryName :Test User
ThisQueryAmount:123.45
ThisQueryUID :1234567890ABCDEFABCD1234567890AB
Eine MySQL-Verbindung wird etabliert und ein Query abgesetzt, anschließend wird das Ergebnis im APILOG ausgegeben.
