Announcement

Collapse
No announcement yet.

Kein GenId tortz Befor Insert Trigger

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

  • Kein GenId tortz Befor Insert Trigger

    Ich habe folgende Tabelle:

    <pre>

    CREATE TABLE IBT_FACHRICHTUNG
    (
    IBDF_FACHRICHTUNG INTEGER NOT NULL,
    IBDF_FACHRICHTUNG_BEZEICHNUNG CHAR(50) NOT NULL,
    PRIMARY KEY(IBDF_FACHRICHTUNG)
    );

    und folgenden Befor Insert Trigger

    CREATE TRIGGER SET_IBDF_FACHRICHTUNG FOR IBT_FACHRICHTUNG BEFORE INSERT AS
    BEGIN
    IF (NEW.IBDF_FACHRICHTUNG IS NULL) THEN NEW.IBDF_FACHRICHTUNG = GEN_ID(GEN_IBDF_FACHRICHTUNG,1);
    END
    ^

    CREATE GENERATOR GEN_IBDF_FACHRICHTUNG;
    SET GENERATOR GEN_IBDF_FACHRICHTUNG TO 1;
    </pre>
    Füge ich nun einen Datensatz in meiner Anwendung über folgende Stored Produres
    <pre>
    CREATE PROCEDURE INS_IBT_FACHRICHTUNG(StrBEZEICHNUNG CHAR(50)) AS
    BEGIN
    INSERT INTO IBT_FACHRICHTUNG (IBDF_FACHRICHTUNG_BEZEICHNUNG)
    VALUES ( :StrBEZEICHNUNG);
    END
    ^
    </pre>
    ein

    so funktioniert ein IBTransaction.Commit ohne Probleme.

    Verwende ich aber eine IBQuery Komponente mit entsprechender UpdateSql Komponente und schicke ein IBQuery.insert weise dann dem Feld IBDF_FACHRICHTUNG_BEZEICHNUNG einen Wert zu und schicke dann ein IBQuery.Post so erhalte ich eine Fehlermeldung das dem Feld IBDF_FACHRICHTUNG kein Wert zugewiesen wurde.

    Wieso wird der Befor Insert Trigger bei einem IbQuery.insert - IbQuery.post nicht ausgelöst?

  • #2
    Hallo,

    der Trigger wird nicht ausgelöst, weil dieser Aufruf erst gar nicht beim InterBase ankommt. IBX prüft vorher, ob der Primärschlüsselwert zugewiesen wurde. Dieses Problem kann man über verschiedene Wege lösen: <br>
    a) TFields-Eigenschaft <b>Required</b> wird auf False gesetzt <br>
    b) Die veraltete Kombination von TIBQuery+TIBUpdateSQL wird durch <b>TIBDataSet</b> ersetzt, dort steht die Eigenschaft <b>GeneratorField</b> zur Verfügung, in deren Dialog die Zuordnung dieser Tabelle zum entsprechenden InterBase-Generator <b>visuell</b> vorgenommen wird

    Comment

    Working...
    X