-> Hier kostenlos registrieren
Hallo zusammen,
Ich hab auf der CX eine MySQL Datenbank.
Der Datenbankzugriff funktioniert schon mal sehr gut. Mit dem SQL Editor bekomme ich 2 Datensätze retour.

Auch der Zugriff über die PLC klappt soweit:
Im Debugger sehe ich dann, dass 2 Datensätze gelesen werden, aber im Zielarray landet dann nur eines:

Es wird immer nur der erste Datensatz aus der DB gelesen. Es macht auch keinen Unterschied wenn ich das Zielarray von 0..39 erstelle.
Bitte um Ideen, woran das liegen kann.
Thx blubbi
Ich hab auf der CX eine MySQL Datenbank.
Der Datenbankzugriff funktioniert schon mal sehr gut. Mit dem SQL Editor bekomme ich 2 Datensätze retour.

Auch der Zugriff über die PLC klappt soweit:
Code:
VAR_OUTPUT
GT_AccessControll: ARRAY [1..40] OF STRING;
fbSQLDatabase: FB_SQLDatabaseEvt(sNetID:=GV.sNetId, tTimeout:=T#10S);
fbSQLResult: FB_SQLResultEvt(sNetID:=GV.sNetId, tTimeout:=T#10S);
fbSQLCommand: FB_SQLCommandEvt(sNetID := GV.sNetId, tTimeout := T#10S);
END_VAR
.....
sCmd := 'SELECT flipAdresse FROM accesscontroll';
....
CASE nState OF
0:(*Idle*)
;
1: // Connect to database and create stored procedure instance
CASE nState_Connect OF
0:
IF fbSQLDatabase.Connect(hDBID:= nDBID) THEN
ipResultEvt := fbSQLDatabase.ipTcResult;
bConn := NOT fbSQLDatabase.bError;
IF bConn THEN
nState_Connect := 1;
ELSE
nState:=200;
END_IF
END_IF
1:
IF fbSQLDatabase.CreateCmd(ADR(fbSQLCommand)) THEN
IF fbSqlDatabase.bError THEN
nState := 200;
bError := TRUE;
ELSE
nState := 2;
END_IF
bCmd := NOT fbSQLDatabase.bError;
END_IF
end_case
2: // call sql command
IF fbSQLCommand.ExecuteDataReturn(ADR(sCmd), SIZEOF(sCmd), ADR(fbSqlResult)) THEN
IF fbSQLCommand.bError THEN
nState := 200;
ELSE
ipResultEvt := fbSQLCommand.ipTcResult;
nState := 3;
END_IF
END_IF
3: // Read AccessControl positions
IF fbSQLResult.Read(0, fbSQLResult.nDataCount, ADR(GT_AccessControll), SIZEOF(GT_AccessControll), FALSE, FALSE) THEN
ipResultEvt:= fbSQLResult.ipTcResult;
bData := NOT fbSQLResult.bError;
nRecs := fbSQLResult.nDataCount;
IF fbSqlResult.bError THEN
nState := 200;
ELSE
nState := 4;
END_IF
END_IF
4:// Disconnect all
CASE nState_Disconnect OF
0:
IF bData THEN
IF fbSQLResult.Release() THEN
nState_Disconnect := 1;
END_IF
ELSE
nState_Disconnect := 1;
END_IF
1:
IF bConn THEN
IF fbSQLDatabase.Disconnect() THEN
nState_Disconnect := 3;
END_IF
ELSE
nState_Disconnect := 3;
END_IF
3:
bData := FALSE;
bSP := FALSE;
bCmd := FALSE;
bConn := FALSE;
bResult := FALSE;
sEventClass := '';
sEventMsg := '';
nEventID := 0;
bError := FALSE;
nState_Connect := 0;
nState_Disconnect := 0;
nState := 0;
END_CASE
200:
IF ipResultEvt.RequestEventText(1033, sEventMsg, SIZEOF(sEventMsg)) THEN
nState := 201;
END_IF
201:
IF ipResultEvt.RequestEventClassName(1033, sEventClass, SIZEOF(sEventClass)) THEN
nEventID := ipResultEvt.nEventId;
bError := (ipResultEvt.eSeverity = TcEventSeverity.Error) OR
(ipResultEvt.eSeverity = TcEventSeverity.Critical);
nState:=0;
END_IF
END_CASE
Im Debugger sehe ich dann, dass 2 Datensätze gelesen werden, aber im Zielarray landet dann nur eines:

Es wird immer nur der erste Datensatz aus der DB gelesen. Es macht auch keinen Unterschied wenn ich das Zielarray von 0..39 erstelle.
Bitte um Ideen, woran das liegen kann.
Thx blubbi
Anhänge
Zuletzt bearbeitet: