quinta-feira, 25 de outubro de 2012

Microsoft Access - Atualizar ou Requery?


Ao usar o Microsoft Access, os desenvolvedores inexperientes têm dificuldade em compreender a diferença entre Me.Refresh e Me.Requery. Então, vamos dar uma olhada nas diferenças entre os dois.

Aqui está a versão curta:

Ambos Atualizar e Requery salvar as alterações feitas no registro atual, no entanto ...

Me.Requery puxa todos os novos dados da tabela ou consulta subjacente, incluindo novas adições e exclusões;

Me.Refresh só atualiza os registros na forma atual, mas não vai mostrar novos registros ou excluídos.

Aqui está a versão longa:

Me.Requery força o conjunto de registros inteiro (dados subjacentes) para a forma de recarregar. Isto significa que todos os registros em sua forma atual irá recarregar. Sua posição atual será perdido, por isso, se você está sentado no registro 10 de 100, você vai encontrar-se para trás no primeiro registro. Me.Requery é essencialmente o mesmo que fechar e reabrir a forma. Quaisquer novos registros adicionados por outros usuários simultâneos estarão disponíveis. Da mesma forma que todos os registros foram apagados desaparecerá. Requery, essencialmente, "re-executa a consulta" que puxou os dados no formulário em primeiro lugar. Você também pode usar repetir a consulta para atualizar os dados em uma caixa de listagem ou caixa de combinação.

Me.Refresh salva o registro atual que você está trabalhando. Ele também irá recuperar quaisquer alterações (mas não inclusões ou exclusões) para todos os registros mostrados na forma atual. Quaisquer cálculos no formulário (campos não ligados) são recalculados. Atualizar não recarregar o conjunto de registros. Você não perde sua posição na forma (ficar no registro atual). Quaisquer novos registros adicionados por outros usuários não serão mostrados.

Se você deseja abrir uma outra forma ou, especialmente, de um relatório que contém os dados sobre a forma atual, você precisa emitir um comando Me.Refresh. Eu faço isso no meu tutorial quando criar a fatura com base na ordem atual. Você precisa de um Me.Refresh para salvar os dados para a tabela de modo que ele irá imprimir corretamente. Você não pode usar Requery porque ele vai colocá-lo de volta no registro de um conjunto de registros, o que pode não ser o que você quiser.

Há também dois outros comandos que se confundem com atualização e repetir a consulta a um lote: Repaint e Recalc.

O comando Me.Repaint simplesmente redesenha a forma atual e todos os seus controles na tela. Isto é especialmente útil quando você está executando um formulário com loops de eventos temporizadores e longo prazo e deseja forçar algo na tela (talvez um contador) para atualizar como o evento está sendo executado, para que o usuário não fica apenas sentado ali, olhando para nada aconteça. Repaint não afeta dados.

O comando Me.Recalc obriga todos os controles calculados sobre a forma de ser reavaliada. Por exemplo, se você está apenas mostrando Itens UnitCost * em uma caixa de texto, e não está atualizando, você poderia usar Me.Recalc para forçar a atualização. Eu nunca honestamente tive que usar Recalc antes. O acesso é muito bom sobre a recalcular automaticamente.

Em meus tutoriais, eu cubro o comando Refresh em um monte de lugares diferentes. Gostaria de começar por mostrar-lhe o comando de atualização de macro no Access 204. Vemos, então, como um comando VB no Access 302. Eu cubro Requery no Access 206, 306 e 307. A partir de agora, eu não tinha que usar Repaint Recalc ou em qualquer um dos meus tutoriais. Mais uma vez, eles são muito raros, mas eles estão disponíveis se você precisar deles....

Nenhum comentário:

Postar um comentário