Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DB Eintrag nachvollziehen ? (https://www.delphipraxis.net/152454-db-eintrag-nachvollziehen.html)

khh 23. Jun 2010 13:34

AW: DB Eintrag nachvollziehen ?
 
Zitat:

Zitat von DeddyH (Beitrag 1031052)
Es wäre einmal interessant zu sehen, wie der Insert-Trigger aussieht.

der Insert Trigger ist ja nicht spektakulär:

SQL-Code:
AS
begin
 IF (NEW.vkaufkopf_id IS NULL) THEN
     NEW.vkaufkopf_id = GEN_ID(gen_vkaufkopf_id,1);
end
dazu der entsprechende Generator.

Bin auch schon einen Schritt weiter gekommen. Der Fehler entsteht wohl beim Update eines DS.

Da kann ich dann evtl. mal durchsteppen.

DeddyH 23. Jun 2010 13:36

AW: DB Eintrag nachvollziehen ?
 
Die erste Zeile würde ich weglassen. Dazu gab es vor längerer Zeit schon einmal eine Diskussion.

Sir Rufo 23. Jun 2010 14:39

AW: DB Eintrag nachvollziehen ?
 
Für das reine Loggen dieses Fehlers würde ich einen BEFORE-Trigger wählen.

So können auch alle Schreib-Versuche protokolliert werden, auch wenn diese fehlschlagen.

mkinzler 23. Jun 2010 14:45

AW: DB Eintrag nachvollziehen ?
 
Zum Loggen eher AFTER zur Korrektur BEFORE

Sir Rufo 23. Jun 2010 16:14

AW: DB Eintrag nachvollziehen ?
 
Zitat:

Zitat von mkinzler (Beitrag 1031085)
Zum Loggen eher AFTER zur Korrektur BEFORE

Wenn man einen Schreibversuch auch protokollieren möchte, der aber z.B. aufgrund einer Key-Verletzung nicht ausgeführt wird, dann braucht man BEFORE ;)

Hansa 23. Jun 2010 16:29

AW: DB Eintrag nachvollziehen ?
 
Aber ein BI-Trigger nützt wohl kaum was, wenn der Fehler danach gemacht wird. :mrgreen: Ergo : 2 Trigger und dann mal mit F7/F8 durchs Programm wandern.

DeddyH 23. Jun 2010 18:19

AW: DB Eintrag nachvollziehen ?
 
SQL-Code:
AS
begin
-- IF (NEW.vkaufkopf_id IS NULL) THEN
     NEW.vkaufkopf_id = GEN_ID(gen_vkaufkopf_id,1);
end
So kann man die ID angeben oder auch nicht, es wird in jedem Fall der nächste Wert des Generators genommen. Auf diese Weise sollte 0 ausgeschlossen sein.

khh 23. Jun 2010 18:55

AW: DB Eintrag nachvollziehen ?
 
Zitat:

Zitat von DeddyH (Beitrag 1031137)
SQL-Code:
AS
begin
-- IF (NEW.vkaufkopf_id IS NULL) THEN
     NEW.vkaufkopf_id = GEN_ID(gen_vkaufkopf_id,1);
end
So kann man die ID angeben oder auch nicht, es wird in jedem Fall der nächste Wert des Generators genommen. Auf diese Weise sollte 0 ausgeschlossen sein.



ich hatte das so interpretiert, dass der Trigger nur wirkt wenn das Feld "jungfräulich", also NULL ist.
Aber du hast Recht, bei einem neuen Satz ist das immer so, wenn die Erstellung der ID dem Trigger übertragen wird, die Abfrage deshalb überflüssig ;-)

fkerber 23. Jun 2010 19:01

AW: DB Eintrag nachvollziehen ?
 
Hi!

Wenn der Fehler ja durch ein Update auftritt, ist der Insert-Trigger davon ja unberührt (was natürlich nicht den obigen Verbesserungen wiedersprechen soll).

Die Frage ist:
Gibt es irgendwelche Trigger für Update?
Soll beim Update der PK überhaupt verändert werden?


Grüße, Frederic

idefix2 23. Jun 2010 21:40

AW: DB Eintrag nachvollziehen ?
 
SQL-Code:
AS
begin
 IF (NEW.vkaufkopf_id IS NULL) THEN
     NEW.vkaufkopf_id = GEN_ID(gen_vkaufkopf_id,1);
end
NULL ist nicht gleich 0
So wie der Trigger geschrieben ist, wird er nicht aktiviert, wenn Du als Wert 0 in das Feld schreibst, und dann steht nachher eben 0 drinnen. Die Zuweisung im Trigger erfolgt ja nur, wenn id NULL ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 2 von 3     12 3      

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