Entwickler-Ecke

Datenbanken - [Firebird embedded] Trigger läuft nicht


CBRABO - Do 20.09.07 11:03
Titel: [Firebird embedded] Trigger läuft nicht
Hallo Zusammen!

Derzeit entwickle ich gerade an einer Software zur Erstellung von Mieter-Nebenkostenabrechnungen. Zunächst habe ich hierbei auf die BDE gesetzt, die jedoch in einer Vista-Umgebung alles andere als ordentlich und zuverlässig läuft. Somit habe ich den Entschluß gefaßt, die Datenbank nun auf die Embedded-Version vom Firebird umzustellen.

Leider scheitert das Ganze bei mir im Moment jedoch bereits an dem ersten Trigger, der einfach nicht "laufen" will. Eigentlich sollte hiermit ein AutoInc-Feld ID erstellt werden. Beim Einfügen neuer Datensätze auch in der IBOConsole ist das Feld ID jedoch immer NULL. Sobald ich den Datensatz abschicke, erscheint dann die Fehlermeldung, dass ID nicht NULL sein darf. Offensichtlich wird der TRIGGER auch nicht aufgerufen. Auch der Wert im GENERATOR bleibt unverändert.

Zu Testzwecken habe ich nun erstmal nur eine einzige Testtabelle angelegt (ebenfalls mit einem Generator und einem Trigger). Jedoch läuft auch hier der Trigger nicht.

Auch der Versuch, die Datenbank mit dem Interbase zu nutzen, führte zum gleichen Ergebnis.

Die Metadaten sehen wie folgt aus:


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
SET SQL DIALECT 3;

/* CREATE DATABASE 'D:\RAD Studio\Projekte\NK_FireBird_DB\NK 2007.FDB' PAGE_SIZE 4096

 DEFAULT CHARACTER SET NONE */

/* Domain definitions */
CREATE DOMAIN "STR10" AS VARCHAR(10);
CREATE DOMAIN "STR25" AS VARCHAR(25);
CREATE DOMAIN "STR250" AS VARCHAR(250);
CREATE DOMAIN "STR50" AS VARCHAR(50);

/* Table: TEST, Owner: SYSDBA */

CREATE TABLE "TEST" 
(
  "ID"   INTEGER NOT NULL,
  "NAME"   STR25 ,
 PRIMARY KEY ("ID")
);

CREATE GENERATOR "GEN_OBJEKTEID";
SET TERM ^ ;


/* Triggers only will work for SQL triggers */

CREATE TRIGGER "TRIG_OBJEKTE" FOR "TEST" 
ACTIVE BEFORE INSERT POSITION 0
AS

begin
  new."ID" = GEN_ID (GEN_OBJEKTEID, 1);
end
 ^

COMMIT WORK ^
SET TERM ;^

/* Grant Roles for this database */


/* Grant permissions for this database */


Vielleicht hat einer von Euch eine Idee, woran es liegen könnte.

Vielen Dank schon mal.

Christoph

Moderiert von user profile iconUGrohne: Code- durch SQL-Tags ersetzt


mkinzler - Do 20.09.07 13:23

Wie fügst du den ein?
Laß mal das Feld im Insert weg.


CBRABO - Do 20.09.07 14:21

Super ! Vielen Dank !

Ohne das Feld ID hat es auch mit dem Insert wunderbar funktioniert. In Delphi habe ich das Feld einfach als Default auf 0 gesetzt und dann klappte es auch mit dem DBGrid ohne Probleme.