Access
 sql >> Base de Dados >  >> RDS >> Access

Visual Basic para aplicativos no Microsoft Access

Introdução


O Microsoft Access inclui vários recursos para permitir que os desenvolvedores de banco de dados criem formulários de entrada de dados, relatórios e consultas que podem orientar os usuários na consulta de dados existentes no banco de dados e na inserção de novos dados. Vários construtores de consultas e ferramentas de assistente facilitam esse processo de desenvolvimento. Mesmo com essas ferramentas, no entanto, pode haver situações em que o desenvolvedor gostaria de adicionar ainda mais funcionalidades ainda não fornecidas pelas ferramentas de desenvolvimento do MS Access. Por exemplo, o desenvolvedor pode querer corrigir automaticamente dados incorretos antes de serem salvos no banco de dados, mostrar um alerta se uma regra de negócios for violada, ajudar o usuário a navegar de um formulário de entrada de dados para outro ou iniciar um relatório com alguns filtros personalizados. A maneira de realizar essa personalização é adicionando código usando a linguagem de programação Visual Basic for Applications.

Visual Basic for Applications (VBA) é a linguagem de programação usada na família de produtos de software Microsoft Office, como Excel e Access. A linguagem VBA é derivada da linguagem “Basic” inventada em 1964 que se tornou popular em computadores pessoais na década de 1970. A parte “Visual” do nome foi adicionada pela Microsoft para refletir o uso da linguagem de programação Basic no Microsoft Windows.

Existem muitos tutoriais que introduzem a programação básica. Este tutorial se concentrará em um pequeno subconjunto de recursos da linguagem VBA, conforme usado no MS Access.

Conteúdo

  • Eventos no Microsoft Access
  • Exemplo de código VBA:garantindo que os nomes estejam em maiúsculas e minúsculas
  • A linguagem VBA – Declarando e Atribuindo a Variáveis, Declarações Condicionais e Comentários
  • A linguagem VBA – funções, métodos e exemplos
  • A linguagem VBA – Propriedades
  • Exercícios de codificação VBA
  • Como lidar com erros no VBA
  • Executando consultas SQL personalizadas no VBA


A próxima página apresenta eventos no Microsoft Access.


Eventos no Microsoft Access


No Access, o código de programação VBA é anexado a formulários e relatórios e pode ser configurado para ser executado em um horário específico ou em reação a um evento específico. Esse estilo de programação às vezes é chamado de programação “baseada em eventos”, o que significa que o código que o desenvolvedor escreve será executado em resposta a algum evento .

Quando um formulário é exibido no modo de exibição de formulário, ele geralmente consulta todos os dados existentes nas tabelas subjacentes e, em seguida, fica ocioso até que o usuário faça alguma coisa. Por exemplo, o usuário pode clicar em um dos botões de navegação para ir para o próximo registro, clicar em uma caixa de texto e começar a digitar alguns dados novos ou clicar no botão Fechar para fechar o formulário. Cada uma dessas ações resulta em um Evento acontecendo na forma. Cada clique do mouse ou toque do teclado é tratado como um evento.

Na maioria das vezes, os eventos têm um comportamento padrão. Clicar no botão de navegação “próximo registro” faz com que o formulário role para o próximo registro de dados. Digitar a letra “C” quando o cursor está em uma caixa de texto faz com que a letra “C” apareça na caixa de texto. Pressionar a tecla TAB faz com que o cursor salte para a próxima caixa de texto (ou controle) no formulário e assim por diante. Um programador pode substituir ou aprimorar esse comportamento padrão e inserir seu próprio código para ser executado em resposta ao evento.

A programação VBA em formulários de acesso e relatórios é focada principalmente em escrever código para responder a diferentes eventos.

Antes de mergulhar nos detalhes dos eventos, pode ser instrutivo implementar um exemplo simples. Para ver algum código em ação, a próxima seção deste tutorial fornece um passo a passo para adicionar código VBA a um formulário de entrada de dados.


Exemplo de código VBA:garantindo que os nomes estejam em maiúsculas e minúsculas


O que se segue é um exemplo relativamente breve e simples de adicionar código VBA a um formulário de entrada de dados no MS Access. Vários detalhes serão omitidos para fins de brevidade. Após este exemplo, o restante deste tutorial preencherá esses detalhes.

Este exemplo usa o Cliente formulário de entrada de dados que foi personalizado no tutorial Advanced MS Access Forms. Você pode querer completar esse tutorial (ou pelo menos as partes que tratam do formulário de entrada de dados do Cliente) antes de continuar.

Ao inserir novas informações do cliente, gostaríamos de garantir que os nomes do cliente sejam inseridos em “caixa adequada”. Ou seja, a primeira letra do nome deve ser maiúscula e o restante do nome deve ser minúsculo. Se o usuário digitar:“joe” gostaríamos que o formulário corrigisse automaticamente para maiúsculas:“Joe”.

Em termos de eventos, adicionaremos o código que está conectado ao evento After Update para o campo First Name no formulário do cliente. Isso significa que depois algo foi alterado (atualizado ) no campo First Name, o evento After Update será acionado e, em seguida, o código que escreveremos entrará em ação para garantir que o nome digitado seja convertido em maiúsculas e minúsculas.

As etapas a seguir colocam esse código no lugar.
  1. Abra a entrada de dados do cliente no modo de design.
  2. Clique com o botão direito do mouse no Nome caixa de texto e selecione Propriedades no menu pop-up.
  3. Quando a Folha de propriedades for exibido, clique na guia Evento. Isso é mostrado na figura abaixo:
    Observe a lista de eventos que são exibidos. Cada um pode ser programado para responder ao evento específico que acontece com o FirstName caixa de texto.
  4. Crie um novo manipulador de eventos clicando nos três pontos à direita do evento Após a atualização.
  5. O Escolher construtor janela aparecerá. Selecione Construtor de código e clique em OK botão.
  6. A janela de edição de código VBA será exibida. Observe que o Access já criou o stub da sub-rotina que começa com as palavras Private Sub e termina com as palavras End Sub.
    O nome da sub-rotina é criado usando o nome do controle de formulários (FirstName) e o nome do Evento ao qual esta sub-rotina responderá (AfterUpdate).

    A linha End Sub é onde esta sub-rotina em particular terminará.

  7. Adicione o seguinte código na linha vazia entre Private Sub e End Sub.:
    FirstName = StrConv(FirstName, vbProperCase)
    
    

    Depois de concluído, o código aparecerá da seguinte forma:



    Esta nova linha de código faz o seguinte:

    StrConv é uma função que recebe o conteúdo da caixa de texto FirstName e o converte de acordo com o segundo parâmetro fornecido, que é vbProperCase neste exemplo. Depois que essa conversão for feita, o resultado será atribuído (usando o sinal de igual) de volta à caixa de texto FirstName. Isso substituirá qualquer coisa que esteja atualmente na caixa de texto FirstName. Por exemplo, esta função pegará “sally”, converterá para “Sally” e então colocará “Sally” na caixa de texto FirstName.
  8. Salve este novo código puxando para baixo o Arquivo menu e selecionando Salvar .
  9. Teste o novo código. Volte para a tela do modo de design do Microsoft Access. Altere a visualização para Visualização de formulário.
  10. Navegue até um registro vazio. Clique no campo FirstName e digite um nome em todas as letras minúsculas:


  11. Pressione a guia para mover para a próxima caixa de texto. O nome de Joe deve ser alterado para “Joe” conforme mostrado abaixo:
  12. Se você receber um erro, volte para o editor de código VBA e certifique-se de ter escrito todas as partes do código corretamente. Pode ser necessário baixar o Executar menu e selecione Redefinir para interromper a execução do código VBA.

O exemplo acima forneceu uma visão rápida de como se pode personalizar o comportamento de um formulário para ajudar o usuário a inserir dados bem formatados no banco de dados. Vários detalhes foram ignorados durante este exemplo e esses detalhes serão discutidos no restante deste tutorial.


A linguagem VBA


Esta seção apresenta brevemente as principais partes da linguagem VBA como ela é usada no MS Access. Uma visão geral abrangente do VBA está além do escopo deste tutorial. Referências a livros e materiais mais abrangentes são fornecidas no final deste tutorial.

Declarando variáveis


Uma variável é um nome dado a um espaço reservado onde o programador pode armazenar alguns dados. Por exemplo, uma variável pode ser usada para armazenar um número enquanto realizamos algumas operações matemáticas ou comparamos seu valor com outras variáveis. As variáveis ​​podem ser declaradas para conter valores de um tipo de dados específico como Inteiros, Strings ou Datas. Para declarar uma nova variável, use a instrução Dim. Por exemplo, para declarar uma nova variável chamada MyName e configurá-lo para conter uma String (caracteres), faça o seguinte:

Dim strMyName As String

Para declarar uma nova variável chamada “AccountBalance” e configurá-la para armazenar um número com um decimal, use o seguinte:

Dim dblAccountBalance como duplo

Atribuindo valores


Um valor pode ser atribuído a uma variável ou a um controle no formulário usando o sinal de igual. Por exemplo, para armazenar o nome “Alex” na variável MyName, use o seguinte:

strMeuNome =“Alex”


Para copiar o conteúdo da caixa de texto FirstName para a variável MyName, use:

strMeuNome =[Nome]

Os valores também podem ser calculados antes de serem atribuídos. Por exemplo, a expressão a seguir pega o saldo da conta do cliente atual da caixa de texto [Saldo], adiciona 1% de juros (multiplicando o saldo por 1,01) e reduz o resultado em $ 10. Por fim, o resultado é atribuído à variável AccountBalance.

dblAccountBalance =( [Saldo] * 1,01 ) – 10,00

Declarações Condicionais


Uma instrução condicional usa um teste lógico para determinar quais linhas de código devem ser executadas em seguida. A instrução condicional If … Then é usada com bastante frequência. Por exemplo:
If AccountBalance < 1000 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If




A expressão lógica AccountBalance <1000 é avaliada. Se essa expressão for verdadeira (por exemplo, se AccountBalance for $ 400), a próxima linha após Then será executada. Neste exemplo, MonthlyFee =10.

Se essa expressão for False, a linha após o Else será executada.

A expressão lógica pode incluir várias partes que são conectadas pelos operadores booleanos OR, AND e NOT. Uma discussão mais completa sobre expressões booleanas pode ser encontrada neste tutorial de programação. Por exemplo, suponha que renunciamos à taxa mensal se a conta tiver menos de um ano. Suponha que temos AccountAge como a idade da conta em meses. Então o código ficaria:
If AccountBalance < 1000 AND AccountAge > 12 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If


Mais de uma linha de código pode ser executada na instrução If... Then e If... Then podem ser aninhadas umas nas outras.

Comentários


Ao programar em qualquer linguagem de programação, é uma boa prática incluir comentários que descrevam o código. No VBA, um comentário pode ser incluído começando com aspas simples. Tomando o exemplo acima como exemplo, podemos adicionar os seguintes comentários:



Mais partes da linguagem VBA são discutidas na próxima página.


Linguagem VBA – Continuação

Funções


A linguagem VBA possui um grande número de funções e métodos embutidos que podem ser usados ​​para realizar várias tarefas, como funções matemáticas (sin, cos, tan), funções de string e muitas outras. As funções normalmente têm um ou mais parâmetros de entrada que são usados ​​pela função. Por exemplo, na função Cos(45) o “45” é o ângulo de entrada no qual a função cosseno irá operar. A função StrConv requer dois parâmetros de entrada:A string a ser convertida e o estilo de conversão:

StrConv(FirstName, vbProperCase)

Algumas funções úteis incluem:
MsgBox(prompt, botões, título) Exibe uma caixa de mensagem pop-up com o texto do prompt, botões e título
StrConv( expressão, estilo ) Converter a expressão de string para maiúsculas, minúsculas ou maiúsculas
Esquerda( expressão, caracteres ) Pegue os caracteres mais à esquerda da expressão de string
Mid(expressão, início, caracteres) Pegue o conjunto intermediário de caracteres da expressão de string começando no início
IsNull(expressão) Teste se a expressão de string (ou caixa de texto) não tem conteúdo (é nula)
Nz( expressão, valor_if_null ) Se a expressão for nula, preencha um valor padrão
Agora() Retorna a data e hora atuais
Redondo(expressão, decimais) Arredonda a expressão numérica para algumas casas decimais
RGB(vermelho, verde, azul) Retorna o número inteiro de cor com base em uma combinação de vermelho, verde e azul

Métodos


Métodos em VBA são como funções, mas estão conectados a um controle ou outro objeto em um formulário ou relatório.

Alguns métodos úteis incluem:
DoCmd.CancelEvent Cancela o evento atual que está sendo tratado
DoCmd.Close Fechar o formulário atual (ou banco de dados)
DoCmd.OpenForm Abre um novo formulário
DoCmd.OpenReport Execute um comando do MS Access, como salvar dados novos ou atualizados, desfazer uma alteração ou sair de um formulário
.SetFocus Defina o foco para o controle no formulário
.Desfazer Desfaça a alteração ou comando mais recente
.Atualizar Atualiza todos os dados subjacentes a um formulário
.Request Requer os dados fornecidos a um formulário
.Repintar Repinta todos os controles em um formulário

Muitas outras funções e métodos estão listados neste site da Microsoft.

O conjunto de exemplos a seguir faz uso de várias funções e métodos em diferentes combinações.

Exemplos


Mostrar um aviso ao usuário se o saldo da conta for inferior a US$ 1.000
If AccountBalance < 1000 Then
      MsgBox("Warning: The Account Balance is now less than $1,000.")
End If

Se a caixa de texto FirstName no formulário tiver algo nela, converta-a para maiúsculas e minúsculas
If Not IsNull( [FirstName] ) Then
   FirstName = StrConv( [FirstName], vbProperCase )
End If


a próxima página apresenta Propriedades de diferentes objetos.


Propriedades


Cada elemento em um formulário ou relatório de entrada de dados tem um conjunto de propriedades associado a isso. As propriedades controlam o posicionamento, a cor, a fonte, o plano de fundo e outros atributos de aparência e formatação de cada controle. Por exemplo, algumas das muitas propriedades de um TextBox incluem:
Visível Determina se a caixa de texto está visível no formulário
Bloqueado Determina se os dados na caixa de texto podem ser alterados
Índice de guias A ordenação de cada controle conforme o usuário navega no formulário pressionando Tab
Etiqueta Identifica o nome do rótulo associado à caixa de texto
Largura, Altura, Posição Superior e Inferior Indica a posição relativa e o tamanho da caixa de texto
Estilo e cor do plano de fundo Define o estilo de fundo e a cor da caixa de texto
Estilo e cor da borda Define o estilo e a cor da borda ao redor da caixa de texto
Tamanho da fonte, peso, sublinhado, itálico, cor e alinhamento Define a fonte e o estilo
Margens e espaçamento de preenchimento – define as margens e o preenchimento ao redor da caixa de texto

As propriedades podem ser definidas usando o Design View e salvas com o formulário ou relatório. As propriedades também podem ser alteradas usando o código VBA enquanto o formulário está sendo executado. Para acessar uma propriedade no VBA, use o nome do controle, depois um ponto e depois o nome da propriedade. Por exemplo, o código a seguir altera a cor da fonte da caixa de texto CustomerID para Red:

CustomerID.ForeColor =vbRed

As seções a seguir fornecem alguns exercícios que combinam diferentes partes da linguagem de programação VBA para personalizar o comportamento de vários formulários de entrada de dados.


Exercícios de código VBA


Experimente os seguintes exercícios que personalizam formulários. Consulte as seções anteriores para obter exemplos de código que podem ser adaptados ao exercício atual.

Exercício 1


Modifique o formulário CustomerDataEntry para adicionar dois manipuladores de eventos AfterUpdate que converterão o nome e o sobrenome para maiúsculas e minúsculas (crie um manipulador AfterUpdate separado para cada caixa de texto). Escreva o código para verificar primeiro se a caixa de texto não é nula antes de tentar converter o texto.

Exercício 2


Modifique o formulário AccountsDataEntry para adicionar um manipulador de eventos AfterUpdate que exibirá uma caixa de mensagem de aviso se o saldo da conta estiver abaixo de US$ 5.000. Transforme também a cor da fonte da caixa de texto Equilíbrio em Vermelho.


Exercício 3


Modifique o formulário de entrada de dados do cliente. Crie uma sub-rotina On Lost Focus que transforme o rótulo da caixa de texto FirstName em vermelho (vbRed) se o usuário sair da caixa de texto FirstName sem digitar nada. Defina o rótulo para azul (vbBlue) se houver algo na caixa de texto. No exemplo abaixo, nada foi digitado na caixa de texto FirstName e, em seguida, o usuário tabulou para a próxima caixa de texto, fazendo com que o rótulo FirstName ficasse vermelho.



A próxima página deste tutorial discute como lidar com erros no código VBA.


Como lidar com erros no VBA


Ocasionalmente, o código VBA apresentará um erro. Por exemplo, se uma caixa de texto estiver vazia e tentarmos converter o conteúdo da caixa de texto para maiúsculas e minúsculas, a função StrCnv falhará. Outro exemplo é quando ocorre a divisão por zero. Sem tratamento de erros, esses problemas podem fazer com que o programa VBA falhe. Quando ocorre um erro, um código especial pode entrar em ação para lidar com o erro e continuar processando o código VBA.

Os dois principais recursos de tratamento de erros do VBA são a instrução On Error Goto e a instrução Resume Next. Essas duas instruções de código VBA trabalham juntas para evitar que o VBA trave o aplicativo.

A instrução On Error Goto informa ao VBA sobre o que fazer quando ocorre um erro em uma sub-rotina. A parte Goto da instrução faz referência a um rótulo em outro lugar no código onde o VBA continuará funcionando. Assim que o programa VBA chegar ao rótulo, qualquer erro aparecerá em um objeto chamado Err. A propriedade Err.Description conterá uma descrição de texto do último erro encontrado. A instrução Resume Next fará com que o programa VBA continue executando a partir do ponto após a ocorrência do erro.

O exemplo a seguir expande a rotina FirstName_AfterUpdate apresentada no início deste tutorial. Agora o programa VBA pode lidar com quaisquer erros que possam ocorrer no programa.
Private Sub FirstName_AfterUpdate
     ' Subroutine to convert the FirstName of the customer to Proper Case
    On Error Goto FirstName_AfterUpdate_Error_Handler
     FirstName = StrConv(FirstName, vbProperCase)
     ' If the conversion was successful, exit this subroutine
     Exit Sub
FirstName_AfterUpdate_Error_Handler:
       ' If there is an error show the description of the error
      MsgBox Err.Description
      ' Resume with the next statement In the subroutine
     Resume Next
End Sub




a próxima seção deste tutorial discute como incluir código SQL no VBA.


Executando consultas SQL personalizadas no VBA


Structured Query Language (SQL) é a linguagem de programação usada em bancos de dados relacionais como MS Access, SQL Server, Oracle e muitos outros. As instruções SQL podem ser usadas para inserir, atualizar, excluir e recuperar (selecionar) registros de dados de tabelas (entre muitas outras habilidades). Um exemplo simples de uma instrução SQL seria:
SELECT customerid, firstname, lastname
FROM  customer


O código SQL pode ser escrito no VBA e executado em um momento apropriado. Por exemplo, uma sub-rotina VBA pode ser gravada para consultar a tabela Customer para encontrar o CustomerID mais alto. Em seguida, poderíamos adicionar 1 a esse número para obter um CustomerID novo e não utilizado para um novo registro.

Os passos gerais para realizar este tipo de tarefa são:

Criar uma instrução SQL

Execute a instrução SQL usando a conexão de banco de dados aberta (chamada CurrentDb no VBA)

Recupere os registros resultantes e use os dados recuperados

Para criar esta sub-rotina VBA, abra o formulário CustomerDataEntry e obtenha as propriedades do campo CustomerID. Na guia de eventos, clique nos três pontos à direita do evento On Dbl Click. Escolha Code builder e o stub será criado da seguinte forma:
Private Sub CustomerID_DblClick(Cancel As Integer)

End Sub


Adicione o seguinte código:
Private Sub CustomerID_DblClick(Cancel As Integer)
    ' Create a new CustomerID when user double-clicks in the CustomerID field
    On Error GoTo ErrorHandler
    Dim rstResults As Recordset ' This will hold the set of result records
    Dim strSQL As String        ' This variable will hold the text of the SQL Statement
    ' If there is nothing in the CustomerID text box
    If IsNull(CustomerID) Then
       ' Make the SQL statement
       strSQL = "SELECT MAX(customerid) + 1 AS NewID FROM customer"
       ' Run the SQL query against the current database
       Set rstResults = CurrentDb.OpenRecordset(strSQL)
       ' If at least 1 record is returned
       If rstResults.EOF = False Then
          ' Assign the NewID to the CustomerID field
          CustomerID = rstResults!NewID
       End If

        rstResults.Close              ' Close up the result set
       Set rstResults = Nothing      ' Empty out the result set
    End If
    Exit Sub

ErrorHandler:
    Set rstResults = Nothing
End Sub


O código terá a seguinte aparência quando estiver tudo pronto:



Salve o arquivo e, em seguida, visualize o formulário CustomerDataEntry. Navegue até um novo registro e clique duas vezes no campo CustomerID. Um novo CustomerID deve ser criado automaticamente.