Fórum Dúvida trigger para atualizar saldo #57042

07/10/2006

0

Saudações!!!!

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

Roger1976

Responder

Posts

07/10/2006

Titanius

Amigo, verifique duas coisas, primeiramente se você etá dando o ApplyUpdate no ClientDataSet, caso sim, tente mudar o codigo pra deste jeito:

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


Responder

Gostei + 0

08/10/2006

Roger1976

Amigo, funcionou blz....

Muito obrigado!!!!!!!!!!!


Responder

Gostei + 0

08/10/2006

Titanius

Disponha...

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar