[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