ExecuteDataReturn
Mit dieser Methode können beliebige SQL-Kommandos an die Datenbank gesendet werden. Die Datenbankverbindung wird bei jedem Aufruf geöffnet und nach der Ausführung wieder geschlossen. Es besteht die Möglichkeit, Platzhalter im Kommando zu definieren, die vom TwinCAT Database Server vor der Ausführung mit den entsprechenden Werten befüllt werden. Eine vorgegebene Anzahl von Datensätzen kann ausgelesen werden.
Syntax
METHOD ExecuteDataReturn : BOOL
VAR_INPUT
hDBID: UDINT;
pExpression: POINTER TO BYTE;
cbExpression: UDINT;
pData: POINTER TO BYTE;
cbData: UDINT;
pParameter: POINTER TO ARRAY[0..MAX_DBCOLUMNS] OF ST_ExpParameter;
cbParameter: UDINT;
nStartIndex: UDINT;
nRecordCount: UDINT;
pReturnData: POINTER TO BYTE;
cbReturnData: UDINT;
pRecords: POINTER TO UDINT;
END_VAR
Eingänge
Name | Typ | Beschreibung |
---|---|---|
hDBID | UDINT | Gibt die ID der zu verwendenden Datenbank an. |
pExpression | POINTER TO BYTE | Adresse der String-Variablen mit dem SQL Kommando |
cbExpression | UDINT | Länge der String-Variablen mit dem SQL-Kommando |
pData | POINTER TO BYTE | Adresse der Struktur mit den Parameterwerten |
cbData | UDINT | Länge der Struktur mit den Parameterwerten |
pParameter | POINTER TO ARRAY[0..MAX_DBCOLUMNS] OF ST_ExpParameter | Adresse des Strukturarrays mit den Parameterinformationen |
cbParameter | UDINT | Länge des Strukturarrays mit den Parameterinformationen |
nStartIndex | UDINT | Gibt den Index des ersten zu lesenden Datensatzes an. |
nRecordCount | UDINT | Gibt die Anzahl der zu lesenden Datensätzen an. |
pReturnData | POINTER TO BYTE | Adresse des Strukturarrays, in das die Datensätze geschrieben werden sollen. |
cbReturnData | UDINT | Gibt die Größe des Strukturarrays in Byte an. |
pRecords | POINTER TO BYTE | Anzahl der ausgelesenen Datensätze. |
Rückgabewert
Name | Typ | Beschreibung |
---|---|---|
ExecuteDataReturn | BOOL | Zeigt den Status der Methode. Liefert TRUE, sobald die Methodenausführung beendet ist, also auch im Fehlerfall. |
![]() | Parametrieren des Kommandos Die Spaltennamen für die einzelnen Parameter werden im SQL-Kommando in geschweiften Klammern angegeben. |
Beispiel
VAR
fbPLCDBCmd : FB_PLCDBCmdEvt(sNetID := '', tTimeout := T#5S);
sCmd : STRING (1000);
stPara : ST_ExpParameter;
RecordAmt : ULINT := 3;
ReturnDataStruct : ARRAY [0..9] OF ST_DataAll;
nRecords : UDINT;
tcMessage : I_TcMessage;
END_VAR
// set Parameter configuration
stPara.eParaType := E_ExpParameterType.Int64;
stPara.nParaSize := 8;
stPara.sParaName := 'RecordAmt';
// set command with placeholder
sCmd := 'SELECT TOP ({RecordAmt}) * FROM MyTableName';
// call functionblock
IF fbPLCDBCmd.ExecuteDataReturn(
hDBID:= 1,
pExpression:= ADR(sCmd),
cbExpression:= SIZEOF(sCmd),
pData:= ADR(RecordAmt),
cbData:= SIZEOF(RecordAmt),
pParameter:= ADR(stPara),
cbParameter:= SIZEOF(stPara),
nStartIndex:= 0,
nRecordCount:= 10,
pReturnData:= ADR(ReturnDataStruct),
cbReturnData:= SIZEOF(ReturnDataStruct),
pRecords:= ADR(nRecords))
THEN
IF fbPLCDBCmd.bError THEN
tcMessage := fbPLCDBCmd.ipTcResult;
nState := 255;
ELSE
nState := 0;
END_IF
END_IF