So, die Fehlermeldung ist hinreichend bekannt, allerdings eigentlich nur den Programmierern, die noch mit delphi 5.0 arbeiten, da brauchte es einen Patch.
Das Problem ist, ich verwende turbo delphi, da dürfte ich ja den Patch nicht benötigen.
Ich teile euch mal mit, wie der Fehler zustande kommt:
Delphi-Quellcode:
adoq.SQL.Text := hypes_sql;
adoq.cachesize:=20;
adoq.disablecontrols;
adoq.open;
adoq.enablecontrols;
if adoq.recordcount>0 then
adoq.Delete;
Ich setze cachesize auf einen Wert > 1, mache disablecontrols, open (holt nur genau einen Datensatz), enablecontrols und schließlich ein delete -> Fehler! (und zwar beim delete!)
Lasse ich disablecontrols und enablecontrols beim öffnen weg, geht es.
Lasse ich cachesize auf 1, kommt der Fehler auch nicht.
Hintergrund ist diese procedure aus adodb:
Delphi-Quellcode:
procedure DoRecordsetDelete(DataSet: TCustomADODataSet; AffectRecords: TAffectRecords);
begin
with DataSet
do
try
Recordset.Delete(AffectRecordsValues[AffectRecords]);
{ When CacheSize > 1, Recordset allows fetching of deleted records.
Calling MovePrevious seems to work around it }
if (CacheSize > 1)
and (PRecInfo(ActiveBuffer).RecordNumber <> 1)
then
begin
Recordset.MovePrevious;
Recordset.MoveNext;
end;
Recordset.MoveNext;
except
on E:
Exception do
begin
Recordset.CancelUpdate;
DatabaseError(E.
Message);
end;
end;
end;
wenn cachesize > 1 und blabla.recordnumber<>1 dann
mache was, was den Fehler wirft ^^
cachesize>1 ist klar, aber recordnumber ist interessant, denn:
mit disablecontrols vorm open ist recordnumber an der Stelle <>1, ohne disablecontrols vorm open ist es 1.
dann geht der in die if-Anweisung, macht moveprevious und movenext und danach will er nochmal movenext machen und das knallt dann.
Frage ist jetzt, was ich dagegen tun kann.
Vielen Dank!
mfg
hyype