Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird Trigger verhindert Datenupdate (https://www.delphipraxis.net/183877-firebird-trigger-verhindert-datenupdate.html)

Rynardald 11. Feb 2015 08:50

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBExpert

Firebird Trigger verhindert Datenupdate
 
Hallo ich habe folgendes Problem. Ich habe diese Trigger (mittels IBExpert) in meine Datenbank (Firebird 2.5) eingebaut:
Code:
CREATE TRIGGER TEST_BU0 FOR TEST
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (new.pe_deltag = 't') then new.pe_deldate = current_timestamp;
  if (new.pe_deltag = 'f') then new.pe_deldate = null;
end
^
Das Problem ist nun wenn ich 't' in das Feld pe_deltag einbaue wird das aktuelle Datum in das Feld pe_deldate eingetragen. Wenn ich jedoch nun versuche diesen Vorgang rückgängig zu machen (ich setze pe_deltag wieder auf 'f'), dann lässt dies der trigger nicht mehr zu (sprich pe_deltag bleibt 't' und pe_deldate enthält weiterhin das Datum).

mkinzler 11. Feb 2015 08:55

AW: Firebird Trigger verhindert Datenupdate
 
Versuch mal:

SQL-Code:
CREATE TRIGGER TEST_BU0 FOR TEST
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (new.pe_deltag = 't') then begin new.pe_deldate = current_timestamp; end
  if (new.pe_deltag = 'f') then begin new.pe_deldate = null; end
end
^

Rynardald 11. Feb 2015 09:16

AW: Firebird Trigger verhindert Datenupdate
 
ok das problem hat sich gelöst.

Die betreffende Tabelle hatte keinen Primärschlüssel. Nachdem ich der Tabelle einen Primärschlüssel hizugefügt hatte war das Problem weg.
Fragt mich nicht wieso - ich hab keine Ahnung - aber es funktioniert.

@mkinzler: deinen Vorschlag habe ich auch ausprobiert - hat aber nicht funktioniert.

Blup 11. Feb 2015 16:30

AW: Firebird Trigger verhindert Datenupdate
 
Wenn kein Primärschlüssel definiert ist, werden für ein Update eventuell alle Felder als Kriterium herangezogen.
Der Client kennt nur den Datensatz mit "t" und NULL im Feld "pe_deldate".
Diesen findet er aber für weitere Updates nicht, da das Feld "pe_deldate" dank des Triggers einen Wert enthält.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 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