Fórum Como gravar dados de micros diferentes. #178367

29/08/2003

0

Estou com um problema ao gravar dados do meu cliente no servidor.

Aparece esse erro:

Deadlock Update conflicts with concurrent update


Meu sistema está funcionando assim:

Estou usando Interbase como gerenciador de dados.

O Programa server está aberto e conectado ao banco de dados por:
Ibdatabase-Ibtransaction-Ibdataset (tudo ativado)
Tem um dbgrid mostrando os dados da tabela CONECTADOS.

O Programa client acessa o banco de dados no servidor por:
Ibdatabase-Ibtransaction-Ibdataset e o código que estou usando para gravar o registro é o seguinte:
 
with frmdmib do
   begin
            ibdataset2.close;
            ibdataset2.parambyname(´nome´).asstring:=´Micro02.mshome.net´;
            ibdataset2.open;
            ibdataset2.Edit;
            ibdataset2.FieldByName(´usuario´).AsString := edit1.Text;
            ibdataset2.Post;
            ibdataset2.Transaction.CommitRetaining;
     end;


Os dados são gravados normalmente.
Mas logo em seguida preciso gravar uma informação em determinado campo na mesma tabela, só que agora a informação deve ser gravado pelo server, quando o server tenta gravar da esse erro.

Deadlock Update conflicts with concurrent update


Por que ocorre esse conflito?
Já que as informações não estão sendo gravadas ao mesmo tempo.
Não consigo gravar informações no mesmo banco de micros diferentes?


Latrodectrus

Latrodectrus

Responder

Posts

18/12/2003

Kiaratto

Essa mensagem já apareceu pra mim algumas vezes, mas não é frequente.

quando apareceu, fui no console do interbase e digitei um commit e depois tudo bem.

Essa mensagem ocorre qdo vc grava dados numa tabela e antes desses dados serem gravados definitivamente com o commit vc tenta alterar amesma tabela.


Responder

Gostei + 0

09/02/2006

Mordred

Exatamente. O deadlock acontece quando uma aplicação tenta alterar dados que já estão sendo usados por outra aplicação. Desde o momento em que a outra aplicação usa StartTransaction até o momento do Commit/CommitRetaining, o(s) registro(s) fica(m) bloqueado(s).
A solução é fazer a outra aplicação dar Commit/CommitRetaining e liberar o registro.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar