Fórum Concorrência de Dados. Como resolver isso? #322661
01/06/2006
0
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
Curtir tópico
+ 0Posts
01/06/2006
Thomaz_prg
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
01/06/2006
Seu_madruga
SQLConnection <- SQLDataSet <- DataSetProvider <- ClientDataSet
Gostei + 0
03/06/2006
Rodolfo.pirolo
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
Clique aqui para fazer login e interagir na Comunidade :)