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] >