Also ich kann das nachvollziehen, aber nur dann, wenn eine Spalte im Server über einen Trigger geändert wird. Dann bekommt es
ADO nicht mit.
Folgender Befehl wird von
ADO abgesetzt, wenn ich einen Datensatz in eine 'Datatable' Tabelle anhänge (das sp_executesql nehme ich mal weg):
Code:
SET NOCOUNT OFF;
INSERT INTO "Test".."DataTable" ("text") VALUES ('Foobar');
SELECT SCOPE_IDENTITY() AS SCOPE_ID_COLUMN
Es wird also der Datensatz angehängt und die ID ordentlich abgeholt. Also funktioniert das auch alles. Bis hierhin.
In meiner Test-Tabelle gibt es eine weitere Spalte 'someID'. Die wird per Trigger gesetzt, und *nicht* über
ADO (War zufällig so).
Nun verändere ich die Zeile in meinem Delphi-Programm: Folgender Befehl geht zum Server:
Code:
UPDATE "Test".."DataTable"
SET "text"='BarFoo'
WHERE "ID"=123
AND "text"='Foobar'
AND "someID" IS NULL --- <<<<< deswegen knallt es
ADO denkt, 'someID' sei NULL (klar, wurde von Delphi ja auch nicht geändert), aber das stimmt ja nicht (wegen meinem Trigger).
Wenn ich den Trigger entferne, funktioniert alles.
Prüf doch mal, ob der hinzugefügte Datensatz in der
DB exakt die gleichen Daten hat, wie in deiner App...