Ich verwende in solche Fällen immer eine
Query, die entweder einen oder keinen Datensatz zurückliefert.
Mit [TDataset]
.IsEmpty pürfe ich, ob schon ein Datensatz vorhanden ist.
Mit [TDataset]
.Append oder [TDataset]
.Edit füge ich einen neuen Datensatz an, oder verändere den bestehenden Datensatz.
Delphi-Quellcode:
// dst ist eine Query mit SQL= SELECT * FROM Tabelle WHERE Serialnum=:Serialnum
dst.close;
dst.Parameters.ParamValues['
Serialnum'] := sernr;
dst.open;
update :=
not dst.IsEmpty;
if update
then
begin
dst.Edit
dst['
Changecount'] := dst['
Changecount'] +1;
end
else
begin
dst.Append;
dst['
Serailnum'] := sernr;
end;
dst['
lastchange'] := now;
dst['
.....'] := ....
dst.post;
Diese Vorgehensweise hat mehrere Vorteile:
* man braucht nicht mit INSERT und UPDATE Anweisungen zuschreiben, die manchmal 50 Parameter benötigen
* man hat Zugriff auf die alten Werte und kann damit arbeiten
kleiner Nachteil:
* es werden Daten abgefragt, die meistens gar nicht benötigt werden (aber nur ein Datensatz, macht ja nix)