Dieses Problem hat mich offenbar so stark beschäftigt, daß ich ganz unruhig geschlafen habe. Vermutlich hab ich davon geträumt, erinnere mich aber nicht wirklich daran. Auf jeden Fall bin ich vor einer halben Stunde aufgewacht und mir war so gut wie klar, warum das nicht funktionieren konnte, was ich da zusammengestrickt hatte. Die Lösung: Cancel. So einfach und doch so wirkungsvoll:
Delphi-Quellcode:
Function TFrame_PersonenAktuell.Eintragen(Id : Integer; Person :
String; Datum : TDateTime; DateExists : Boolean) : Boolean;
begin
Try
DatMod.Qset_Personen.Append;
Feld_Id.AsInteger := Id;
Feld_Name.AsString := Person;
If DateExists
Then
Feld_Datum.AsDateTime := Datum;
DatMod.Qset_Personen.Post;
Result := True;
Except
On E:
Exception Do
Begin
Result := False;
// Das ist die Lösung: das Dataset ist noch im Insert-Mode, wenn ich es beim nächsten Mal anspreche
If (DatMod.Qset_Personen.State = dsInsert)
Or
(DatMod.Qset_Personen.State = dsEdit)
Then
DatMod.Qset_Personen.Cancel;
Memo_Log.Lines.Append(e.
Message + GLD.TS + IntToStr(Id));
End;
End;
end;
Da sieht man mal wieder, daß menschliche Gehirne manchmal (oder auch öfter) erst dann auf die Lösung eines Problems stoßen, wenn man sie in Ruhe arbeiten läßt
Edit meinte noch: Abgelenkt und auf die falsche Fährte gelockt hatte mich die Fehlermeldung, die ja eigentlich die vom vorherigen Fehler war. Da wäre es doch schön, wenn Delphi melden würde, daß sich das Dateset bereits im Insert-Modus befindet ... doch dann hätten meine grauen Zellen ja nichts zu knobeln gehabt