CONCORRENCIA DE DADOS

AMELORP 16/11/2009 17:42:53
#327888
Tenho um grid com o resultado de uma consulta sql pra que o usuario possa alterar alguns desses dados...estou usando o metodo ADO com os parametros adOpenStatic, adLockPessimistic...e toda vida que outro usuario abre a mesma consulta na rede o sistema trava e depois apresenta um erro e fecha...como eu faço pra tratar esse erro e evitar que o sistema trave ou mesmo fique lento no momento em que outro usuário tentar modificar algum dado que outro usuário esteja modificando na rede...??? se alguem puder me dar o caminho das pedras ou ate mesmo algum exemplo nesse sentido...agradeceria muito...atré mais....
MARCOSLING 16/11/2009 19:29:10
#327896
vê se isso ajuda:

http://www.macoratti.net/09/03/vb6_amu.htm
DANIKULL 16/11/2009 19:54:11
#327897
AMELORP, boa noite.

Eu resolvi este problema e mais outros dois relacionados criando duas tabela a mais no Banco chamando as de Verificadores, ou seja, quando eu abro uma tabela qualquer para inclusão de dados ele gera o código automaticamente independente se mais algum outro usuario está incluindo registro nesta mesama tabela, o que se no modo convencional pode gerar id duplicados gerando erroso. Se for aberto para edição ou exclusão coloco o id do registro na tabela marco um campo relacionado dizendo que este registro esta aberto em modo de edição ou exclusão, assim nem um outro usuario não poder nem visualizar este registro enquanto a edição não for concluida, entendeu???
MARCELO.TREZE 16/11/2009 22:59:29
#327901
Resposta escolhida
Acho que a esta altura você já deve estar escolado sobre como funciona o bloqueio de registros com DAO . Criando um aplicação Multiusuário com ADO. Neste dica apenas vamos por os pingos nos is...

Para fazer sua aplicação Visual Basic com acesso a banco de dados via DAO ou ADO funcionar em um ambiente multiusuário é só compartilhar o banco de dados. Até aqui tudo bem...

O grande problema e a grande maioria das dúvidas ocorrem com relação a que atitude tomar quando dois usuários acessam o mesmo registro para fazer alterações , ou um o que fazer quando um usuário tentar acessar um registro que acabou de se excluído ? Tudo bem você deve travar o registro/página , mas como a ADO funciona neste quesito e o que ela trouxe de novo ???

Ao utilizar a DAO , todos já devem saber , o travamento era feito exclusivamente por páginas , i.e, você não conseguia travar um registro , trava uma página inteira com um determinado número de registros.

Com o advento da ADO e a partir da versão 4.0 do Jet Engine do Access você pode travar um registro do banco de dados. Traçamos assim a hierarquia do travamento :

Travamento do Banco dados
Travamento da tabela
Travamento de registros
[Ô]Mas o que eu devo fazer para que ao abrir um banco de dados com ADO o travamento de registros seja habilitado ?[Ô] . Boa Pergunta ! A resposta é - [Ô]Absolutamente Nada ![Ô].

Isto mesmo , você não precisa fazer nada , pois o este é o estado padrão para um banco de dados Access aberto via ADO. Você pode explicitar isto usando o parâmetro : Database Locking Mode = 1. Assim:

conexao = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & SeuArquivo & [Ô];Jet OLEDB;Database Locking Mode=1

O travamento por página ainda é utilizado quando você executa comandos SQL para Excluir ( Delete ) , Atualizar ( Update ) dentre outros e para atualizações em campos do tipo MEMORANDO e em campos INDEXADOS.

No demais para tratar os conflitos de acesso simultâneo aos registros da tabela você apenas deve escrever uma rotina para travar o registro e verificar se ocorre um erro ; se o erro ocorrer você deve interceptá-lo e responder conforme o tipo de erro.

Font: Macorrati

e este link também pode te ajudar

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q190727
AMELORP 17/11/2009 09:31:51
#327916
Citação:

DANIKULL escreveu:
AMELORP, boa noite.

Eu resolvi este problema e mais outros dois relacionados criando duas tabela a mais no Banco chamando as de Verificadores, ou seja, quando eu abro uma tabela qualquer para inclusão de dados ele gera o código automaticamente independente se mais algum outro usuario está incluindo registro nesta mesama tabela, o que se no modo convencional pode gerar id duplicados gerando erroso. Se for aberto para edição ou exclusão coloco o id do registro na tabela marco um campo relacionado dizendo que este registro esta aberto em modo de edição ou exclusão, assim nem um outro usuario não poder nem visualizar este registro enquanto a edição não for concluida, entendeu???



ENTENDI...vou tentar montar uma estrutura como a sua...é bem interessante...obrigado!
AMELORP 17/11/2009 09:33:06
#327917
Citação:

MARCELO-TREZE escreveu:
Acho que a esta altura você já deve estar escolado sobre como funciona o bloqueio de registros com DAO . Criando um aplicação Multiusuário com ADO. Neste dica apenas vamos por os pingos nos is...

Para fazer sua aplicação Visual Basic com acesso a banco de dados via DAO ou ADO funcionar em um ambiente multiusuário é só compartilhar o banco de dados. Até aqui tudo bem...

O grande problema e a grande maioria das dúvidas ocorrem com relação a que atitude tomar quando dois usuários acessam o mesmo registro para fazer alterações , ou um o que fazer quando um usuário tentar acessar um registro que acabou de se excluído ? Tudo bem você deve travar o registro/página , mas como a ADO funciona neste quesito e o que ela trouxe de novo ???

Ao utilizar a DAO , todos já devem saber , o travamento era feito exclusivamente por páginas , i.e, você não conseguia travar um registro , trava uma página inteira com um determinado número de registros.

Com o advento da ADO e a partir da versão 4.0 do Jet Engine do Access você pode travar um registro do banco de dados. Traçamos assim a hierarquia do travamento :

Travamento do Banco dados
Travamento da tabela
Travamento de registros
[Ô]Mas o que eu devo fazer para que ao abrir um banco de dados com ADO o travamento de registros seja habilitado ?[Ô] . Boa Pergunta ! A resposta é - [Ô]Absolutamente Nada ![Ô].

Isto mesmo , você não precisa fazer nada , pois o este é o estado padrão para um banco de dados Access aberto via ADO. Você pode explicitar isto usando o parâmetro : Database Locking Mode = 1. Assim:

conexao = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & SeuArquivo & [Ô];Jet OLEDB;Database Locking Mode=1

O travamento por página ainda é utilizado quando você executa comandos SQL para Excluir ( Delete ) , Atualizar ( Update ) dentre outros e para atualizações em campos do tipo MEMORANDO e em campos INDEXADOS.

No demais para tratar os conflitos de acesso simultâneo aos registros da tabela você apenas deve escrever uma rotina para travar o registro e verificar se ocorre um erro ; se o erro ocorrer você deve interceptá-lo e responder conforme o tipo de erro.

Font: Macorrati

e este link também pode te ajudar

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q190727



OK Obrigado pela ajuda...vou ler o artigo...realmente o meu maior problema é quanto à tratar os erros, interceptar antes que venham os travamentos....obrigado!
Tópico encerrado , respostas não são mais permitidas