![]() |
Datenbank: Interbase • Version: 4 • Zugriff über: BDE
Trigger verhindet löschen eines Datensatzes
Hallo zusammen,
ich habe ein Problem mit einem Trigger. Ich füge einen neuen Datensatz in eine Tabelle ein. Auf dem Ereignis "Before Update" liegt ein Trigger der den DS um Datum und Uhrzeit ergänzt. Wenn ich im Anschluß diesen DS wieder löschen will bekomme ich folgende Fehlermeldung: Datensatz kann nicht gesperrt werden, da der Datensatz von einem anderen Benutzer geändert wurde. Wenn ich den Trigger deaktiviere funktionierts problemlos. Ich möchte aber nur ungern auf die Funktionalität des Triggers verzichten. Eingentlich macht das in meinen Augen auch nicht so richtig Sinn, oder wird "Before Update" auch beim hinzufügen eines DS ausgeführt? Wenn ich einen Trigger auf "Before Insert" setze funktioniert das alles auch problemlos. Ich möchte aber das Datum auch beim ändern der Daten aktualisiert haben. Hat jemand einen Tip für mich? Vielen Dank - Daniel |
Re: Trigger verhindet löschen eines Datensatzes
Interbase kenne ich nich so gut.
Gibt es bei IB in den Triggern auch die temporärern Tabellen INSERTED und DELETED, so wie das bei MSSQL der Fall ist? Falls ja, könntest du es wie folgt lösen:
SQL-Code:
Schöne Grüße,
DECLARE @DelCount INT
SELECT @DelCount=COUNT(*) FROM DELETED IF (@DelCount IS NULL) OR (@DelCount = 0) BEGIN -- es wurde kein Datansatz gelöscht ... hier den Trigger Code ausführen END ELSE BEGIN -- es wurde min. ein Datansatz gelöscht ... Trigger Code wird nicht ausgeführt END Jens :hi: |
Re: Trigger verhindet löschen eines Datensatzes
Solche temporären Tabellen sind mir nicht bekannt.
Ich habe inzwischen eine Möglichkeit gefunden das Problem zu umgehen. Bisher habe ich direkt in der Abfrage den Datensatz mit "Query.Delete" gelöscht. So kam es zu oben beschriebenen Fehler. Jetzt habe ich eine weitere "Delete FROM..." Abfrage eingesetzt und es funktioniert erst einmal. Aber so richtig schön finde ich das nicht. Würde micht sehr freuen wenn mir da noch jemand auf die Sprünge helfen könnte. Gruss |
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
|
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
Delphi-Quellcode:
new.Modified = 'now';
Zitat:
Den Fehler gibt es nur beim "Before Update"-Trigger. Ohne großes Hintergrundwissen würde ich vermuten das die Datenbank den Trigger als einen anderen Benutzer/eine andere Session laufen läßt. Aber das macht ja keinen richtigen Sinn. Wenn ich die DB eine Transaction ausführen lasse dann weiß sie ja auch das ein Trigger zu dieser Transaction gehört. Also müßte es doch in der gleichen Session passieren?! |
Re: Trigger verhindet löschen eines Datensatzes
Habe in der DB nachgeguckt : alle Felder, die durch ein Insert automatisch beeinflußt werden, kriegen diese Sachen mit einem BI-Trigger verpaßt. Default Werte usw. Soll bei einem UPDATE noch was gemacht werden, so erledigt das ein AFTER UPDATE Trigger, kein BEFORE ! Womit wird das Ganze überhaupt getestet ? Ist das wirklich noch IB 4 ?
|
Re: Trigger verhindet löschen eines Datensatzes
Kannst du nicht mit Default Werten arbeiten, die du gleich beim Erstellen der Tabelle angibst.
|
Re: Trigger verhindet löschen eines Datensatzes
Siehe dieses Beispiel hier. Beim Erstellen der Tabelle kann ich doch noch nicht wissen, daß ich in 1 Stunde um 20:19:55,4 einen neuen Datensatz anlege ! Der Trigger überwacht das ganze deshalb und merkt sich, daß da die Zeit festgehalten werden muß, auch wenn ichs vergesse. 8)
|
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
Zum Test: In die Datenbank habe ich mit einen Delphi-Programm und den BDE-Komponenten geschrieben. Geprüft was in der DB drin steht habe ich mit dem DB-Explorer. Ja, das ist wirklich noch IB4, leider ;) |
Re: Trigger verhindet löschen eines Datensatzes
Warum muss es unbedingt der IB4 sein? Schonmal über ein Wechsel auf eine höhere Version nachgedacht?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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