quarta-feira, março 21, 2007

TADOQuery trabalhando com dados em cache

Esse é um recurso do TADOQuery pouco conhecido, mas bastante útil. Assim como já se fazia nos tempos do TQuery + TUpdateSQL, onde os dados ficavam no cache local é só eram enviados para o banco através do método ApplyUpdates, o TADOQuery também pode manter os dados localmente e só enviar os dados ao banco no momento desejado e não após o método Post, comportamento que ele tem por padrão.

Isso é muito bom quando trabalhamos com tabelas do tipo mestre-detalhe, onde na maioria das vezes é necessário setar os campos relacionados antes do envio dos dados ao banco. O processo fica ainda mais tranquilo se for usado TADOConnection para controlar a transação, pois, você pode "commitar" os dados da tabela mestre e em seguida os da tabela detalhe e, caso ocorra algum erro, pode abortar, tratar o erro e tentar a gravação novamente sem que o usuário perca seu trabalho.

Bem, vamos ao que interessa! Para isso tudo funcionar primeiro altere a propriedade LockType do TADOQuery para ltBatchOptimistic, isso já fará com que os dados fiquem no cache local. Agora, para postar efetivamente os dados no banco, chame o método UpdateBatch(), que é semelhante ao método ApplyUpdates do TQuery. Fácil, não? :)

Como eu já disse, esse é um recurso muito útil, mas pouco conhecido. Espero que gostem da dica.
Até a próxima.

Um comentário:

Anônimo disse...

Muito bom Nappe, você é o melhor!