VBA Access - Construindo queries "em pleno voo" - Building Queries "On the Fly"


Termo de Responsabilidade header-fly-in.jpg

Por que construir Queries em pleno vôo?

Como muitos outros desenvolvedores de MS Access, tenho a tendência de criar poucas consultas armazenadas. Em vez disso tento criar um pequeno número de consultas de propósito geral que podem ser mudadas sob demanda para atender às necessidades do usuário. Isso permite que o meu banco de dados seja muito mais flexível e eu não tenha que adivinhar o que os usuários podem querer saber. 

Em geral uso formulários ou caixas de diálogo para coletar as informações do usuário utilizando-as para criar a declaração SQL da query [consulta]. O usuário é realmente quem constrói a consulta em si, mas não precisa saber nada sobre Access ao fazê-lo.

Outra razão importante para trabalhar desta maneira é que usuários curiosos [ou descuidados] possam apagar ou alterar consultas armazenadas, e não saber como substituí-las.


Construindo queries 'Multi-purpose'

O objetivo deste projeto é criar uma única consulta cujos critérios possam ser alterados para atender às necessidades do usuário. A consulta será aberta quando o usuário clicar em um botão em uma caixa de diálogo. A caixa de diálogo também será usado para reunir os critérios do usuário.


A consulta armazenada 

Você precisa de uma consulta que possa ser usada como a base da nossa query Multi-Purpose [multi-propósito]. Seu design é completamente irrelevante, porque ela vai ser alterada cada vez que for usada, mas o MS Access não permite que você crie uma consulta "vazia", então terá que gerar alguma coisa (qualquer coisa serve).

Crie uma nova query no Access por acessar o modo design, adicionar uma tabela, colocar um campo na grade e depois fechar e salvar a consulta. Dê um nome apropriado, neste exemplo, estou chamando de qry_StaffList.

Decidi acreditar que os usuários desta aplicação modelo provavelmente vão querer consultar em três diferentes critérios: Departamento, Escritório, e Gênero. Assim, o primeiro passo é construir uma caixa de diálogo (através de um formulário) para ajudar os usuários a especificar os seus critérios. 

Cabe-lhe o trabalho de desenvolver uma caixa de diálogo funcional. Escolhi usar caixas de combinação mostrando listas de critério em todas as escolhas possíveis.

Se você não é experiente na construção de formulários de diálogo como este, basta desenvolver-se um pouco mais personalizando-o com consultas parametrizáveis que contenham os detalhes necessários.

Coloque os rótulos ao lado das caixas de combinação como na ilustração abaixo para demonstrar o  conteúdo nas listas.




Bem, agora temos os componentes básicos necessários da consulta multi-propósito. O próximo passo é escrever o código para fazê-los trabalhar juntos.


Escrevendo o VBA e o código SQL

Quando o usuário clicar no botão OK da caixa de diálogo devem acontecer várias coisas:

Armazenar as escolhas do usuário e gravá-los numa instrução SQL.

Aplique a instrução SQL em uma consulta armazenada.

Abra a consulta armazenada.

Feche a caixa de diálogo.

O código para a realização dessas operações será executado no evento botão OK.


Declarando e preenchendo as variáveis

As primeiras linhas de código estabelecerão o contato com o banco de dados, informando ao MS Access que estamos nos referindo ao banco de dados atual (ou seja, aquele que contém o código) além de identificar a consulta na qual trabalharemos. 

Além disso, uma string (ou seja, texto) será declarada, chamada strSQL. Que executará a instrução SQL aplicada na consulta:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String

Set db = CurrentDb
Set qdf = db.QueryDefs("qryStaffListQuery")


NOTA: Perceba que estou usando a linguagem DAO porque acho mais simples para este tipo de trabalho. DAO é o padrão para Access 97, mas o padrão para 2000/2002 é de acesso ADO. Usuários de Access 97 não precisam fazer nada (pode omitir o "DAO." se quiser, mas isso realmente não importa), mas os usuários do MS Access 2000/2002  precisam definir uma referência ao DAO para que sua base de dados compreenda o código. No Editor de Visual Basic, vá em Ferramentas> Referências. Na caixa de diálogo desça até "Microsoft DAO Objeto 3.x Library" (onde x é o número mais elevado se encontrar mais de um), colocando uma marca na caixa. Clique em OK para definir a referência. Só precisa fazer isso uma vez para o banco de dados e qualquer código que colocar nele será capaz de usar a referência.

Construir a instrução SQL

Em seguida, vem uma declaração VBA que coloca uma cadeia de texto a variável strSQLEste código abaixo combina palavras-chave SQL e cláusulas em que tenham sido colocados referências para as caixas de combinação que contêm as escolhas de critério do usuário:


   LET strSQL = "SELECT tblStaff.* " & _

                 "FROM tblStaff " & _

                 "WHERE tblStaff.Office='" & Me.cboOffice.Value & "' " & _

                 "AND tblStaff.Department='" & Me.cboDepartment.Value & "' " & _

                 "AND tblStaff.Gender='" & Me.cboGender.Value & "' " & _

                 "ORDER BY tblStaff.LastName,tblStaff.FirstName;"


TagsMicrosoft Office Access, Access, on the fly, SQL, query,




Nenhum comentário:

Postar um comentário

diHITT - Notícias