Non riesco a capire, perchè, ma a me succede che il ciclo di lettura dei record di una tabella fornisce l'ultimo record due volte, come se gli ultimi due record della tabella fossero uguali, ... ma NON è vero.
Il codice in osservazione è:
sql:= 'SELECT DtCoMovg, StaDtMovg FROM riepmovg WHERE StaDtMovg = "A" ORDER BY DtCoMovg';
Form1.ZQuery1.SQL.Text := sql;
Form1.ZQuery1.Open;
Form1.ZQuery1.First;
striMia:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
statoGgCont:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
LBGgAperte.Items.Add(striMia);
tot:= tot + 1;
Writeln('LBGgAperte.' + IntToStr(tot) + '= ' + striMia);
while not Form1.ZQuery1.EOF do
begin
Form1.ZQuery1.Next;
striMia:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
statoGgCont:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
LBGgAperte.Items.Add(striMia);
tot:= tot + 1;
Writeln('LBGgAperte.' + IntToStr(tot) + '= ' + striMia);
case striMia of
'20210908':
begin
Writeln('---');
end;
end;
end;
Writeln('Totale righe di LBGgAperte=' + IntToStr(LBGgAperte.Count));
Form1.ZQuery1.Close;
Ho seguito anche l'ultima ciclo di lettura avanzando nelle istruzioni una dopo l'altra ed, effettivamente, dopo avere letto l'ultimo record, ZEOS esegue ancora un'altra lettura e, come se non riconoscesse la condizione di EOF, restituisce ancora lo stesso record letto poco prima.
Allego anche due immagini relative alla sequenza riportata con writeln in Console e quella dgli ultimi record letti dalla tabella col "DB Browser for SQLite"
La parte prima del loop la puoi cancellare ....
Devo ammettere che stento a capire come funziona Zeos. ???
Ho modificato le istruzioni di lettura della tabella di DB, in base alle tue indicazioni:
sql:= 'SELECT DtCoMovg, StaDtMovg FROM riepmovg WHERE StaDtMovg = "A" ORDER BY DtCoMovg';
Form1.ZQuery1.SQL.Text := sql;
Form1.ZQuery1.Open;
Form1.ZQuery1.First;
while not Form1.ZQuery1.EOF do
begin
striMia:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
statoGgCont:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
LBGgAperte.Items.Add(striMia);
Form1.ZQuery1.Next;
tot:= tot + 1;
Writeln('LBGgAperte.' + IntToStr(tot) + '= ' + striMia);
end;
Writeln('Totale righe di LBGgAperte=' + IntToStr(LBGgAperte.Count));
Form1.ZQuery1.Close;
Ora funziona. Ecco le ultime Writeln riportate nella Console di Lazarus
LBGgAperte.38= 20210901
LBGgAperte.39= 20210902
LBGgAperte.40= 20210908
Totale righe di LBGgAperte=40
Grazie!
:)