... Pague apenas R$67,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Vídeo - Conheça a coleção TempVars

Sabemos que as variáveis de escopo público são visíveis a todos os procedimentos e funções dos formulários, relatórios e módulos globais, porém elas não podem ser aproveitadas diretamente nas consultas, nas macros e na lista de propriedades.  Os programadores mais experientes sabem que as funções de escopo público são lidas em consultas, nas macros e na lista de propriedades e então usam a manobra de passar o valor da variável para a função, conforme você pode observar na escrita abaixo:

Option Compare Database
 
'variável de escopo público			
Public idUsuario as long
 
----------------------------------------------------------------------------
Public Function fncIdUsuario() as long
   'função recebe valor da variável pública idUsuario
   fncIdUsuario = idUsuario
End Function

Veja na figura o uso da função, usada diretamente em uma consulta:

Função em cinsulta

 

E se houver a necessidade de alterar o valor da variável, através de uma macro ?

Podemos passar o valor através de um argumento da função.  Observe bem, a modificação na função que permite ler e alterar a variável idUsuario.

Option Compare Database
 
'variável de escopo público			
Public idUsuario as long
 
----------------------------------------------------------------------------
Public Function fncIdUsuario(Optional id As Long = 0) As Long
If id = 0 Then
    'função recebe o valor da variável idUsuario
    fncIdUsuario = idUsuario
Else
    'Variável recebe valor do argumento id
    idUsuario = id
End If
End Function

Veja na figura abaixo, a ação da macro ExecutarCodigo que chama pela função.   A variável idUsuario  receberá o valor 4 que está sendo passado pelo argumento da função.

Função em macro

 

Do Access 2007 em diante, a Microsoft criou uma coleção chamada TempVars  que possibilita criarmos até 255 variáveis públicas no seu interior.   Podem ser criadas através de macros, usando a ação DefinirVariávelTemporária, conforme você pode observar na figura abaixo.

Definir Variável

 

As variáveis também podem ser criadas pelo VBA, no interior de funções e/ou procedimentos .

...
TempVars.add "strPais","Brasil"
TempVars.add "strCliente",""
TempVars.add "booAtivo",true
...

Para definir diversas variáveis na inicialização do aplicativo, crie uma função pública, conforme exemplo abaixo e depois faça uma chamada da função através da macro AutoExec.

Public Function fncIniciaVariaveis()
    TempVars.Add "strPais", "Brasil"
    TempVars.Add "strCliente", "Avelino"
    TempVars.Add "booLiberado", true
    TempVars.Add "j", 0
    TempVars.add "k", ""
End Function

É possível remover uma variável ou todas de uma vez , usando os métodos Remove e RemoveAll

'removendo uma variável específica da coleção TempVars
TempVars.Remove "strPais"
'ou removendo todas as variáveis
TempVars.RemoveAll

Pela macro, temos as ações de remoção:

RemoverTodasVariáveisTemporárias
RemoverVariávelTemporária

Suponha que você necessite recriar todas as variáveis para retornar com os valores padrão.  Você poderá  realizar a seguinte sequência:

...
'removendo todas as variáveis
TempVars.RemoveAll
'recriar as variáveis, com seus valores padrão
call fncIniciaVariáveis
...

Sobre o Vídeo

Nesta vídeo-aula utilizo o aplicativo Maestro para demonstrar uma situação prática para o uso do TempVars, que é o de permitir que o usuário logado tenha acesso exclusivo aos seus clientes.
 


 

Faça o login aqui para ter acesso ao vídeo.


Sucesso!


 

 


17 comentários

Luís Augusto   03/03/2011 19:21:03

Boa noite Avelino, estou simplesmente admirado!
Sua didática esta cada vez melhor, é admirável o seu trabalho. O assunto é de grande valia para todos.
A cada exemplo que disponibiliza, temos a oportunidade de enriquecer o nosso conhecimento, gostaria de pedir que não desista das suas convicções e de prestar esta valiosa contribuição para todos os seus leitores e clientes.
Sou muito grato, pouquíssimas pessoas disponibilizam de seu conhecimento como o faz.
Muito obrigado.
Atenciosamente
Luís Augusto


Avelino Sampaio   07/03/2011 10:44:54

Luís,

obrigado pelo incentivo.

Sucesso

Márcio Melo - RJ   07/05/2011 22:27:51

Show de bola, adorei as várias maneiras de colocarmos uma variável global da id do usuário e como manipular nas consultas, mas uma vez aprendi muito e como sempre passo a utilizar, gosto da maneira que consegue testar tudo que faz, muitas das vezes não sei como fazer e nem como tirar as panes, conforme vi nessa sua aula nem sempre as montagem óbvias funcionam, conforme foi no caso da Seimed na expressão da consulta já passei por isso várias vezes e não sabia como resolver. Ótimo saber as várias formas de termos uma variável global e gosto de adotar tudo pelo próprio VBA.

Sou mais Brasil!

paulohenriquess2011@hotmail.com   21/07/2011 23:29:45

Boa noite Avelino!!!

Gostei muito dos seus videos, gostaria de saber como faço para conseguir adquirir estas videos aulas, aguardo contato, desde já obrigada.

Ícaro Ferraz   05/01/2012 21:10:49

Boa noite Avelino!

Apliquei o conteúdo desta video aula num aplicativo que estou desenvolvendo e funcionou corretamente mas tenho uma dúvida:

Todos os valores do Campo IdUsuario foram digitados por vc, mas quando faço o acesso direto ao aplicativo e faço a inclusão de um novo registro o campo não recebe o valor da função.

Vc poderia me dar alguma dica?

Desde já agradeço!

Icaro Ferraz   05/01/2012 22:27:14

Avelino, consegui fazer a configuração corretamente.

Muito obrigado!

Avelino Sampaio   06/01/2012 05:29:17

Icaro,

obrigado pelo feedback e sucesso!

Cláudio Machado   10/04/2012 17:54:12

Avelino, obrigado pela dica da vídeo-aula, era exatamente o que precisava, fiz algumas mudanças utilizando o os arquivos do maestro. Apanhei mas consegui.
Obrigado pela ajuda, foi de grande valia.
Abraços.

Alvaro B. Junior   07/11/2012 17:19:24

Não localizei o vídeo para assistir....

André Ferreira (eliuzidre)   30/01/2013 00:35:53

A pouco tempo atrás adquiri o Kit oferecido pelo Avelino.
Tenho estudado diariamente através dos primorosos tutorias aqui disponibilizados, assim como os que recebi. Digo a todos que o meu projeto está em constante aperfeiçoamento.
Quando penso.
Terminei!
Acabo conhecendo mais uma coisa e adiciono ao meu.
Pelo visto tão cedo não vou dar como concluído o meu trabalho!
rsrsrsrs.

Parabéns Avelino!

Almir   06/03/2013 11:27:38

Bom Dia Avelino

O player de video não esta aparecendo para mim. è necessario estar logado para ver os videos ?.
Grato

Avelino Sampaio   06/03/2013 11:35:42

Almir,

use o navegador "Internet Explorer".

Sucesso!

Avelino Sampaio   13/11/2013 20:36:53

Ok Walter

Sucesso!

Wellington   08/03/2014 10:59:40

Avelino,

Vi sugestão no MaximoAccess que você me deu para ver esse artigo, achei 1000 vezes melhor do que o método que utilizo hoje, sendo assim já estou implementando no meu projeto.

Porém me apareceu uma dúvida, vamos supor que eu queria dar a um usuário específico a função que o administrador possui, ou seja, que ele veja todos os itens, assim como no seu exemplo o admin possui, como faria?

Parabéns pelo site e pelo artigo, muito bom.

Wellington

Juliana Reis - CE   09/03/2014 23:10:54

Nossa, fazia tempo que eu e meu marido procurávamos um site assim.

Como eu faria para colocar a variável em uma consulta que possui mais de uma tabela? Por exemplo, tabela Produtos e tabela Fornecedores, em cada uma dela fica registrado o idUsuario no campo específico. Qual utilizar? Como?

Obrigada!

Avelino Sampaio   10/03/2014 06:14:08

Wellington,

algo assim (posição 17:55 do vídeo):

iif(fncIdUsuario() in (1;7);>0;fncIdusuario())

Sucesso!

Avelino Sampaio   10/03/2014 06:18:34

Juliana,

basta identificar o idusuario na tabela fornecedores (tabela do lado 1 do relacionamento). Estou considerando que vc tenha a relacioanmento 1 para MUITOS entre fornecedores e produtos (um fornecedor para vários produtos).

Sucesso!


Envie seu comentário: