ACCESS

 

DICA - 01

Tutorial de Programação VBA – Access

 

Por: Júlio Cesar Fabris Battisti
[Entre em contato com o autor ]

 

Publicado em: 05/11/2004


Fazendo cálculos e comparações com o VBA - Uso de Operadores:
Para realizarmos cálculos e comparações entre variáveis, utilizamos operadores. Neste item trataremos sobre operadores aritméticos e operadores de comparação.
Fazendo cálculos com os Operadores aritméticos:
Podemos realizar cálculos no VBA, utilizamos operadores aritméticos. Na Tabela a seguir, temos uma descrição dos operadores aritméticos utilizados no VBA:
TABELA - Operadores Aritméticos do VBA


Operador

Símbolo

Descrição

Adição

+

Soma o valor de duas ou mais variáveis.

Subtração

-

Subtração entre duas ou mais variáveis.

Multiplicação

*

Multiplica os valores de duas ou mais variáveis.

Divisão

/

Divide o valor de duas ou mais variáveis.

Inteiro da Divisão entre dois números

\

Retorna a parte inteira, da divisão entre dois números.

Exponenciação

^

x^y -> É o valor do número x, elevado na potência y

Modulo

Mod

Retorna o resto de uma divisão de 2 números.

Exemplo: Vamos abrir o formulário Teste, do banco de dados Nwind.mdb e criar um botão chamado ExOperadores. Lembre-se, você pode utilizar qualquer formulário, de qualquer banco de dados disponível. Depois vamos criar um procedimento associado ao evento Ao Clicar deste botão, onde exemplificarei o uso dos diversos operadores aritméticos.
Para criar o exemplo proposto, siga os passos indicados a seguir:

  • Abra o banco de dados nwind.mdb que está na pasta Semana2.
  • Abra, o formulário Teste no modo Estrutura.
  • Crie um botão de comando com o nome de ExOperadores.
  • Associe o seguinte código ao evento Ao abrir, deste botão de comando:
Dim a As Integer
Dim b As Integer
Dim som, subtr, divis, mult, intdivs, expo, modul As Double
  
   a=25
   b=3
  
   som=a+b
   subtr=a-b
   divis=a/b
   mult=a*b
   intdivs=a\b
   expo=a^b
   modul= a mod b
  
'Uso de MsgBox para exibir os resultados.
 
MsgBox "Os números são: " & a & " e " & b & Chr(13)
MsgBox "Soma: " & som & Chr(13)& "Subtração: " & subtr & Chr(13)
MsgBox "Divisão: " & divis & Chr(13)& "Multiplicação: " & mult & Chr(13)
MsgBox "Divisão inteira: " & intdivs & Chr(13)& "Exponenciação: " & expo & Chr(13)
MsgBox "Resto da divisão: " & modul
  • Após digitar o código Feche o Ambiente de Desenvolvimento.
  • Salve o Formulário.
  • Vá para o modo Formulário e dê um clique no botão "ExOperadores".
  • Será exibida a seguinte mensagem:

  • Dê um clique no botão OK.
  • Será exibida a seguinte mensagem:

  • Dê um clique no botão OK.
  • Será exibida a seguinte mensagem:

  • Dê um clique no botão OK.
  • Será exibida a seguinte mensagem:

  • Dê um clique no botão OK.
  • Será exibida a seguinte mensagem:

  • Dê um clique no botão OK.
  • Você estará de volta ao formulário Teste.
  • Mantenha este formulário carregado. Iremos utilizá-lo nos próximos exemplos.

Neste exemplo utilizamos os operadores aritméticos, para realizar uma série de operações com os valores atribuídos às variáveis "a" e "b". Depois utilizamos a função MsgBox, para exibir os resultados obtidos. O uso da função MsgBox, merece alguns comentários. Primeiro, utilizamos a função MsgBox, para exibir mensagens em uma pequena janela, chamada de Janela Pop-Up. Podemos exibir texto e também valores de variáveis. Quando temos que exibir diversos componentes, como um pouco de texto, em seguida o valor de uma variável, depois mais texto, e assim por diante, devemos utilizar o operador de concatenação &. Este operador permite que as diversas partes sejam exibidas como uma única mensagem. Considere o exemplo da seguinte linha de código:
MsgBox "Os números são: " & a & " e " & b & Chr(13)
Neste exemplo, primeiro é exibido o texto: "Os números são:" , logo em seguida o valor da variável a. Observe que as duas partes são concatenadas com o operador &. Depois concatenamos o valor da variável b, e finalmente utilizamos a função Chr(13). A função Chr(número), envia o caracter correspondente ao número digitado entre parênteses. Este número, é o número do caracter no padrão ASCII (American Standard Caracter Interchange Information). No código ASCII, cada caracter possui um número associado. No caso o número 13, é associado ao <ENTER>. Com isso estamos enviando um <ENTER>, para a caixa de mensagem, o que equivale a uma troca de linha. Com isso, utilizamos o Chr(13), para simular um <ENTER>, de tal maneira que os dados não saiam todos "emendados", na mesma linha.
Com o uso de operadores, podemos realizar uma série de operações sobre as variáveis existentes em módulo de código do VBA.
Comparando valores com os Operadores de comparação:
Em determinadas situações, existe a necessidade de efetuarmos comparações entre os valores de duas ou mais variáveis ou expressões. Com base no resultado da comparação - Verdadeiro ou Falso -, a execução do código VBA pode seguir caminhos diferentes. Normalmente utilizamos comparações, nas estruturas de controle do código, também conhecidas como laços de controle (laçoes estes que serão estudados, em detalhes, em uma das próximas partes deste tutorial). Para que possamos estudar os operadores de comparação, vamos apresentar uma das estruturas de controle mais simples que existem no VBA, a estrutura If Then Else. Abaixo temos um exemplo do funcionamento da estrutura If Then Else:

If x>y Then
 
   ' Comandos a serem executados quando x for maior do que y
   Comando 1
            Comando 2
            ...
            Comando n
 
Else
 
   ' Comandos a serem executados quando x for menor ou igual a y
   Comando 1
            Comando 2
            ...
            Comando n
 
End If

Conforme podemos ver, a estrutura If Then Else, é bastante simples. Fazemos um teste no início da estrutura. Se o valor do teste for verdadeiro, executamos os comandos na seqüência, caso contrário, executamos os comandos após o Else. Note que utilizamos o operador de comparação "maior do que: >", no caso x>y, estamos testando se x é maior do que y.
Podemos utilizar laços If Then Else mais complexos, como os do exemplo:

If x>y Then
 
   ' Comandos a serem executados quando x for maior do que y
   Comando 1
            Comando 2
            ...
            Comando n
 
ElseIf x=y Then
 
   ' Comandos a serem executados quando x for igual a  y
   Comando 1
            Comando 2
            ...
            Comando n
 
Else
 
   ' Comandos a serem executados quando x for menor do que y
   Comando 1
            Comando 2
            ...
            Comando n
 
End If

Podemos utilizar tantos ElseIf, quantos forem necessários.
Na Tabela a seguir temos uma descrição dos operadores de comparação do VBA.
Tabela - Operadores de comparação do VBA.


Operador

Símbolo

Descrição

Igualdade

=

É igual à.

Diferente

<> 

É diferente de.

Maior que

É maior do que.

Menor que

É menor do que.

Maior ou igual a

>=

É maior ou igual a.

Menor ou igual a

<=

É menor ou igual a.

Exemplo: Vamos ir para o modo Estrutura do formulário Teste, do banco de dados Nwind.mdb e criar um botão chamado ExOperadoresComparação. Lembre-se que você pode utilizazar qualquer formulário, de qualquer banco de dados disponível. Vamos criar um procedimento associado ao evento Ao Clicar deste botão, onde exemplificamos o uso dos diversos operadores de comparação do VBA.
Para criar o exemplo proposto, siga os passos indicados a seguir:

Dim x,y,z,k As Integer
 
x=12
y=15
z=20
k=15
 
If x<y Then
   MsgBox "x é menor do que y." 
Else
   MsgBox "x é maior do que y."
End If
 
If y<x Then
   MsgBox "Y é menor do que x"
Else
   MsgBox "Y é maior do que x"
End If
 
If y<=k Then
   MsgBox "y é menor ou igual à k"
Else
   MsgBox "Y é maior do que k"
End If
 
If x<>y Then
   MsgBox "x e y são diferentes"
End If

O uso de Operadores de comparação, amplia o leque de possibilidades para nossos programas em VBA. Devemos ter alguns cuidados quando comparamos variáveis que possuem valores de tipos diferentes, como por exemplo, número e texto. A Tabela a seguir descreve o que acontece, quando comparamos variáveis com valores de tipos diferentes.
Tabela - Comparando valores de tipos diferentes.


Comparação

Resultado

Entre duas variáveis com valores numéricos.

Comparação normal.

Entre duas variáveis com valors do tipo texto.

É efetuada uma comparação entre valores de texto. Por exemplo Xuxa é maior do que Abel (X vem depois do A).

Uma das variáveis possui um valor numérico e outra possui um valor de texto

O valor numérico será sempre considerado menor do que o valor de texto.

Uma das variáveis possui um valor numérico e a outra está vazia.

Efetua uma comparação numérica, atribuindo 0 (zero) para a variável vazia.

Uma variável possui um valor de texto e a outra está vazia, sem valor.

Efetua uma comparação de texto, atribuindo texto de comprimento zero (" ")para a variável vazia.

As duas variáveis possuem um valor vazio.

São consideradas iguais.

Com a utilização dos operadores aritméticos e de comparação, ampliamos bastante o leque de opções, na criação de códigos com o VBA. No Parte 7, veremos alguns detalhes sobre "Escopo" de variáveis.
Conclusão:
Nessa sexta parte do tutorial, falei sobre elementos fundamentais da linguagem VBA - Operadores. Tratei sobre operadores aritméticos e operadores de comparação. Os operadores são utilizados em qualquer exemplo de código VBA. Não é possível fazer cálculos e testes de comparação entre variáveis, sem o uso de operadores.

 

Quinta-feira, 01 de julho de 2004 às 01h59

Otimizando Access com VBA - 02

Saudação a toda comunidade e usuários iMasters!
Esta é a segunda parte da série "Otimizando Access com VBA", e iremos abordar um ponto muito importante: segurança no Access.
Muitos usuários sabem a importância de gerar uma cópia do projeto final, em MDE. Ou seja, o Access cria uma compilação do projeto, que será fornecida para seus clientes, mantendo o código protegido de curiosos, principalmente quando o projeto em questão tem um formulário de entrada com senhas.
Trata-se de um procedimento muito simples. Uma vez que o projeto foi devidamente testado, fazemos o fechamento do projeto ex:
01. Menu ferramentas/inicializar.
a. Em exibir formulários, vamos definir o formulário principal, que dará inicio ao projeto.
b. Desabilitar todas opções de exibições e permissões, inclusive avançadas.
02. Menu utilitários de banco de dados/criar arquivo mde (compilação do projeto).
Simples, mas pode deixar aberturas para intrusos. Qualquer usuário mais experiente poderia forçar um erro e levar o programa a abrir a rotina, e pronto! Seu projeto seria violado.
Podemos evitar que falhas assim ponham em risco nosso projeto. Para isso, devemos inserir rotinas de erro em todos os comandos, fazendo com que o programa saia da rotina, caso venha ocorrer alguma operação inadequada, sem executar nenhum procedimento. Veja abaixo o exemplo de uma rotina de tratamento de erro :
Private sub incluir_click()
on error GoTo Fim                         <== caso ocorrer um erro,vai para Fim
linha de procedimentos
linha de procedimentos
Fim: exit sub                                  <== sair da sub rotina
end sub
Uma vez tomado os cuidados com as rotinas e testado o programa, está pronto para ser compilado em formato MDE.
Agora vem a parte inversa. Ao compilar o codigo MDE, o Access vai abrir o projeto sem as barras, que por segurança, foram desativadas. Esse procedimento é necessário para que ninguém abra em modo de estrutura e altere nosso código. Agora precisamos restaurar nosso projeto original, para que possamos efetuar futuras modificações.
Primeiramente vamos abrir um outro banco de dados qualquer. Após abrir, mantenha a tecla [shift] pressionada, clique no ícone para abrir e clique no seu projeto original (aquele que gerou o arquivo MDE). Vamos ao menu ferramentas/iniciar e habilite as opções novamente. Ssto permitirá seu projeto original abrir normalmente.
Devemos lembrar que, sempre que formos alterar ou criar um arquivo MDE, devemos tirar as barras de ferramentas e gerar um novo MDE.
Até aqui, acreditamos não haver novidade nenhuma para usuários mais comuns, mas vamos à parte mas interessante desta coluna. Como vimos acima, por razões de segurança, tiramos as barras de ferramentas, impedindo que alguém entre em modo de estrutura e tenha os códigos abertos ao seu dispor.
Mas ao retirar as barras, também deixamos de ter acesso ao filtro por seleção, muito prático e rápido. Para isso, vamos criar um botão que faça o filtro por seleção.
Cire uma tabela com as seguintes caracteristicas


Campo

Tipo

Comprimento

Nome

texto

35

Ender

texto

35

Bairro

texto

20

01. Salve a tabela como tabcad, em seguida abra um formulario novo, em modo de estrutura, e arraste a lista de campos para o formulário.
02. Desative o assistente (varinha mágica) e insira um botão de comando.
a. Vamos alterar as propriedades do botão Nome: cmdfiltro Legenda: Filtrar
b. Construir evento, construtor de código.
Com um clique na janela de eventos, vamos ativar também uma rotina para duplo clique que permitirá desativar o filtro
Private sub cmdfiltro_click()
on error GoTo fim
me.bairro.setFocus
docmd.RunCommand acCmdFilterBySelection
fim:
exit sub
end sub

Private sub cmdfiltro_Dblclick(Cancel As Integer)
on error GoTo fim
me.bairro.setFocus
docmd.RunCommand acCmdRemoveFilterSort
fim:
exit sub
end sub
Pronto. Agora é só testar nosso projeto. Cadastre alguns registros com alguns bairros idênticos, e faça um teste. Clique no campo bairro e com um clique obterá a quantidade de registros com bairros idênticos. Com duplo clique, o filtro é desativado, apresentando o volume total de registros.
Podemos melhorar o desempenho do código acima. Vamos inserir uma caixa de combinação (faremos na mão) ou seja, sem assistente (desativando a varinha da caixa de ferramentas).


Propriedades da caixa de combinação

Nome Nome

opt

Tipo de origem de linha Tipo de origem de linha

Lista de valores

Origem de Linha Origem de Linha

Nome;Ender;Bairro

Agora vamos substituir as linhas
me.bairro.setFocus
DoCmd.RunCommand acCmdFilterBySelection
por estas :
Select Case opt
Case "Nome"
Me.nome.SetFocus
Case "Ender"
Me.ender.SetFocus
Case "Bairro"
Me.bairro.SetFocus
End Select
DoCmd.RunCommand acCmdFilterBySelection
Com esta rotina, você pode sumir com todas as barras sem menor saudade delas. E a parte interessante é que seu projeto ficará mais leve, dispensando macros ou consultas inúteis permitindo ao Access ficar mais leve, seguro e mais eficiente.

Por hoje é só galera. A cada matéria vamos estar aqui com mais recursos para seus projetos em Access/VBA, deixando aqui um forte abraço, agradecendo a presença de todos e à comunidade do iMasters.p>

 

Otimizando Access com VBA - 03

Saudação a toda comunidade e usuários iMasters !
Primeiramente quero deixar aqui meus agradecimentos aos alunos e usuários que manifestaram seu apoio num momento difícil em minha carreira, e claro, vamos continuar prestigiando os que acreditam em nosso trabalho sério e profissional, e que dão um grande sentido em nossa existência.
Um abraço especial a toda galera!
Esta é a terceira coluna da série otimizando Access com VBA, e iremos dinamizar nosso formulário com uma estética mais profissional, personalizando nossos comandos de navegação de dados.
Caso seja usuário iniciante, abra um formulário em modo de estrutura, escolha a opção construir evento / construtor de código (propriedades do mouse direito)...pronto! Você estará na janela do editor de códigos do Visual Basic. Para maiores informações, mande-me um e-mail.
Primeiramente devemos ter em mente que o Access trabalha com programação orientada por objeto, assim sendo todo objeto, tem seus métodos, ou seja, faz algo.. ,e todo método possui propriedades que definem o comportamento de um objeto.
Por exemplo, uma cadeira é um objeto, e tem seu método (faz algo..sentar). E tem várias propriedades (peso, altura, aço ou madeira, plástico ou couro...) que definem as propriedades ou características. Partindo desse exemplo, podemos manipular propriedades de objetos, segundo nossos interesses, via programação (VBA - Visual Basic for Aplications).
Primeiramente, vamos inserir 1 botão de comando...
* Podemos fazer uso das teclas Ctrl + setas, para movimentar objetos no formulário.
* Podemos fazer uso das teclas shift + seta direita/esquerda para redimensionar objetos.
Experimente fazer um isto: insira um botão apenas, dê um Ctrl + C (copiar) e em seguida Ctrl + V (colar). Agora mantenha a tecla Ctrl + Seta para posicionar o 2º botão ao lado do 1º. A partir de agora, cada vez que colar, ele irá entender a posição e distância entre botões tornando a tarefa mais rápida e eficiente.
Agora vamos ao que interessa: os comandos. Primeiramente vamos alterar as propriedades que orienta os objetos, ou seja, dar os nomes aos objetos.
Com mouse direito, clicando nos botões (propriedades/nome), vamos renomear os 4 botões:
NOME : cmdinicio LEGENDA: <
NOME : cmdanterior LEGENDA: <<
NOME : cmdproximo LEGENDA: >>
NOME : cmdfinal LEGENDA: >
Pronto. Agora que criamos os objetos e demos seus respectivos nomes, vamos aos códigos:
Clique no botão com mouse direito (construir evento / construtor de código). Uma vez na área de códigos, vamos inserir os objetos (janela superior esquerda). Clique sobre os cmd, que seriam nossos botões.
Private Sub cmdinicio_Click()
on error goto fim > rotina preventiva de tratamento de erros
DoCmd.GoToRecord , , acFirst > move o ponteiro para registro inicial da tabela
fim:
Exit Sub
End Sub
Private Sub cmdanterior_Click()
on error goto fim
If Form.CurrentRecord = 1 Then >se posição do registro = 1
DoCmd.GoToRecord , , acFirst >mantem ponteiro no primeiro registro
Else
DoCmd.GoToRecord , , acPrevious >retornar posição até chegar o 1º registro
End If
fim:
Exit Sub
End Sub
Private Sub cmdproximo_Click()
on error goto fim
If Not IsNull(nome) Then >se registro não for vazio..
DoCmd.GoToRecord , , acNext >mover para proximo registro...
Else
DoCmd.GoToRecord , , acLast >permanecer no ultimo registro
End If
fim:
Exit Sub
End Sub
Private Sub cmdfinal_Click()
on error goto fim
DoCmd.GoToRecord , , acLast >move ponteiro para ultimo registro
fim:
Exit Sub
End Sub
Agora, para termos mais controles sobre nossos registros (opcional), vamos inserir
2 caixas de texto no nosso formulário, com os seguintes nomes: txnum e txtot. propriedades da caixa txnum.
origem do controle : =[Formulário].[CurrentRecord]
>isso permitirá recuperar numero do registro atual no formulário...
Para podermos determinar a contagem de registros (Recordcount), teremos que utilizar o método DAO no carregamento do formulário (Form_Load).
Private Sub Form_Load()
on error goto fim
Dim db As Database >declara variavel db como banco de dados
Dim rs As Recordset >declara variavel rs como tabela
Set db = CurrentDb >inicia variavel db como banco de dados atual
Set rs = db.OpenRecordset("tabcad") >inicia variavel rs como tabela
txtot = (rs.RecordCount) >caixa txtot assume contagem dos registros
fim:
Exit Sub
End Sub
Para finalizar,vamos dar uma estética melhor ao nosso formulário. Em modo de estrutura, vamos clicar na janela superior esquerda (quadrado ao lado da régua) e redefinir as propriedades:
Seletor de registros: não
Botões de navegação: não
Linhas divisórias: não
Estilo de Borda: Fino Legenda: insira aqui o nome do seu sistema..

 

José Valter

Pesquisando o melhor da internet pra você