[firebase-br] RESOLVIDO - Recalculo de saldo (Trigger)

Fabiano Lima frguitar em bol.com.br
Seg Set 26 14:19:30 -03 2011


Cara, muitissimo obrigado, ficou perfeito.
Valew mesmo

abraço

Fabiano
 


____________________________________________

Em 26/09/2011 13:57, andre conrado < acf.andre em gmail.com > escreveu:
Realmente, esqueci de algumas coisas e para não ter mais dúvidas criei
aqui as tabelas e fiz os teste. Agora está OK. Aproveitei e coloquei a
primeira TRIGGER como INSERT OR UPDATE.

CREATE TRIGGER TRG_SALDO_UP_BEFORE FOR LANC ACTIVE BEFORE INSERT OR
UPDATE POSITION 2 AS
DECLARE VARIABLE SALDOANTERIOR INTEGER;

BEGIN

 /* Primeiro passo, obter o saldo anterior, se existirem lançamentos
anteriores então obtenho o saldo do último lançamento caso contrário
obtenho o saldo inicial do banco */

 IF (EXISTS(SELECT 0 FROM LANC WHERE LANC_ID <  NEW.LANC_ID)) THEN
 SELECT FIRST 1 SALDO FROM LANC WHERE LANC_ID <  NEW.LANC_ID
ORDER BY LANC_ID DESC INTO :SALDOANTERIOR;
 ELSE
 SELECT SALDO_INI FROM CADBANCO WHERE CCONTA = NEW.CCONTA INTO
:SALDOANTERIOR;

 /* Calcula o saldo atual */

 NEW.SALDO = SALDOANTERIOR + NEW.CREDITO - NEW.DEBITO;

END



CREATE TRIGGER "TRIGGER TRG_SALDO_UP_AFTER" FOR LANC ACTIVE AFTER
UPDATE POSITION 0 AS
DECLARE VARIABLE LANCAMENTO INTEGER;

BEGIN

 /* Localiza o próximo lançamento */

 SELECT FIRST 1 LANC_ID FROM LANC WHERE LANC_ID > NEW.LANC_ID ORDER
BY LANC_ID INTO :LANCAMENTO;

 /* Simula a alteração do próximo lançamento para que o FIREBIRD
gere uma nova chamada a TRIGGER de atualização do SALDO */

 UPDATE LANC SET CREDITO = CREDITO WHERE LANC_ID = :LANCAMENTO;

END


abçs

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista