ReadStruct
Diese Methode liest eine vorgegebene Anzahl an Datensätzen aus einer Datenbanktabelle mit beliebiger Tabellenstruktur.
Syntax
METHOD ReadStruct : BOOL
VAR_INPUT
hDBID: UDINT;
sTableName: T_MaxString;
pColumnNames: POINTER TO ARRAY [0..MAX_DBCOLUMNS] OF STRING(50);
cbColumnNames: UDINT;
sOrderByColumn: STRING(50);
eOrderType: E_OrderType := E_OrderType.eOrder_ASC
nStartIndex: UDINT;
nRecordCount: UDINT;
pData: POINTER TO BYTE;
cbData: UDINT;
END_VAR
Eingänge
Name | Typ | Beschreibung |
---|---|---|
hDBID | UDINT | Gibt die ID der zu verwendenden Datenbank an. |
sTableName | T_MaxString | Name der Tabelle, aus der gelesen werden soll. |
pColumnNames | POINTER TO ARRAY [0..MAX_DBCOLUMNS] OF STRING(50) | Adresse des Arrays, welches die zu lesenden Spaltennamen beinhaltet. |
cbColumnNames | UDINT | Länge des Spaltennamen-Arrays |
sOrderByColumn | STRING(50) | Name der Sortierspalte |
eOrderType | E_OrderType | Sortierrichtung (ASC oder DESC) |
nStartIndex | UDINT | Gibt den Index des ersten zu lesenden Datensatzes an. |
nRecordCount | UDINT | Gibt die Anzahl der zu lesenden Datensätzen an. |
pData | POINTER TO BYTE | Adresse des Strukturarrays, in das die Datensätze geschrieben werden sollen. |
cbData | UDINT | Gibt die Größe des Strukturarrays in Byte an. |
Rückgabewert
Name | Typ | Beschreibung |
---|---|---|
ReadStruct | BOOL | Zeigt den Status der Methode. Liefert TRUE, sobald die Methodenausführung beendet ist, also auch im Fehlerfall. |
Beispiel
VAR
fbPLCDBRead : FB_PLCDBReadEvt (sNetID := '', tTimeout := T#5S);
myCustomStruct : ST_Record;
tcMessage : I_TcMessage;
END_VAR
TYPE ST_Record :
STRUCT
nID : LINT;
dtTimestamp: DATE_AND_TIME;
sName : STRING;
nSensor1 : LREAL;
nSensor2 : LREAL;
END_STRUCT
END_TYPE
// set columnnames
ColumnNames[0] := 'ID';
ColumnNames[1] := 'Timestamp';
ColumnNames[2] := 'Name';
ColumnNames[3] := 'Sensor1';
ColumnNames[4] := 'Sensor2';
IF fbPLCDBRead.ReadStruct(
hDBID:= 1,
sTableName:= 'MyTable_Struct',
pColumnNames:= ADR(ColumnNames),
cbColumnNames:= SIZEOF(ColumnNames),
sOrderByColumn:= ColumnNames[0],
eOrderType:= E_OrderType.DESC,
nStartIndex:= 0,
nRecordCount:= 1,
pData:= ADR(myCustomStruct),
cbData:= SIZEOF(myCustomStruct))
THEN
IF fbPLCDBRead.bError THEN
tcMessage:= fbPLCDBRead.ipTcResult;
nState := 255;
ELSE
nState := 0;
END_IF
END_IF
Ergebnis in der SPS: