AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Trigger

Ein Thema von Walter Landwehr · begonnen am 19. Jan 2025 · letzter Beitrag vom 20. Jan 2025
Antwort Antwort
Seite 1 von 3  1 23      
Walter Landwehr
Online

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
405 Beiträge
 
Delphi 10.4 Sydney
 
#1

Trigger

  Alt 19. Jan 2025, 11:21
Datenbank: Firebird • Version: 2.0 • Zugriff über: IBO
Hallo ich habe folgenden Code im Trigger:
Delphi-Quellcode:
  if (new.geburtsdatum > '') then
    begin
       new.geburtstag = extract(day from new.geburtsdatum);
       new.geburtsmonat_zahl = extract(Month from new.geburtsdatum);
       if new.geburtsmonat_zahl = 1 then
         if new.geburtsmonat = 'Januar';

    end
Bei if new.geburtsmonat_zahl = 1 then kommte ein Parsing error. Was ist hier falsch?
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.644 Beiträge
 
Delphi 12 Athens
 
#2

AW: Trigger

  Alt 19. Jan 2025, 11:28
Sicher, dass nicht stattdessen das sinnlose „if“ in der nachfolgenden Zeile moniert wird?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hes

Registriert seit: 21. Apr 2024
Ort: Baden Württemberg
19 Beiträge
 
Delphi 12 Athens
 
#3

AW: Trigger

  Alt 19. Jan 2025, 11:34
Hab mit Firebird noch nie was gemacht, aber ist es nicht wie z.b. in C, dass du == machen musst?
Rainer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.644 Beiträge
 
Delphi 12 Athens
 
#4

AW: Trigger

  Alt 19. Jan 2025, 11:37
Auf jeden Fall kann es auch nicht schaden, den Ausdruck zu klammern
Code:
if (…) then
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Walter Landwehr
Online

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
405 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Trigger

  Alt 19. Jan 2025, 12:59
Danke

So funktioniert es:
Delphi-Quellcode:
  if (new.geburtsdatum > '') then
    begin
       new.geburtstag = extract(day from new.geburtsdatum);
       new.geburtsmonat_zahl = extract(Month from new.geburtsdatum);
       if (new.geburtsmonat_zahl = 1) then
         new.geburtsmonat = 'Januar';

    end
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Walter Landwehr
Online

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
405 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Trigger

  Alt 19. Jan 2025, 14:24
Leider immer noch ein Problem. Hier mal der Ganze Trigger.
Delphi-Quellcode:
as
    declare variable Monat Integer;
    declare variable Tag 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);

       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 = 'Aprol';
       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';
       Old.geburtstag = Tag;
       Old.geburtsmonat_zahl = Monat;
    end
end
Der Trigger lässt sich nicht kompilieren. Keine Ahnung warum. Vielleicht sieht jemand den Fehler.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
684 Beiträge
 
Delphi 12 Athens
 
#7

AW: Trigger

  Alt 19. Jan 2025, 14:37
ist das richtig so, dass Du old ändern willst? Steht das überhaupt schreibbar zur Verfügung?
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Walter Landwehr
Online

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
405 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Trigger

  Alt 19. Jan 2025, 15:25
Ja stimmt ist natürlich falsch. Hab ich geändert nun lässt sich der Trigger kompilieren. Leider kann ich aber weder einen Daten Satz ändern noch neu anlegen. Muss glaub ich irgendwie mit den Variablen zu tun haben.

Hier muss der Fehler liegen.
Tag = extract(day from new.geburtsdatum);
Monat = extract(Month from new.geburtsdatum);
Jahr = extract(year from new.geburtsdatum);
aber was ist falsch?
Walter Landwehr
Mfg

Walter

Geändert von Walter Landwehr (19. Jan 2025 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.259 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Trigger

  Alt 19. Jan 2025, 18:46
Hallo Walther,

auch wenn Firebird bei mir viele Jahre her ist...
Aber deine 12 if then Statements solltest Du auch so schreiben können:

Code:
New.geburtsmonat = case
               when Monat = 1 then 'Januar'
               when Monat = 2 then 'Februar'
               when Monat = 3 then 'März''
               when Monat = 4 then 'April'
               when Monat = 5 then 'Mai'
               when Monat = 6 then 'Juni'
               when Monat = 7 then 'Juli'
               when Monat = 8 then 'August'
               when Monat = 9 then 'September'
               when Monat = 10 then 'Oktober'
               when Monat = 11 then 'November'
               when Monat = 12 then 'Dezember'
         end;
Macht das Ganze etwas übersichtlicher.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.361 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Trigger

  Alt Gestern, 06:48
Hier muss der Fehler liegen.
Tag = extract(day from new.geburtsdatum);
Monat = extract(Month from new.geburtsdatum);
Jahr = extract(year from new.geburtsdatum);
aber was ist falsch?
Das halte ich für unwahrscheinlich, falls geburtsdatum ein Datumstyp ist. Falls es ein varchar ist, kann es Interpretationsfehler durch die DB geben. Allerdings lässt nicht jede DB dann noch dieses extract zu. Wie es in Firebird ist, weiß ich nicht.
Außerdem machst du noch ein extract auf das Jahr, was in deinem Code für den Trigger nicht enthalten ist. Ist der Code, den du uns zeigst vielleicht unvollständig und wie sehen daher gar nicht alle potentiellen Fehlerstellen?

Bitte folgendes genau prüfen:
Code:
if (((new.ZAHLUNGSART is null) or (new.ZAHLUNGSART = '')) or ((new.ZAHLUNGSZEITPUNKT) is null or (new.ZAHLUNGSZEITPUNKT = ''))) then
    exception EXCP_INVALID;
Läuft der Trigger vielleicht in die Exception?
Abgesehen davon ist beim Zahlungszeitpunkt nicht richtig geklammert.
Um es zu vereinfachen, kannst du die Prüfung wie folgt ändern:
Code:
(new.ZAHLUNGSART is null) or (new.ZAHLUNGSART = '')
-- wird zu:
coalesce(new.ZAHLUNGSART, '') = ''
-- und
(new.ZAHLUNGSZEITPUNKT) is null or (new.ZAHLUNGSZEITPUNKT = '')
-- wird zu:
coalesce(new.ZAHLUNGSZEITPUNKT, '') = ''
Das sollte dann so aussehen:
Code:
if ((coalesce(new.ZAHLUNGSART, '') = '') or (coalesce(new.ZAHLUNGSZEITPUNKT, '') = '')) then
    exception EXCP_INVALID;
Und bei der Gelegenheit noch Aprol in April ändern
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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 by Thomas Breitkreuz