Subject trigger in firebird 2.1.1
Author Olaf Kluge
Hello,



i have created a trigger. The source code below.



CREATE TRIGGER TPLAN_KW_POS_AU FOR TPLAN_KW_POS ACTIVE

AFTER UPDATE POSITION 0

AS

declare variable apnr integer;

declare variable nextag integer;

declare variable mengeh double precision;

BEGIN

if((old.ap = 69)and(new.ap <> 69)) then /* ehemals Pulverei */

delete from tplan_kw_pos where id_autoins = old.id;

if((old.ap <> 69)and(new.ap = 69)) then /* neu jetzt Pulverei */

begin

select arbeitsplatznr, stck_je_std from tarbg where teilenr =
new.teilenr and bsnr = new.arbgang+1 into :apnr, mengeh;

if((apnr = 68) or (apnr = 67)) then

insert into tplan_kw_pos(ltjahr, ltkw, auftragsjahr, auftragsnr, kwtag,
stck_je_std, stck_je_tag, teilenr, arbgang,

ap, abgearbeitet, ps2, id_autoins, prio) values

(new.ltjahr, new.ltkw, new.auftragsjahr, new.auftragsnr, new.kwtag,
:mengeh, new.stck_je_tag, new.teilenr, new.arbgang+1,

:apnr, 0, 0, new.id, new.prio);

end

if((new.ap = 69)and(old.ap = 69)) then /* unverndert Pulverei */

begin

if((new.teilenr <> old.teilenr)or(new.arbgang <> old.arbgang)or

(new.auftragsjahr <> old.auftragsjahr)or(new.auftragsnr <>
old.auftragsnr)) then

begin /* Teil, AG, Auftragsjahr, Auftragsnr hat/haben sich gendert,
Datensatz lschen und neu anlegen*/

delete from tplan_kw_pos where id_autoins = old.id;

select arbeitsplatznr, stck_je_std from tarbg where teilenr =
new.teilenr and bsnr = new.arbgang+1 into :apnr, mengeh;

if((apnr = 68) or (apnr = 67)) then

insert into tplan_kw_pos(ltjahr, ltkw, auftragsjahr, auftragsnr,
kwtag, stck_je_std, stck_je_tag, teilenr, arbgang,

ap, abgearbeitet, ps2, id_autoins, prio) values

(new.ltjahr, new.ltkw, new.auftragsjahr, new.auftragsnr, new.kwtag,
:mengeh, new.stck_je_tag, new.teilenr, new.arbgang+1,

:apnr, 0, 0, new.id, new.prio);

end

else if((new.ltjahr <> old.ltjahr)or(new.ltkw <> old.ltkw)or(new.kwtag
<> old.kwtag)or(new.prio <> old.prio)or

(new.bemerkung <> old.bemerkung)or(new.stck_je_tag <>
old.stck_je_tag))then

begin /* Aktualisierung der Werte */

update tplan_kw_pos set ltjahr = new.ltjahr, ltkw = new.ltkw,

kwtag = new.kwtag, prio = new.prio, bemerkung = new.bemerkung,
stck_je_tag = new.stck_je_tag

where id_autoins = new.id;

end

end

END



After the position ".<> old.prio)or" there is a line break:

else if((new.ltjahr <> old.ltjahr)or(new.ltkw <> old.ltkw)or(new.kwtag
<> old.kwtag)or(new.prio <> old.prio)or

(new.bemerkung <> old.bemerkung)or(new.stck_je_tag <>
old.stck_je_tag))then

I'm frustrated, but the condition on the next line was not observed! When I
change the values (ltjahr, ltkw . prio), the instructions will be executed!
But If I change the "bemerkung", nothing happened! But after I have removed
the line break and set it new, all conditions were taken! It's crazy!



I use the ems firebird interbase manager and firebird 2.1.1.17.. What can be
the problem?



Thank you.



Best regards, Olaf





[Non-text portions of this message have been removed]