Wenn es nicht auf maximale Geschwindigkeit ankommt, dann kann man deine Anforderung sehr flexibel mit Delphi-Code lösen:
Delphi-Quellcode:
query.SQL.Tet := '
SELECT * FROM Tabelle WHERE keyfeld=:keyfeld';
query.parameters.ParamValues['
keyfeld'] := ...;
// muss ggf. an Zugriffskomponente angepasst werden
query.Open;
if query.IsEmpty
then
begin
// neuen Datensatz einfügen
query.Append;
// hier alle Felder beschreiben, die nur beim INSERT befüllt werden müssen
query['
keyfeld'] := ...;
query['
Spalte7'] := ...;
end
else
begin
// bestehenden Datensatz ändern
query.Edit;
// hier alle Felder beschreiben, die nur beim UPDATE geändert werden müssen
query['
AnzahlModifikationen'] :=
query['
AnzahlModifikationen'] + 1;
end;
// hier alle Felder befüllen, die sowohl beim INSERT als auch beim UPDATE geschrieben werden
query['
Feld1'] := ...;
query['
Feld2'] := ...;
query.Post;
// Datensatz schreiben, im Hintergrund wird ein INSERT oder UPDATE generiert und abgeschickt