Ruyfreis Postado Maio 4, 2006 Denunciar Share Postado Maio 4, 2006 Estamos desenvolvendo um programa de Cadastro de clientes, num ambiente de rede.Como fazer para que enquanto em um terminal estiver sendo tratado o registro (A),para qualquer operação que não seja leitura, outro terminal somente tenha acesso aomesmo (registro A), somente para leitura. Estamos utilizando o BD Firebird e Delphi7.Aguardamos com urgencia. Grato. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ruyfreis Postado Maio 5, 2006 Autor Denunciar Share Postado Maio 5, 2006 Por favor...eu realmete estou precisando disso ...me ajudem... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 8, 2006 Denunciar Share Postado Maio 8, 2006 Colega, também passei por isso e a única solução que encontrei foi uma dica de uma empresa de software que visitava:1-Crie um campo Lock (inteiro) na tabela que você quiser fazer o lock.2-Quando você acessar o registro, leia o Lock.3-Na hora de atualizar, some 1 e regrave o Lock com a cláusula Where Lock = Lock_Lido.4-Veja se a propriedade RowsAffected da Query retorna 0; se retornar é porque outro terminal atualizou o mesmo registro.Com isto, o lock se dá na hora da atualização e não na leitura. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 9, 2006 Denunciar Share Postado Maio 9, 2006 Ruyfreis dê uma olhada neste artigo (link).Eu utilizo a opção disponível no Firebird 1.5, mensionada no artigo (Select ... From Table [Where ...] [Order By ...] For Update With Lock) e funciona a contento, só tive que fazer uns testes para verificar qual o nível de isolação da transação que deveria utilizar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 9, 2006 Denunciar Share Postado Maio 9, 2006 Para ser sincero, num ambiente de rede, a opção Update/Lock pode ser uma catástrofe.Imagine que um terminal dê o Update/Lock e depois a pessoa saia por uma hora sem dar o Commit.Isso sem falar em dois terminais darem o Update/Lock num mesmo cursor de dados e provocar um deadlock(que é muito comum nesse tipo de travamento de registros).Já ví diversas discussões sobre esse assunto e na minha opinião, prefiro liberar os registros para todos e na hora de atualizar, somente o primeiro atualiza, forçando os outros a voltar a ler o registro já atualizado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 10, 2006 Denunciar Share Postado Maio 10, 2006 Imagine que um terminal dê o Update/Lock e depois a pessoa saia por uma hora sem dar o Commit....Isso sem falar em dois terminais darem o Update/Lock num mesmo cursor de dados e provocar um deadlockÉ verdade, são possibilidades. Mas foi uma solução simplista para um sistema pequeno, com poucos usuários e que, para o tipo de aplicação que é, tem funcionado bem.Mesmo assim, vale apena ler o artigo. Ele não trata apenas da opção que citei (um pouco mais de conhecimento nunca é demais). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 12, 2006 Denunciar Share Postado Maio 12, 2006 É verdade, são possibilidades. Mas foi uma solução simplista para um sistema pequeno, com poucos usuários e que, para o tipo de aplicação que é, tem funcionado bem.Mesmo assim, vale apena ler o artigo. Ele não trata apenas da opção que citei (um pouco mais de conhecimento nunca é demais).É sempre bom adquirir conhecimento, mas as vezes os conhecimentos teóricos não andam muito bem na prática e a solução dada foi o que realmente ocorre em ambientes de rede. Como disse, já participei de várias discussões sobre lock de registros e a grande maioria optou pela solução dada. Para um sistema pequeno, onde o Banco de Dados não possui uma grande quantidade de tabelas, as chances de ocorrerem deadlocks são ainda maiores; pois muito facilmente dois terminais acessarão o mesmo cursor de dados com Update/Lock. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ruyfreis Postado Maio 13, 2006 Autor Denunciar Share Postado Maio 13, 2006 valeu pelas resposta....Tipo no meu caso é um banco de dados grande que pode ser assessado por muitas pessoas alem de ter muitas tabelas.....É um programa para a empresa que eu trabalho....valeu Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ruyfreis
Estamos desenvolvendo um programa de Cadastro de clientes, num ambiente de rede.
Como fazer para que enquanto em um terminal estiver sendo tratado o registro (A),
para qualquer operação que não seja leitura, outro terminal somente tenha acesso ao
mesmo (registro A), somente para leitura. Estamos utilizando o BD Firebird e Delphi7.
Aguardamos com urgencia.
Grato.
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.