AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Trigger - TADOTable Löschfehler
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Trigger - TADOTable Löschfehler

Ein Thema von needatip · begonnen am 12. Okt 2005 · letzter Beitrag vom 13. Okt 2005
Antwort Antwort
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#1

SQL Trigger - TADOTable Löschfehler

  Alt 12. Okt 2005, 10:19
Datenbank: SQL SERVER 2000 • Zugriff über: ADO
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 ?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: SQL Trigger - TADOTable Löschfehler

  Alt 12. Okt 2005, 19:39
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: SQL Trigger - TADOTable Löschfehler

  Alt 12. Okt 2005, 20:04
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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: SQL Trigger - TADOTable Löschfehler

  Alt 12. Okt 2005, 20:53
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:
SET NOCOUNT ON
...
SET NOCOUNT OFF
Ob das nötig ist, weiss ich nicht genau, ehrlich gesagt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SQL Trigger - TADOTable Löschfehler

  Alt 13. Okt 2005, 09:08
OK, Vielen Dank nochmal.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz