Announcement

Collapse
No announcement yet.

Trigger per SQL-Script

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Trigger per SQL-Script

    Hallo zusammen,

    irgendwie komme ich mit Triggern per SQL-Script nicht klar. Ich möchte einen einfachen BEFORE_UPDATE-Trigger auf eine Tabelle legen, der nichts weiter erledigen soll, Daten zu aktualisieren. Ich habe im Architekten einen solchen Trigger angelegt (UPDATE BELEG SET ANDDATUM=Now()). Wenn ich nun einen Datensatz im Architekten direkt ändere, wird der Trigger nicht abgefeuert. Gibt es irgendwo Beispiele für Trigger oder auch Stored Proc's auf Basis SQL-Script ? Welchen Sprachelement kann man benutzen ? Wie sieht die Syntax aus ? Ich fische so ein wenig im trüben.

    MfG

  • #2
    Trigger kommunizieren mit der Applikation/Datenbank über zwei Temporärtabellen. __new enthält den neuen Datensatz bei Update und Insert Triggern, __old den bisherigen bei Update und Delete Triggern. Den aktuellen Datensatz kann man nur in einem INSTEAD OF bzw einem AFTER Trigger ändern. Bei INSERTS ist es einfacher, einen INSTEAD OF Trigger zu verwenden, bei UPDATES einen AFTER Trigger:
    <pre>
    create trigger trig_ins_mytable
    on mytable
    instead of insert
    begin
    update __new set myfield=42;
    insert into mytable select * from __new; //nicht vergessen
    end;

    create trigger trig_upd_mytable
    on mytable
    after update
    begin
    update mytable set myfield=42 where id=(select id from __new);
    end;
    </pre&gt

    Comment


    • #3
      Hallo,

      das scheint irgendwie nicht sauber zu funktionieren. Ich habe folgenden AFTER UPDATE Trigger erzeugt.

      update Beleg set Be_Aendat=Now()
      where Be_LfdNr=(select BE_LfdNr from __new);

      BE_LfdNr ist der eindeutige Index.

      Wenn ich im Architekten einen Datensatz ändere und Poste, wird das Feld BE_AENDAT nicht sofort aktualisiert. Erst wenn ich den nächsten Satz ändere wir auch der vorherige Satz aktualisiert. Wie ist das zu verstehen

      Comment


      • #4
        das liegt daran, dass der Architect in Delphi geschrieben ist und Delphi nichts von serverseitig geänderten Datensätzen weiß. Ein Refresh hilft

        Comment


        • #5
          Danke, das war's.

          Jedoch ist mir die Sache nicht ganz klar. Beim Firebird benutzt man z.B. BEFORE-Trigger um Daten des aktuellen (UPDATE) oder neuen (INSERT) Datensatzes vorzubelegen. Das scheint ja beim ADS generell anders zu sein. Ich möchte gern Felder eines neuen Datensatzes beim INSERT initialisieren. Das würde ich gern auf dem Server per Trigger erledigen lassen. Wie geht das ?

          Mf

          Comment


          • #6
            CONSTRAINTS (Default Value

            Comment

            Working...
            X