Concorrência de Dados. Como resolver isso?

Delphi

01/06/2006

Fala Pessoal

Estou com um problema na minha aplicação. Quando dois usuários estão alterando o mesmo registro quando o primeiro grava, no segundo quando for gravar da um erro:

´Record not found or changed by another user.´

Até aí tudo certo, afinal o usuário 1 realmente alterou o registro antes do usuário 2. Daí vem 2 problemas:

1) Se o usuário 1 faz uma pesquisa, e o usuário 2 tbém faz a pesquisa mas altera o regsitro 1 a grava, o mesmo registro no usuário 1 está desatualizado pois ele fez a pesquisa antes do usuário 2 alterar. Como eu faço para reconhecer que um registro está desatualizado e precisa ser reselecionado?

2) Para evitar o problema de concorrência, preciso de uma forma de travar o registro se um usuário já estiver com este registro em modo de alteração. Como eu sei que um determinado registro está sendo editado?

Agradeço toda a ajuda
Valew


Seu_madruga

Seu_madruga

Curtidas 0

Respostas

Thomaz_prg

Thomaz_prg

01/06/2006

Pelo jeito você está usando ADO... mas com qual Banco?
Esse bloqueio é feito no proprio banco de dados (chamado travamento pessimista), pois não teria como a aplicação saber o que está e o que não está em edição. Diga qual banco de dados tá usando (Access??), quais componentes de acesso e qual versão do Delphi para que alguém possa ajudá-lo um pouco mais.

No Firebird basta que se acrescente [b:80b49dfc72]WITH LOCK[/b:80b49dfc72] no final do select que todos os registros selecionados seriam bloqueados.


GOSTEI 0
Seu_madruga

Seu_madruga

01/06/2006

Estou usando Banco de Dados Firebird e DBExpress
SQLConnection <- SQLDataSet <- DataSetProvider <- ClientDataSet


GOSTEI 0
Rodolfo.pirolo

Rodolfo.pirolo

01/06/2006

Seu_Madruga,

Para este fim criei uma tabela para controlar as alterações efetuadas.

Antes de permitir a alteração verifico se este registro não esta na tabela de controle, se estiver não permito a edição do mesmo.

Funciona bem, mas dá um pouco de trabalho.

Espero ter ajudado.

Abraços

Rodolfo


GOSTEI 0
POSTAR