Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Problem mit Trigger Firebird 1.5

  Alt 24. Jan 2006, 09:49
Der default Wert wird nur genommen, wenn das Feld NULL ist ! 1. Fehler : wird es manuell besetzt, dann wird es nie NULL sein und der Trigger schlägt nicht zu. 2. Fehler : es wird von alleine auch nicht 1, weil DEFAULT eben nur greift bei NULL. Tja, so beißt sich normalerweise nur eine Katze in den Schwanz.

So legt man sich übrigens eine IB/FB-Datenbank inkl. "Autoincrement" in 2 Min. an :

SQL-Code:
/******************************************************************************/
/****         Generated by IBExpert 2005.09.25 24.01.2006 11:03:51         ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES ISO8859_1;

CREATE DATABASE 'C:\db\TESTDB.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET ISO8859_1;



/******************************************************************************/
/****                              Generators                              ****/
/******************************************************************************/

CREATE GENERATOR SHOP_GEN_ID;
SET GENERATOR SHOP_GEN_ID TO 2; <-- Generatorwert steht hier bei 2 ! Warum ?
                                    Es wurden 2 Datensätze angelegt und der Trigger
                                    hat die ID bereits 2 mal erhöht.

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/

CREATE TABLE SHOP (
    ID INTEGER NOT NULL,
    NR INTEGER,
    NAME CHAR(30)
);


INSERT INTO SHOP (ID, NR, NAME) VALUES (1, 1, 'name ');
INSERT INTO SHOP (ID, NR, NAME) VALUES (2, 2, 'name2 ');
                  ^ ^ wurde vom Trigger besetzt
COMMIT WORK;



/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE SHOP ADD CONSTRAINT PK_SHOP PRIMARY KEY (ID);

/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/

SET TERM ^ ;

/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/

/* Trigger: SHOP_BI0 */
CREATE TRIGGER SHOP_BI0 FOR SHOP
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.ID is null) then
    new.ID = gen_id(SHOP_GEN_ID, 1);
end
^

SET TERM ; ^
Gruß
Hansa
  Mit Zitat antworten Zitat