[firebase-br] Alguém me ajude POR FAVOR!!!

Jony Ridel jonyridel em aol.com
Qui Jun 2 09:38:44 -03 2005


Junior, não sei se resolve o seu problema, mas no meu caso eu criei uma 
procedure para gravar os dados na minha tabela de movimentação bancária 
(passo os valores a ser gravados nos paramêtros da procedure), esta 
procedure é que calcula o saldo anterior do lançamento antes de inserir 
o registro, se for um lançamento retroativa ela dispara outra procedure 
após a inclusão que faz o recálculo dos saldos a partir daquela data.
Aqui eu não permito a alteração de um valor após o lançamento, pois da 
mesma forma que o usuário pode estar tentando corrigir um erro ele pode 
estar tentando lesar a empresa, mas se fosse necessário isso seria 
simples de ser implentado na procedure.

---------------------
Jony Ridel
Mais Informática
Feira de Santana - BA
=====================

Rafael Cabral escreveu:

 > Foi mal, não vi o loop. Achei que o update estava fora do loop, falta de
 > atenção. ;)
 >
 > Eu tb passei por esse problema. Vou te dizer o que fiz no caso. Dividi a
 > tabela em duas. Uma de cadastro e a outra de resultado. O que vc pode
 > fazer
 > é assim que realizar um cadastro na tabela de cadastro, realizar os
 > devidos
 > cálculos e inserir na tabela resultado. É só uma idéia, até pq vc
 > teria que
 > criar mais uma tabela. Terá mais espaço? Sim, mas no caso vc teria que
 > colocar apenas os dados que interessam nas tabelas.
 >
 > []s,
 >
 > Rafael Cabral
 >
 > -----Original Message-----
 > From: lista-bounces em firebase.com.br
 > [mailto:lista-bounces em firebase.com.br]On Behalf Of Antonio Bonelli
 > Junior
 > Sent: quarta-feira, 1 de junho de 2005 16:38
 > To: FireBase
 > Subject: RE: [firebase-br] Alguém me ajude POR FAVOR!!!
 >
 >
 > Rafael,
 >
 > Da forma que vc falou eu estaria atualizando o saldo só do lançamento que
 > estou incluindo/alterando, correto?
 >
 > Se eu estiver alterando um lançto do dia 25/05/2005, o saldo deste será
 > atualizado, porém os lançtos de 26/05/2005 em diante não serão
 > atualizados. É aí que está o problema, preciso atualizar tanto o lançto
 > que estou alterando quanto os demais.
 >
 > []s
 > Junior
 >
 >
 > > Junior,
 > >
 > > Faz o seguinte, altere esse SP para fazer o cálculo do saldo anterior e
 > > retorne para dentro do trigger. Se o valor que vc deseja alterar for
 > > apenas
 > > do registro que está sendo incluído ou alterado então com certeza
 > > funciona.
 > > Faz o teste. ;)
 > >
 > > Não se esqueça de colocar as condições de tipo de lançamento no
 > trigger e
 > > altere o valor usando NEW.SALDO.
 > >
 > > []s,
 > >
 > > Rafael Cabral
 > >
 > > -----Original Message-----
 > > From: lista-bounces em firebase.com.br
 > > [mailto:lista-bounces em firebase.com.br]On Behalf Of Antonio Bonelli
 > > Junior
 > > Sent: quarta-feira, 1 de junho de 2005 15:40
 > > To: FireBase
 > > Subject: Re: [firebase-br] Alguém me ajude POR FAVOR!!!
 > >
 > >
 > > Obrigago Cantu, mas não querendo abusar, como posso fazer então para
 > > atualizar esse campo "Saldo" quando incluir ou alterar um determinado
 > > registro na tabela?
 > >
 > > []s
 > > Junior
 > >
 > >
 > >> Você está criando um loop infinito, pois a procedure atualiza
 > >> registros na tabela, e o trigger da tabela chama a procedure, e o
 > >> processo se repete infinitamente...
 > >>
 > >> []s
 > >> Cantu
 > >> http://www.warmboot.com.br
 > >> FireBase - http://www.FireBase.com.br
 > >>
 > >> ABJ> Boa tarde a todos!
 > >>
 > >> ABJ> Desculpem a insistência, mas estou precisando muito resolver o
 > >> problema na
 > >> ABJ> SP que estou utilizando para atualizar saldos bancários.
 > >>
 > >> ABJ> Tenho a necessidade de atualizar saldos a cada registro
 > >> inserido/alterado
 > >> ABJ> em minha tabela e através de exemplos postados na lista criei a
 > >> procedure
 > >> ABJ> abaixo, porém ao ser executada é retornado o seguinte erro: "Too
 > >> many
 > >> ABJ> concurrent executions of the same request".
 > >>
 > >> ABJ> Pergunto: Como posso resolver esse problema, pois necessito
 > >> (realmente) do
 > >> ABJ> saldo em cada registro da tabela?
 > >>
 > >> ABJ> Se alguém tiver alguma idéia, POR FAVOR, me ajude...
 > >>
 > >> ABJ> Obrigado
 > >> ABJ> Junior
 > >>
 > >>
 > >> ABJ> *** Procedure ***
 > >> ABJ> ================ABJ> CREATE PROCEDURE ATUALIZARSALDOS (
 > >> ABJ>     DATALANCTO DATE,
 > >> ABJ>     CODCONTA INTEGER)
 > >> ABJ> AS
 > >> ABJ> DECLARE VARIABLE ULTIMOLANCTO INTEGER;
 > >> ABJ> DECLARE VARIABLE SALDOANTERIOR NUMERIC(15,2) = 0;
 > >> ABJ> DECLARE VARIABLE NROLANBCO INTEGER;
 > >> ABJ> DECLARE VARIABLE TIPOLANCTO VARCHAR(1);
 > >> ABJ> DECLARE VARIABLE VALORLANCTO NUMERIC(15,2);
 > >> ABJ> BEGIN
 > >> ABJ>    SELECT MAX(NroLanBco)
 > >> ABJ>    FROM MovBancario
 > >> ABJ>    WHERE CodConta = :CodConta AND DataLancto < :DataLancto
 > >> ABJ>    INTO :UltimoLancto;
 > >>
 > >> ABJ>    SELECT Saldo
 > >> ABJ>    FROM MovBancario
 > >> ABJ>    WHERE NroLanBco = :UltimoLancto
 > >> ABJ>    INTO :SaldoAnterior;
 > >>
 > >> ABJ>    FOR SELECT NroLanBco, TipoLancto, ValorLancto
 > >> ABJ>        FROM MovBancario
 > >> ABJ>        WHERE CodConta = :CodConta AND DataLancto >= :DataLancto
 > >> ABJ>        ORDER BY DataLancto, NroLanBco
 > >> ABJ>        INTO :NroLanBco, :TipoLancto, :ValorLancto
 > >> ABJ>    DO
 > >> ABJ>    BEGIN
 > >> ABJ>      IF (:TipoLancto = 'C') THEN BEGIN
 > >> ABJ>        SaldoAnterior = :SaldoAnterior + :ValorLancto;
 > >> ABJ>      END ELSE BEGIN
 > >> ABJ>        SaldoAnterior = :SaldoAnterior - :ValorLancto;
 > >> ABJ>      END
 > >> ABJ>      UPDATE MovBancario
 > >> ABJ>      SET Saldo = :SaldoAnterior
 > >> ABJ>      WHERE NroLanBco = :NroLanBco;
 > >> ABJ>    END
 > >> ABJ> END
 > >>
 > >> ABJ> *** Trigger ***
 > >> ABJ> ==============ABJ> CREATE TRIGGER T_MOVBANCARIO_AI FOR
 > MOVBANCARIO
 > >> ABJ> ACTIVE AFTER INSERT OR UPDATE POSITION 0
 > >> ABJ> AS
 > >> ABJ> BEGIN
 > >> ABJ>   EXECUTE PROCEDURE AtualizarSaldos(New.DataLancto,
 > New.CodConta);>
 > > ABJ> END
 > >>
 > >>
 > >>
 > >> ______________________________________________
 > >> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
 > >> Para editar sua configuração na lista, use o endereço
 > >> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
 > >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
 > >>
 > >
 > >
 > > ______________________________________________
 > > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
 > > Para editar sua configuração na lista, use o endereço
 > > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
 > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
 > >
 > >
 > >
 > > ______________________________________________
 > > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
 > > Para editar sua configuração na lista, use o endereço
 > > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
 > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
 > >
 >
 >
 > ______________________________________________
 > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
 > Para editar sua configuração na lista, use o endereço
 > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
 > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
 >
 >
 >
 > ______________________________________________
 > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
 > Para editar sua configuração na lista, use o endereço
 > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
 > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
 >

-- 
---------------------
Jony Ridel
Mais Informática
Feira de Santana - BA
=====================





Mais detalhes sobre a lista de discussão lista