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

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

ReadStruct 2: 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:

ReadStruct 3: