Esse artigo faz parte da revista Clube Delphi edição 16. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

 

TclienteDataset – Parte III

Tratanto erros no ambiente Cliente-Servidor

 

Um aspecto que devemos observar, e que é muito importante em todos os projetos que envolvam uma base de dados é a confiabilidade desses dados, ou seja. Até que ponto as opeações executadas na base são seguras e perfeitas.

Para garantir esse ponto, nós, desenvolvedores do mundo Ttable, observamos um cuidado básico que garante nossa sobrevivência: verificar se o registro que vamos editar já não esta sendo editado por outro usuário. Este cuidado existe em toda aplicação que algum dia venha a escrever alguma coisa em uma base de dados.. tudo perfeito, não fosse um pequeno detalhe: não funciona mais! Antes que o desespero tome conta, saiba que outros desenvolvedores já passaram por isso e sobreviveram. Como? Utilizando o conceito Client/Server.

Quando trabalhamos com Ttable, temos a base na mão, é fácil contorlar um registro “setando” seu estado para “em edição”. Pronto, somos os senhores da situação; quando trabalhamos com TclientDataset, e por tabela, com a tecnologia Client/Servidor, não sabemos nem onde está a base e, o que é pior, o mundo pode acabar entre o momento em que o usuário iniciou uma edição até o instante que ele resolve que gostaria gravar o seu trabalho. Sendo assim, fundamentalmente o nosso problema é: não existe como bloquear o registro!

Em Client/Server a base semrpe está disponível. Assim não podemos mais contar com a sorte, achando que ninguém vai alterar alguma informção enquanto estivermos trabalhando dados de um registro. As situações possíveis são:

  1. o registro não sofreu mudanças desde o momento em que foi feita a última leitura destes dados. Este é o melhor caso, gravamos as alterações feitas e pronto!
  2. o registro que está sendo editado sofreu alguma alteração desde o momento que foi feita a última leitura dos dados. Complicado para dizer o mínimo... temos que dicidir o que fazer: abortar, marge, gravar sobescrevendo, enfim são muitas as opções.
  3. o registro não existe mais, foi apagado por outro usuário. Podemos abortar (já que não existe mais um regristro para ser alterado) ou gravar tudo.

 

A isto damos o irônico nome de reconciliação. Bem, acho que não poderia ser diferente

 

A reconciliação

Deixando à parte qualquer vocação para casamenteiro, temos primeiramente que esmiuçar o que o Handle do evento OnReconcileError nos oferece...

 

 

Onde:

·         Dataset é o TclienteDataset onde ocorreu o erro;

·         E é o ponteiro para um objeto do tipo EreconcileError;

·         UpdateKind, indica o tipo de operação que causou o erro;

·         Action, informa ao Delphi qual ação deverá ser aplicada para a condição de erro.

 

...
Quer ler esse conteúdo completo? Tenha acesso completo