Execute
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. Zurückgelieferte Datensätze können nicht ausgelesen werden.
Syntax
METHOD Execute : 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;
END_VAR
Beispiel
VAR
fbPLCDBCmd : FB_PLCDBCmdEvt(sNetID := '', tTimeout := T#5S);
sCmd : STRING (1000);
myStruct : ST_DataAll;
aPara : ARRAY[0..14] OF ST_ExpParameter;
tcMessage : I_TcMessage;
END_VAR
TYPE ST_DataAll :
STRUCT
colBigInt: LINT;
colInteger: DINT;
colSmallInt: INT;
colTinyInt: BYTE;
colBit: BOOL;
colMoney: LREAL;
colFloat: LREAL;
colReal: REAL;
colDateTime: DT;
colNText: STRING(255);
colNChar: STRING(10);
colImage: ARRAY[0..255] OF BYTE;
colNVarChar: STRING(50);
colBinary: ARRAY[0..29] OF BYTE;
colVarBinary: ARRAY[0..19] OF BYTE;
END_STRUCT
END_TYPE
// set Parameter configuration
aPara[0].sParaName := 'colBigInt'; aPara[0].eParaType := E_ExpParameterType.Int64; aPara[0].nParaSize := 8;
aPara[1].sParaName := 'colInteger'; aPara[1].eParaType := E_ExpParameterType.Int32; aPara[1].nParaSize := 4;
aPara[2].sParaName := 'colSmallInt'; aPara[2].eParaType := E_ExpParameterType.Int16; aPara[2].nParaSize := 2;
aPara[3].sParaName := 'colTinyInt'; aPara[3].eParaType := E_ExpParameterType.Byte_; aPara[3].nParaSize := 1;
aPara[4].sParaName := 'colBit'; aPara[4].eParaType := E_ExpParameterType.Boolean; aPara[4].nParaSize := 1;
aPara[5].sParaName := 'colMoney'; aPara[5].eParaType := E_ExpParameterType.Double64; aPara[5].nParaSize := 8;
aPara[6].sParaName := 'colFloat'; aPara[6].eParaType := E_ExpParameterType.Double64; aPara[6].nParaSize := 8;
aPara[7].sParaName := 'colReal'; aPara[7].eParaType := E_ExpParameterType.Float32; aPara[7].nParaSize := 4;
aPara[8].sParaName := 'colDateTime'; aPara[8].eParaType := E_ExpParameterType.DateTime; aPara[8].nParaSize := 4;
aPara[9].sParaName := 'colNText'; aPara[9].eParaType := E_ExpParameterType.STRING_; aPara[9].nParaSize := 256;
aPara[10].sParaName:= 'colNChar'; aPara[10].eParaType := E_ExpParameterType.STRING_; aPara[10].nParaSize := 10;
aPara[11].sParaName:= 'colImage'; aPara[11].eParaType := E_ExpParameterType.ByteArray; aPara[11].nParaSize := 256;
aPara[12].sParaName:= 'colNVarChar'; aPara[12].eParaType := E_ExpParameterType.STRING_; aPara[12].nParaSize := 50;
aPara[13].sParaName:= 'colBinary'; aPara[13].eParaType := E_ExpParameterType.ByteArray; aPara[13].nParaSize := 30;
aPara[14].sParaName:= 'colVarBinary'; aPara[14].eParaType := E_ExpParameterType.ByteArray; aPara[14].nParaSize := 20;
// set command
sCmd := 'INSERT INTO MyTableName (colInteger, colSmallInt, colTinyInt, colBit, colMoney, colFloat, colReal, colDateTime, colNText, colNChar, colImage, colNVarChar, colBinary, colVarBinary) VALUES ({colInteger}, {colSmallInt}, {colTinyInt}, {colBit}, {colMoney}, {colFloat}, {colReal}, {colDateTime}, {colNText}, {colNChar}, {colImage}, {colNVarChar}, {colBinary}, {colVarBinary})';
// call functionblock
IF fbPLCDBCmd.Execute(
hDBID:= 1,
pExpression:= ADR(sCmd),
cbExpression:= SIZEOF(sCmd),
pData:= ADR(myStruct),
cbData:= SIZEOF(myStruct),
pParameter:= ADR(aPara),
cbParameter:= SIZEOF(aPara))
THEN
IF fbPLCDBCmd.bError THEN
tcMessage := fbPLCDBCmd.ipTcResult;
nState := 255;
ELSE
nState := 0;
END_IF
END_IF