Vengo subito al problema:
Se voglio leggere, con Zeoslib, un DB nella sequenza ordinaria dal primo verso l'ultimo ho imparato a scrivere:
ZQuery1.SQL.Text := sql;
ZQuery1.Open;
ZQuery1.First;
while not ZQuery1.EOF do
ZQuery1.Next;
...
É da stamattina che vorrei leggere il record presdente a quello corrente.
Durante la scrittura che mi immaginavo semplice (Form1.ZQuery1.previous) ho sbattuto di fronte ad nuovo ERRORE
frm2.pas(74,19) Error: identifier idents no member "previous"
Ma che vuol dire?
E come si fa a leggere un record con la tecvnica del gambero?
Prova a spiegare un po' meglio qual è l'esigenza.
Se devi leggere i record al contrario rispetto ad un ordinamento, basta formulare la query in maniera diversa
Nel mio database Sqlitre3 una tabella contiene 1 record giornaliero, coi riepilogativi di giornata, fra cui la data(aaaaMMgg).
Io devo risalire alla data precede, più vicina a quella corrente, conosciuta.
Quindi, accedendo alla tabella di DB, posso cercare solamente il record con la data conosciuta, perciò, potrei, moltro facilmente non trovarlo, ma potrei anche trovarlo.
- Non trovandolo, mi vengono restituiti tutti i record con data <;
- Trovandolo invece , mi vengono restituiti tutti record con data <, ma anche quello con data =.
Se l'ultimo record restituito contiene la data =, devo allora leggere quello immediatamente precedente, al fine di trovare la data che cerco.
Spero di essere stato chiaro nell'esposizione.
Il codice che ho scritto per risalire al record corretto è:
sql := 'SELECT DtCoMovg, RipFing FROM riepmovg WHERE DtCoMovg <= ' + tbMovv[ixTab, 1]);
Form1.ZQuery1.SQL.Text := sql;
Form1.ZQuery1.Open;
Form1.ZQuery1.Last;
dtPrec:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
case dtPrec of
tbMovv[ixTab, 1]:
begin
Form1.ZQuery1.prior;
end
else
begin
dtPrec:= Form1.ZQuery1.FieldByName('DtCoMovg').AsString;
end;
end;
forse potresti fare una select che non includa la data uguale ed ordinare all'inverso
SELECT DtCoMovg, RipFing FROM riepmovg WHERE DtCoMovg < "data_ricerca" order by DtCoMovg desc
Edit:
inoltre potresti limitare il resultset ad un paio di recod invece che tutti
in questo modo tra qualche anno la query sarà ancora snella