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

ExecuteDataReturn 1: 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.

ExecuteDataReturn 2: Rückgabewert

Name

Typ

Beschreibung

ExecuteDataReturn

BOOL

Zeigt den Status der Methode. Liefert TRUE, sobald die Methodenausführung beendet ist, also auch im Fehlerfall.

ExecuteDataReturn 3:

Parametrieren des Kommandos

Die Spaltennamen für die einzelnen Parameter werden im SQL-Kommando in geschweiften Klammern angegeben.
Beispiel: ‚SELECT * FROM MyHouse_Temperatures WHERE Room = {SelectedRoom}’.
SelectedRoom muss dabei in der Struktur ST_ExpParameter entsprechend als Parametername angegeben sein.

Einige Datenbanken unterstützen das Parametrieren von SQL Klauseln nicht. (TOP/LIMIT/ROWNUM/…) Auch parametrierbare Tabellennamen werden in der Regel nicht unterstützt.

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