USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  Visual Basic    (Banco de Dados)

Título da Dica:  Configurando o gerenciamento de Locks via ADO
Postada em 3/9/2003 por Ð@®l@n            
Conforme é visto no treinamento de técnicas de desenvolvimento com Visual Basic, o ADO automaticamente impede que 2 usuários alterem em conjunto a mesma informação no servidor.

O ADO faz isso colocando na query de atualização uma clausula where pesquisando pelos valor original de todos os campos atualizados. Assim sendo, se alguém alterou o campo anteriormente o update não encontra a informação e a atualização falha, controlando assim a concorrência de dados.

Veja um exemplo :

rsCustomers.CursorLocation = adUseClient
rsCustomers.Open "SELECT * FROM Customers", cnNWind, _
adOpenStatic, adLockOptimistic, adCmdText
rsCustomers.Fields("CompanyName").Value = "Acme"
rsCustomers.Update

Essa atualização fará com que o ADO envie para o banco a seguinte instrução :

UPDATE Customers SET CompanyName = 'Acme'
WHERE CustomerID = 'ALFKI' AND CompanyName = 'Alfreds Futterkiste'

Observe que o ADO inseriu na instrução a chave primária e uma pesquisa pelo valor original do campo alterado. Até aqui, nenhuma novidade, isso é visto em nosso treinamento.

Mas essa forma de trabalho precisa ser configurável. Em alguns sistemas eu posso tanto precisar de mais segurança como de menos segurança :

A) Eu posso desejar sempre sobrepor os dados, mantendo a última atualização. Executar a query acima, neste caso, vira perda de performance

B) Eu posso desejar não permitir nenhuma alteração simultânea, ao invés de fazer a query apenas pelos campos alterados fazer por todos, gerando um erro caso qualquer campo do registro tenha sido alterado por outro usuário antes desta gravação.

Para realizar esta configuração existe uma propriedade dinâmica do recordset chamada "Update Criteria". Veja os valores que ela pode receber :

adCriteriaKey = 0

Utiliza somente a chave primária. Neste caso os dados serão sempre sobrepostos

adCriteriaAllCols = 1

Utiliza todas as colunas no critério. Neste caso qualquer alteração nos campos do registro será identificada.

adCriteriaUpdCols = 2 (Default)

Utiliza apenas as colunas que forem atualizadas no critério. Se outra coluna houver sido atualizada, isso não será identificado, gerando uma mesclagem do registro.

adCriteriaTimeStamp = 3

Utiliza apenas a coluna de timestamp (recurso do sql server) para atualização. Tem o mesmo efeito que adCriteriaAllCols mas com uma performance muito melhor.

Veja a síntaxe :

rs.properties("update criteria").value=adcriteriakey

Mais informações em http://support.microsoft.com/default.aspx?scid=kb;EN-US;q190727
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página