Bloquear Registro que esta sendo Editado

08/01/2005

0

Olá amigos do Forum, tudo BLZ.
Eu uso o Delphi-7 com o Firebird-7.0, com o DBExpress, SQLConnection, DataSetProvider, ClientDataSet, e gostoria de
saber se tem jeito de quando um usuario ja estiver acessando um registro e um outro usuario quizer acessar o mesmo registro dar uma mensagem (Registro em Atualização) por Exemplo.
Procurei no Forum e nao achei com estes componentes que eu uso.
Desde Ja Obrigado pela Atenção.

Isaias


Isaiasn

Isaiasn

Responder

Post mais votado

08/01/2005

Olá isaiasn eu tive o mesmo problema q vc esta tendo tmb não encontrei nenhuma propriedade que resolvesse o problema entao fiz assim:

Crieu uma tabela no banco de dados onde ela armazenaria todos os registros que estivesse sendo usado.

Ex.: Vamos supor que você tem um banco de dados que tenha tabelas de nome : ´CLIENTES,PRODUTOS´ e mais uma tabela de nome EM_ALTERACAO nesa tabela vamos fazer o controle dos registros.

Na tabela EM_ALTERAÇÃO vamos colocar os campos de nome COD_CLIENTE e COD_PRODUTOS, feito isso você vai colocar no programa as seguintes rotinas ao editar a tabela CLIENTES você faz uma rotina para que o programa inclua na tabela EM_ALTERACAO a chave primaria desse registro que esta sendo alterado no campo COD_CLIENTES e quando outro usuario tentar editar esse mesmo registro uma outra rotina para que ele tente localizar a chave primaria no campo COD_CLIENTE se ele achar ele vai dar a mensagem para o usuario se não achar ele inclui esse registro no campo COD_CLIENTE, agora quando o usuario salvar as alterações no cadastro do cliente o programa tem que deletar a chave primaria desse registro que esta salva na tabela EM_ALTERACAO. com isso eu Resolvi o problema e de quebra ainda consegui fazer uma tela de monitoração de cadastros sendo alterados. Bom é isso ai espero ter ajudado.

Teo :D


Teo

Teo
Responder

Mais Posts

08/01/2005

Romulocpd

Olá

O problema disso é que como esta tabela é atualizada após o registro ser finalizado, se o sistema der um pau o registro irá ficar bloqueado ´para sempre´.... deverá haver uma rotina para liberação de registros.

Do restante, dependendo do banco, vc pode fazer um SELECT ... FOR UPDATE pra bloquear os registros deste select porém em SQL Server ainda não consegui fazer este recurso.


Responder

08/01/2005

Teo

Ha sim para esse problema de dar pau no programa eu ja dei uma solução não lembrei de comenta-lo.

Fiz assim : criei mais um campo para armazenar a hora e data que foi gravado o registro se por acaso houvesse uma falta de energia ou o sistema travasse emquanto o usuario editar o registro ele varifica o dia e hora que ele foi gravado, no meu caso eu pedi pra verificar se ja tem mais de 20 minutos que esse registro foi gravado então ele excluiria esse registro da tabela EM_ALTERAÇÃO e permitiria a gravação alem disso na tela de monitoração tem uma opção para desbloquear os registros que supostamente estariam sendo alterados. Bom é isso ai...


Teo :D


Responder

09/01/2005

Dopi

saber se tem jeito de quando um usuario ja estiver acessando um registro e um outro usuario quizer acessar o mesmo registro dar uma mensagem (Registro em Atualização) por Exemplo. Isaias


O travamento Pessimista (bloquear o registro na alteração) não deve ser usado em aplicaçoes C/S... Imagine um sistema de 200 estações... quantos registros ficariam bloqueados ? o sistema praticamente pararia... Isso é muito comum em sistemas de ´Tabela´ Paradox, DBF, mas nunca deve ser usado em C/S

Em C/S com a dbExpress vc pode tratar os conflitos de atualização no OnReconcileError do ClientDataSet, ou seja, na hora de gravar o seu registro a dbExpress verifica se alguem já alterou ele antes... Se isso ocorreu, vc pode decidir qual ação tomar: Sobrepor as suas alteraçoes, Efetuar um ´Merge´ das alteraçoes, ignorar as suas alterações... etc...

No Help do Delphi há um extenso material sobre como tratar conflitos de atuaização... Procure por: TClientDataSet.OnReconcileError


Responder

10/01/2005

Dorivansousa

vc pode simplismente dar um edt e um post no registro q vc quer bloqueiar e nao fechar a transacao da tabela q ele vai ficar bloqueado, e caso haja queda de energia o proprio firebird desbloqueia por que nao vai ta mais em uso...


Responder

14/11/2017

Eduardo Silva

E como Faço isso Dorivansousa?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar