@MySQLGetFieldDef
Syntax
@MySQLGetFieldDef(MySQLResultHandle;FieldIndex;RetName;RetType;RetLength);
Beschreibung
Gibt die Detailinformationen zu einer Felddefinition (zu einer Column) eines gespeicherten Ergebnises einer @MySQLQuery Anfrage zurück.
In FN FieldIndex wird die Feldnummer angegeben, beginnend mit 0!
RetName TEXT Name der Feldes.
RetType TEXT DataType String der Feldes (siehe @GetDataType).
RetLength TEXT maximale größe des Feldes.
Return:
Im Erfolgsfall TRUE sonst @Error;
Beispiel: @MySQLGetFieldDef(MySQLResultHandle;FieldIndex;RetName;RetType;RetLength);
/* 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 in der MySQL-Tabelle anlegen. */
InsertQueryStr:="INSERT INTO testdb.amount (Name,Amount,UID,ModTime) VALUES (\"Test User2\",123.45,\"1234567890ABCDEFABCD123456789000\",NOW());";
Ret:=@MySQLQuery(MySQLh;InsertQueryStr);
/* INSERT OK? Wenn ja, sonst Error ins Log */
IF(@IsError(Ret)){
@LogReport(Ret;3);}
/* Wie viele Zeilen wurden verändert? */
AffectedRows:=@MySQLGetAffectedRows(MySQLh);
@LogReport("AffectedRows INSERT :"+@Text(AffectedRows);3);
/* Datensatz mit einem bestimmten Namen aus der MySQL-Tabelle lesen. */
QueryStr:="SELECT ID,Name,Amount,UID FROM testdb.amount WHERE Name=\"Test User2\";";
/* Query ausführen und das Ergebnis-Handle in MySQLResH zurückgeben. */
Ret:=@MySQLQuery(MySQLh;QueryStr;MySQLResH);
IF(@IsError(Ret)){
@LogReport(Ret;3);}
/* Detailinformationen zum ersten Feld */
Ret:=@MySQLGetFieldDef(MySQLResH;0;RetName;RetType;RetLength);
@LogReport("Field definition for first field";3);
@LogReport("RetName :"+RetName;3);
@LogReport("RetType :"+RetType;3);
@LogReport("RetLength:"+@Text(RetLength);3);
/* Anzahl der von der Abfrage zurückgegebenen Zeilen ermitteln. */
NumRows:=@MySQLGetNumRows(MySQLResH);
@LogReport("NumRows found:"+@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:="";
}
/* Datensatz mit einem bestimmten Namen weider aus der MySQL-Tabelle entfernen. */
DeleteQueryStr:="DELETE FROM testdb.amount WHERE Name=\"Test User2\";";
Ret:=@MySQLQuery(MySQLh;DeleteQueryStr);
/* INSERT OK? Wenn ja, sonst Error ins Log */
IF(@IsError(Ret)){
@LogReport(Ret;3);}
/* Wie viele Zeilen wurden verändert? */
AffectedRows:=@MySQLGetAffectedRows(MySQLh);
@LogReport("AffectedRows DELETE :"+@Text(AffectedRows);3);
/* 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;
Ausgabe im APILOG für dieses Beispiel:
AffectedRows INSERT :1
Field definition for first field
RetName :ID
RetType :F
RetLength:10
NumRows found:1
AffectedRows DELETE :1
ThisQueryID :19
ThisQueryName :Test User2
ThisQueryAmount:123.45
ThisQueryUID :1234567890ABCDEFABCD123456789000
Eine MySQL-Verbindung wird etabliert und ein Query abgesetzt, anschließend wird das Ergebnis im APILOG ausgegeben.
