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