![]() |
Re: Trigger verhindet löschen eines Datensatzes
mmm...es ist leider nicht meine Entscheidung welche Datenbank eingesetzt wird also werde ich wohl noch eine Weile an IB4 festhalten (müssen). :?
|
Re: Trigger verhindet löschen eines Datensatzes
Dann pack den Code zum Datum einfügen in das BeforePost-Event der BDE-Komponente, dann brauchst du keinen Trigger. Ist nicht ganz sauber, aber probier das mal.
André |
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
|
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
SQL-Code:
Muss Dir jetzt nur noch die Funktion aus dem IB holen, die dir das aktuelle Datum liefert.
create table Daten (
ID int, Datum datetime null default getdate()) go |
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
|
Re: Trigger verhindet löschen eines Datensatzes
@Viez, bist du immer noch dran die DB zu zerhackstückeln ? :shock:
SQL-Code:
Der Trigger protokolliert sekundengenau, wann zuletzt an der DB an diesem einen betroffenen Datensatz etwas geändert wurde. Es wäre ein leichtes, dabei noch festzuhalten welcher User es war usw. Wo liegt das Problem ? Natürlich kann man das nicht schon beim Erzeugen der Table machen und deshalb sind die Default-Werte fehl am Platze.
/******************************************************************************/
/**** Generated by IBExpert 04.10.2005 18:10:28 ****/ /******************************************************************************/ SET SQL DIALECT 3; SET NAMES ISO8859_1; SET TERM ^ ; CREATE TRIGGER TABLE1_AUO FOR TABLE1 ACTIVE AFTER UPDATE POSITION 0 as begin update TABLE1 set LETZTEAENDERUNG = current_timestamp where (ID = old.ID) and ((LETZTEAENDERUNG is null) or (LETZTEAENDERUNG <> current_timestamp)); end ^ SET TERM ; ^ |
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
Datensatz kann nicht gesperrt werden, da der Datensatz von einen anderen Benutzter geändert wurde. (EDBEngineError) Die einzige Erklärung die ich mir denken kann ist, daß der Trigger als ein anderer User läuft. Aber so richtig kann ich das auch nicht glauben. Wenn ich ein Rollback mache weiß die DB ja auch welche Trigger dazugehören. |
Re: Trigger verhindet löschen eines Datensatzes
Das Problem ist doch einfach, dass die BDE vor dem löschen nochmal nachschaut, ob sich der Datensatz inzwischen geändert hat. Und da der Trigger den Datensatz nochmal geändert hat meint die BDE eben es war noch ein anderer Benutzer an dem Datensatz dran.
Du kannst jetzt folgendes machen: 1. in deiner TTable oder TQuery den UpdateMode auf upWhereKeyOnly setzen (vorausgesetzt du hast einen Primary Key) 2. nach dem Insert/Update des Datensatzes gleich einen Refresh auf diesen Datensatz machen, das wäre eh die bessere Lösung, dann siehst du die vom Trigger generierten Werte auch gleich auf dem Client Danach dürfte dem Löschen nix mehr im Weg stehen. Gruß Daniel |
Re: Trigger verhindet löschen eines Datensatzes
Hallo dfried.
Die erste Lösung funktioniert schon mal. Danke. Wenn ich den Update-Modus "upWhereKeyOnly" verwende muß ich dann noch irgendwas beachten? Soweit ich die Hilfe verstande habe bekomme ich keine Probleme solange ich den Key nicht ändere. Gibts da noch mehr Stolpersteine? Die zweite Lösung scheint mir aber auch vernünftiger. Ich verwende ein TQuery. Wie kann ich da einen Primary Key verwenden? Die zu Grunde liegende Tabelle besitzt einen Primary Key aber wie ich den in die Abfrage bekomme weiß nicht. |
Re: Trigger verhindet löschen eines Datensatzes
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 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