|
Referenciando Objetos em Access: a Notação ! e . e (“ “) |
Que operador é esse (!)?Autor: OsmarJr |
Forms!FormPrincipal!CaixaDeTexto Forms!FormPrincipal.CaixaDeTexto Forms.FormPrincipal.CaixaDeTexto Forms("FormPrincipal")("CaixaDeTexto") Forms("FormPrincipal").CaixaDeTexto Forms("FormPrincipal").Controls("CaixaDeTexto") Todas as expressões acima são válidas e funcionam. Não importando qual a notação usada, qualquer desenvolvedor que leia seu código deve ser capaz de saber o que está acontecendo. Então, qual usar? Particularmente, prefiro uma das três últimas por algumas razões: De acordo com o Access 2000 Developer’s Handbook, a notação ! é traduzida, nos bastidores, para a notação (“ “). A única coisa que a notação ! economiza é um pouco de digitação, mas essa economia pode se virar contra você com perda de desempenho cada vez que o código é executado. Eu não gosto nem um pouco de perda de desempenho. Em segundo lugar, ao digitar código em um módulo, a utilização da notação ! não permite a utilização das vantagens do Intellisense (aquelas dicas...) do Editor do Visual Basic. Os três últimos exemplos, que não usam a notação !, podem usar o Intellisense até certo ponto. O Intellisense economiza um bocado de digitação e funciona, também, como um verificador de erros quando entramos com uma expressão como Me.CaixadeTexto.AfterUpdate. A terceira expressão é, provavelmente, a mas confusa para ser usada na digitação em um módulo já que usa o Intellisense mas não para dar vantagem. Teste e veja o que acontece. Por último, suponhamos que estamos trabalhando com o FormPrincipal e temos nele um monte de controles com nomes semelhantes. Gostaríamos de fazer com que o valor contido em txt1, txt2,..., txt6 fique como “Não informado”. Como fazer isso? Como é um número pequeno de campos, poderíamos fazer: Forms("FormPrincipal").txt1 = "Não informado" Forms("FormPrincipal").txt2 = "Não informado" ... Forms("FormPrincipal").txt6 = "Não informado" Aí notamos que estamos fazendo algo similar nas seis instâncias e que isso pode ser feito usando um laço: Dim intX As Integer For intX = 1 To 6 Forms("frmMainForm")("txt" & intX) = "Não informado" Next intX Tempos atrás ajudei um colega que tinha quatro situações dessas, cada uma com 48 campos... Este tipo de laço não pode ser utilizado numa notação !. Existe alguma razão para usar a notação !? Existem dois casos relacionados em que a notação (“ “) não funciona e precisamos usar a notação !: quando usamos parâmetros em uma consulta, como em Forms!FormPrincipal!CaixaDeTexto e quando nos referimos a objetos em declarações SQL. Os dois casos são, na verdade um só, já que todas as consultas são traduzidas em declarações SQL antes de serem executadas. Note-se que, como dito acima, Forms.FormPrincipal.CaixaDeTexto também funciona e é preferível pois é mais fácil tecla . que !. OS: O melhor artigo que encontrei na Microsoft sobre este tópico foi Syntax for Using Object Variables in Expressions. O tópico quase não é mencionado na ajuda online do Access.
|