Fórum Dúvida trigger para atualizar saldo #57042
07/10/2006
0
Desenvolvi uma trigger onde para cada item inserido na tabela ITENS_CONTA, atualiza-se o valor total da conta (campo VLR_CTA da tabela de CONTAS).
Quando eu a executei, não deu nenhum erro. Fiz um teste no programa, criei uma nova conta, salvei, gerando um código para CD_CTA (código da conta), inclui um item como teste, e ao fazer um select no banco, verifique que o valor da conta não foi atualizado.
Peço uma ajuda a todos para que possar encontrar o erro. Para isso, vejam abaixo a trigger que eu criei no FIREBIRD:
//////
CREATE TRIGGER TRG_ATUALIZA_TOTAL_CTA FOR ITENS_CONTA
ACTIVE AFTER INSERT POSITION 0
as
begin
if (inserting) then
begin
update CONTAS
set VLR_CTA = VLR_CTA + new.TOTAL
where CD_CTA = new.CD_CTA;
end
end
^
SET TERM ; ^
Obs.: Estou usando o Delphi 2006, e os componentes SQLDATASET, DATASETPROVIDER e CLIENTDATASET.
Um abraço a todos, e desde já agradeço pela atenção.
Rogério
Roger1976
Curtir tópico
+ 0Posts
07/10/2006
Titanius
update CONTAS set VLR_CTA = COALESCE(VLR_CTA, 0) + COALESCE(new.TOTAL, 0) where CD_CTA = new.CD_CTA;
Não vejo o porque do if (inserting), pois se a trigger já está no After Insert, teoricamente sempre vai excutar se estiver inserindo.. :wink:
[]s
Gostei + 0
08/10/2006
Roger1976
Muito obrigado!!!!!!!!!!!
Gostei + 0
08/10/2006
Titanius
uma dica... [b:0b20546be1]sempre[/b:0b20546be1] que você for fazer algum cálculo em alguma trigger e Store Procedure em [b:0b20546be1]Firebird[/b:0b20546be1], e o campo em questão pode vir NULL, coloque o COALESCE... pois se o campo for nulo, ele não calcula...
É o que eu faço... em todos os campos que faz parte de algum cálculo eu coloco o Coalesce.. pra evitar este tipo de problema.. :D
[]s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)