![]() |
Datenbank: Firebird • Version: 2.5 (64 Bit) • Zugriff über: IBX
TRIGGER - Probleme mit: old. new.
Moin,
:wall: - kann mir jemand sagen was an "old." - beim Trigger dat Problem ist?
SQL-Code:
Laut Doku sollte man per "old.[column]" auf ein den vorherigen Datensatz beim eingefügten drauf zu greifen.
CREATE TRIGGER KASSENBUCH_BI0 FOR KASSENBUCH
ACTIVE BEFORE INSERT POSITION 0 AS begin new.saldo = [b]old.[/b]saldo - new.soll + new.haben; end lg der Andreas PS: Ich möchte einfach nur ein simples Kassenbuch mit einem Trigger automatisieren. So das, dass Saldo sich immer autom. mit berechnet. :stupid: |
Re: TRIGGER - Probleme mit: old. new.
Hi!
Gibt es eine Fehlermeldung? Hast du es mal mit OLD versucht? Edit: Moment mal - das ist doch ein insert-trigger, oder? Was soll es denn da für ein old geben? Sollte es nicht eher ein Update-Trigger sein? Grüße, Frederic |
Re: TRIGGER - Probleme mit: old. new.
achso - bei Insert-Triggern geht das nicht?
hmm ... da geht mir ein Licht auf :coder2: das heißt ich muss das über eine stored proc machen... na da kuck ich ma (war .OLD - die Formatierung hatte versagt) Ahja Fehlermeldung: Zitat:
|
Re: TRIGGER - Probleme mit: old. new.
Beim Insert halt nicht, da es hier ja keinen alten Wert gibt. Ist aber auch bei einer SP nicht anders, auch hier gibt es keinen alten Wert.
Zudem sollte man den salso nicht als Wert in die Tabelle schreiben, sondern beim Auslesen dynamisch ermitteln |
Re: TRIGGER - Probleme mit: old. new.
Hi!
Also von meinem Verständnis her, ist es so, dass sich OLD und NEW ja auf eine Zeile / Tupel beziehen. Und beim Update hast du ja dann z.B. die Daten des alten Eintrages. Die Frage, die sich mir stellt: Wie sieht denn dein Tabellenlayout aus? Grüße, Frederic |
Re: TRIGGER - Probleme mit: old. new.
Die Stored-Proecdure ermittelt hat was einen Datensatz vorher drin stand... also über die vorherigen Max.ID... :stupid:
Nachfolgend die Tabelle zum Verständnis:
SQL-Code:
CREATE TABLE KASSENBUCH (
ID INTEGER NOT NULL, DATUM TIMESTAMP DEFAULT '01.01.1900', HABEN NUMERIC(15,2) DEFAULT 0, SOLL NUMERIC(15,2) DEFAULT 0, SALDO NUMERIC(15,2) DEFAULT 0, MWST SMALLINT DEFAULT 0, FREITEXT VARCHAR(512) DEFAULT '' ); lg Andreas :stupid: |
Re: TRIGGER - Probleme mit: old. new.
Hi!
Sehen dann Einträge z.B. so aus (gekürzt auf das wesentliche):
Code:
ID | Haben | Soll | Saldo
1 | 100 | 0 | 100 2 | 0 | 10 | 90 Falls ja, solltest du das überdenken, weil du redundante Informationen speicherst, deren "Wartbarkeit" eher gering ist. Grüße, Frederic |
Re: TRIGGER - Probleme mit: old. new.
Ja, Kassenbücher schreiben das eigendlich so vor. Und da mal ne giesenmenge gespeichert kostet das rechenleistung bzw. zeit - so gesehen - kenn ich das eigendlich nicht anders...
oder wie würdest Du das machen? |
Re: TRIGGER - Probleme mit: old. new.
Ich würde den Saldo in der Abfrage ermitteln
SQL-Code:
select
Sum(Soll) - Soll(Haben) as Saldo from Kassenbuch; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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 by Thomas Breitkreuz