![]() |
Datenbank: SQL SERVER 2000 • Zugriff über: ADO
SQL Trigger - TADOTable Löschfehler
Hallo zusammen.
Ich verwende für den Zugriff auf einen SQL Server 2 ADOTable (Master/Detail) Komponenten. Nun habe ich einen Trigger erstellt, der einen Datensatz, den ich von der Master Tabelle lösche, in eine andere Tabelle wegsichert. Im Enterprise Manager des SQL Servers funktioniert der Trigger einwandfrei, nur wenn ich ein Table.delete von Delphi ausführe bekomm ich eine OLE-Exception Fehlermeldung: "Die zum Aktualisieren angegebene Zeile wurde nicht gefunden. Einige Werte wurden seit dem letzten Lesen ggf. geändert". Dadurch dass ich ntext Felder verwende kann ich auch keine After-Delete Trigger verwenden sondern muss lt. Anleitung einen Instead-of-Delete Trigger verwenden und den Löschbefehl im Trigger einbauen. Der Datensatz wird letztendlich auch gelöscht und in die Sicherungstabelle geschrieben. Der Trigger sieht folgendermaßen aus: CREATE TRIGGER [LAGER_ARCHIVIEREN] ON dbo.LAGER INSTEAD OF DELETE AS BEGIN DELETE FROM BILDER WHERE NR IN (SELECT I_NUMMER FROM deleted) INSERT INTO LAGERARCHIV SELECT *,SYSTEM_USER,GETDATE() FROM deleted DELETE FROM LAGER WHERE I_NUMMER IN (SELECT I_NUMMER FROM deleted) END Wer kann mir bei dem Problem weiterhelfen ? |
Re: SQL Trigger - TADOTable Löschfehler
Jaaaaa, gemeine Sache, wie?
ADO erwartet als Antwort vom SQL-Server beim Löschen einer Zeile ein '1 Row(s) affected'. Wenn da etwas anderes steht, z.B. '0 Row(s) affected' oder so, dann interpretiert dieses oberschlaue ADO das eben so, das das DELETE nicht geklappt hat. Blödes ADO. Du musst im Trigger mit 'SET NOCOUNT ON' dafür sorgen, das keine dieser Meldungen (ausser der richtigen!) gliefert wird. SET NOCOUNT ON unterdrückt die Ausgabe der Meldungen, SET NOCOUNT schaltet sie wieder an. Gewöhn dir an, alle stored procedures und Trigger mit SET NOCOUNT ON einzuleiten. Das erspaart einem ne ganze Menge Ärger. |
Re: SQL Trigger - TADOTable Löschfehler
Hey super,
hast mir echt mein Kopfzerbrechen beendet. Muss ich im Trigger am Schluss SET NOCOUNT nochmals einbauen, bzw wenn nicht, geht mir irgendwas verloren? Danke nochmals. |
Re: SQL Trigger - TADOTable Löschfehler
Na, eine Grundregel sollte sein, das man den Laden so verlässt, wie man ihn vorfindet.
Also sollte die SP (Trigger) so sein:
SQL-Code:
Ob das nötig ist, weiss ich nicht genau, ehrlich gesagt.
SET NOCOUNT ON
... SET NOCOUNT OFF |
Re: SQL Trigger - TADOTable Löschfehler
OK, Vielen Dank nochmal.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz