![]() |
AW: Trigger
OK hier nochmals der ganze Trigger:
Delphi-Quellcode:
Ich befürchte das es mit dem Geburtsdatum zu tun hat. Die ist in der Datenbank ein Datumsfeld (Date).
as
declare variable Monat Integer; declare variable Tag Integer; declare variable Jahr Integer; begin if (new.ZAHLUNGSPFLICHTIG = 'J') then if (((new.ZAHLUNGSART is null) or (new.ZAHLUNGSART = '')) or ((new.ZAHLUNGSZEITPUNKT) is null or (new.ZAHLUNGSZEITPUNKT = ''))) then exception EXCP_INVALID; if (new.geburtsdatum > '') then begin Tag = extract(day from new.geburtsdatum); Monat = extract(Month from new.geburtsdatum); Jahr = extract(year from new.geburtsdatum); if (Monat = 1) then New.geburtsmonat = 'Januar'; if (Monat = 2) then new.geburtsmonat = 'Februar'; if (Monat = 3) then new.geburtsmonat = 'März'; if (Monat = 4) then new.geburtsmonat = 'April'; if (Monat = 5) then new.geburtsmonat = 'Mai'; if (Monat = 6) then new.geburtsmonat = 'Juni'; if (Monat = 7) then new.geburtsmonat = 'Juli'; if (Monat = 8) then new.geburtsmonat = 'August'; if (Monat = 9) then new.geburtsmonat = 'September'; if (Monat =10) then new.geburtsmonat = 'Oktober'; if (Monat = 11) then new.geburtsmonat = 'November'; if (Monat = 12) then new.geburtsmonat = 'Dezember'; new.geburtstag = Tag; new.geburtsmonat_zahl = Monat; new.geburtsjahr = Jahr; end end |
AW: Trigger
Falsche Position der Klammer
SQL-Code:
müsste
((new.ZAHLUNGSZEITPUNKT) is null or (new.ZAHLUNGSZEITPUNKT = ''))) then
SQL-Code:
lauten.
((new.ZAHLUNGSZEITPUNKT is null) or (new.ZAHLUNGSZEITPUNKT = ''))) then
|
AW: Trigger
Ist das wirklich Firebird 2? Aktuell ist Firebird 5, wobei der Umstieg nicht besonders schwierig ist.
Wenn da ein eigenes Programm mit der Datenbank arbeitet, ist es wesentlich einfacher die Delphi Datumsroutinen zu verwenden als so einen relativ komplizierten Trigger zu bauen. Auch braucht man 4 Felder in der Datenbank, wo eigentlich eines reicht, wovon 3 berechnete Werte speichern. Das hat wahrscheinlich geringen Einfluss auf Größe und Performance der Datenbank, ist aber unschön. Braucht man die Werte z.B. für Export von Daten, könnte man sie auch über eine Stored Procedure abfragen. |
AW: Trigger
Ich weiß nicht, ob man FB debuggen kann, aber falls nicht, würde ich aus dem Trigger erstmal eine User Defined Function oder Stored Procedure machen.
Mit entsprechenden Parametern und Rückgabewerten kann man dann prüfen, an welcher Stelle es hakt. Damit hättest du auch die Möglichkeit, dir einen Soll-Ist-Vergleich zu erstellen. |
AW: Trigger
debuggen kann man so was in ibexpert, aber das bringt nur wenig erkenntnisse wenn man grundlegende
vergleiche sinnlos codiert.
Code:
warum soll ein datum >'' sein?
if (new.geburtsdatum > '') then
entweder kommt da rechts auch ein datum rein oder du prüfst auf not null firebird liefert auch brauchbare fehler, in einigermaßen aktuellen firbeird versionen auch gleich mit zeilennummer (die o.a. zeile ist in meinem test genau zeile 12)
Code:
so funktioniert das
Overflow occurred during data type conversion.
conversion error from string "". At trigger 'TESTX_BU0' line: 12, col: 5. ---------------------------------------------- SQLCODE: -413 SQLSTATE: 22018 GDSCODE: 335544334
Code:
if (new.geburtsdatum > '1.1.1900') then
|
AW: Trigger
Danke an Holger Klemt, das war der entscheidende Tipp.
|
AW: Trigger
Zitat:
|
AW: Trigger
Zitat:
|
AW: Trigger
Zitat:
|
AW: Trigger
Zitat:
![]() Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 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