Fala Fernando!!!!

É exatamente isso que eu tô tentando fazer, mas eu tô obtendo o número
da venda ao final da mesma, porém todo o processo é feito na
StoredProcedure.  Eu incremento a venda e em seguida dou um select
para obter o número.  Não há nehum comando travando o processo, mas eu
acho que isso internamente o FireBird tá fazendo isso.  

Vou tentar fazer de outra maneira...

Valeu!!!!
Giovanny Carvalho

--- Em delphi-br@yahoogrupos.com.br, "Fernando Nappe"
<[EMAIL PROTECTED]> escreveu
>
> Fala Giovanny, blz?
> 
> Basicamente, um DeadLock é uma situação onde dois processos ficam
aguardando
> um pelo término do outro.
> 
> Por exemplo:
> - O processo 1 trava a tabela A;
> - O processo 2 trava a tabela B;
> 
> Imaginemos que o processo 1 precise acessar a tabela B, mas ela está
> bloqueada pelo processo 2 e, o processo 2 precisa acessar a tabela
A, que
> por sua vez foi bloqueada pelo processo 1.
> 
> Como vê essa operação nunca terá fim, pois os processo se travam
mutuamente,
> nessa caso, o banco lança o DeadLock para destravar toda a coisa.
> 
> Portanto, descobrir a causa do DeadLock exige um exame mais
abrangente da
> sua rotina, inclusive, aho que vc deve repensar a forma de obter o
seu nro.
> de venda.
> 
> Eu criaria uma tabela, gravaria nela um sequencial e atualizaria ela
toda
> vez que uma nova venda fosse aberta. Dessa forma, enquanto um
processo está
> atualizando a tabela, o outro fica no aguardo, ou seja, geramos
> concorrência, mas em fila.
> 
> QQ coisa estamos aí.
> 
> 
> 
> Em 11/04/07, Giovanny Carvalho <[EMAIL PROTECTED]> escreveu:
> >
> >   PUBLICIDADE
> >
> >
> > Boa noite a todos...
> > Na minha aplicação está acorrendo um erro de deadlock. A situação é
> > a seguinte:
> >
> > Eu abro a venda com uma numeração temporária...
> > Quando o usuário vai fechar a venda, eu "pego" no BD o número
> > definitivo da venda, usando uma StoredProcedure, porém quando as
> > venda ocorrem simultaneamente, ocorre o erro.
> >
> > Segue abaixo a StoredProc...
> >
> > CREATE PROCEDURE SP_CONTADORES_VALOR (
> > P_NOMECONTADOR VARCHAR(15))
> > RETURNS (
> > P_VALORCONTADOR INTEGER)
> > AS
> > begin
> > update contadores
> > SET valorcontador = valorcontador +1
> > WHERE nomecontador = :P_NOMECONTADOR;
> >
> > SELECT C.valorcontador
> > FROM CONTADORES c
> > WHERE C.nomecontador = :P_NOMECONTADOR
> > INTO :P_VALORCONTADOR;
> >
> > suspend;
> > end
> >
> > No delphi 6 eu chamo a StoredProc da seguinte maneira...
> >
> > function Contador(VTipo : String) : integer;
> > begin
> > With DM.SP_Contadores_Valor do
> > begin
> > Active := False;
> > ParamByName('P_Nomecontador').AsString := VTipo;
> > Prepare;
> > ExecProc;
> > end;
> > DM.IBTransaction.Commit;
> >
> > Result := DM.SP_Contadores_Valor.paramByname
> > ('P_VALORCONTADOR').Value;
> > end;
> >
> > Alguém pode me ajudar?
> > Podem até me sugerir outra alternativa.
> >
> > Obrigado,
> > Giovanny Carvalho
> >
> >  
> >
> 
> 
> 
> -- 
> Fernando Nappe
> Analistas de Sistemas
> http://nappe.blogspot.com
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a