interbase/firebird cascade

19/11/2007 - 12:05 von Priddy Panamera | Report spam
Hallo,

gibt es eigentlich ne deutschprachige firebird-newsgroup?


mein Problem ist, das ich zwei Tabellen mit master-detail Beziehung habe,
die ich mit dot.net(Delphi) füllen muss.

insert into t_messung(meassuretime) values (Cast('10.10.2007 10:10:10' As
Timestamp));
insert into t_messtaster(mid, leitung, counter, pin, status) values (1, 1,
11111, 5, 1);

wie bekomme ich die 'mid' von t_messung heraus um sie passend als Fremdkey
in t_messtaster zu verwenden? Odeer wie macht man das cascadierend?
 

Lesen sie die antworten

#1 Marian Aldenhövel
19/11/2007 - 12:23 | Warnen spam
Hi,

insert into t_messung(meassuretime) values (Cast('10.10.2007 10:10:10' As
Timestamp));

insert into t_messtaster(mid, leitung, counter, pin, status) values (1, 1,
11111, 5, 1);

wie bekomme ich die 'mid' von t_messung heraus um sie passend als
Fremdkey in t_messtaster zu verwenden? Odeer wie macht man das
cascadierend?



Schreibe den ON BEFORE INSERT-Trigger für t_messung so, daß er mid aus einem
Generator füllt und zwar nur dann, wenn er nicht gesetzt ist.

if (NEW:mid IS NULL) then
NEW:mit := gen_id(gen_messung,1)
fi

oder so. Ich kann die Syntax nie aus dem Kopf. Alternativ làsst Du den
Trigger einfach weg.

Und dann machst Du Deine Einfügung in drei Schritten.

1) mid-Wert holen:

mid := gen_id(gen_messung,1);

2) Master-Record anlegen:

insert into t_messung (mid,measuretime) values (:mid,...);

3) Details-Records einfügen:

insert into t_messung (mid,leitung) values (:mid,...);

Ein last_insert_id oder so kenne ich bei Firebird nicht, und auf diese Weise
bist Du auch flexibler falls Du mal eine andere Datenbank oder eine andere
Strategie zur PK-Erzeugung verwenden willst...

Ciao, MM
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"Success is the happy feeling you get between the time you
do something and the time you tell a woman what you did."

Ähnliche fragen