Data Macro de After Update

Ao ajudar um colega num grupo de discussão na internet, deparei-me com este vídeo que ensina a criar uma macro de dados (Data Macro) no Access 2010 para editar o valor de um campo conforme o que for digitado em outro (ex.: se digitar Status = Concluído, alterar a Porcentagem de Conclusão para 100%).

http://office.microsoft.com/pt-br/video-criar-uma-macro-de-dados-VA100305331.aspx

 

Ocorre que este vídeo, apesar de estar publicado no site da Microsoft, não funciona como esperado. Ao contrário do que a própria imagem mostra, se seguirmos os passos descritos na apresentação, o resultado será o seguinte erro na macro: “EditRecord failed because the default alias represents a record which is read only.”.

O que está errado no vídeo é que para fazer a edição de um campo conforme o valor de outro, o melhor evento não é o After Update (após atualizar), mas sim o Before Change (antes de alterar), conforme a imagem seguinte. Desta forma funciona corretamente:

 

Por que o After Update não deve ser utilizado? Ele não deve ser utilizado neste caso porque queremos editar a própria linha que está disparando o evento (ou seja, a própria linha que acabou de ser atualizada), e isto faria a linha ser editada de novo e disparar novamente o evento, e assim sucessivamente. Seria um loop infinito, mas que no caso das Data Macros ficaria limitado a 10 execuções, que é o máximo definido pelo produto.

A pergunta que você deve estar se fazendo (e também é a mesma que me faço) é “se o vídeo tem a imagem da macro funcionando, por que ela não funciona?”. Muito provavelmente este vídeo tenha sido feito em cima da versão beta do Access. Acontece que na última hora, já aos 46 do segundo tempo, a Microsoft fez uma alteração justamente nesta funcionalidade, para evitar o comportamento descrito no parágrafo anterior.

Até existe um jeito de usar o evento After Update para esta finalidade (conforme a figura seguinte), mas deveria ser em conjunto com a função Updated, evitando assim a armadilha dos disparos sucessivos e, principalmente, mandando localizar o registro na tabela. A função Updated nos permite saber se determinado campo foi editado.

 

Mesmo funcionando, esta abordagem não é prática, pois a macro precisaria ser replicada também para o After Insert, já que o After Update será disparado apenas pelos registros já existentes. Ou seja, para este cenário, o mais correto é utilizar o Before Change mesmo.

Esse post foi publicado em Access e marcado . Guardar link permanente.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s