Sie sind auf Seite 1von 5

Apresento um breve resumo das formas mais empregadas de filtragens, com o objetivo de atender aos anseios dos menos

experientes, na programao com o Access. Para reforar o assunto aqui abordado, ofereo uma vdeo-aula, com dicas importantes sobre a construo de consultas pelo VBA e disponibilizo o aplicativo Maestro, que traz inmeros exemplos prticos sobre filtragens. Consultas Seleo. As consultas seleo so empregadas no carregamento dos objetos: formulrios, relatrios, listbox e combobox. A flexibilidade em alteramos a estrutura de uma consulta pelo VBA, em tempo de execuo, nos permite elaborar solues, sem igual, para estes objetos. essencial que voc aprenda, o quanto antes, a sintaxe de consulta. Eu lhe garanto que muito simples! Estarei lhe dando uma ajudinha atravs da vdeo-aula. A sintaxe mais simples possvel para uma consulta seleo essa:

SELECT [Lista dos Campos] FROM [Nome da Tabela]; "SELECT * FROM tblClientes;"
O asterisco (*) representa todos os campos da tabela. Bom, esta consulta no nos traz benefcio algum em termos de filtragem, pois o resultado seria o mesmo que acionar diretamente tabela de clientes. Vamos supor que essa tabela de clientes tenha uns 20 campos, mas estamos precisando apenas de trs destes campos para alimentar uma combobox. Assim, montamos a consulta, somente com os campos que desejamos exibir:

"SELECT idCliente, NomeCliente, Estado FROM tblClientes;"

Temos ento, a nossa primeira forma de filtragem que a seleo de campos desejados. A clusula WHERE As consultas possuem a clusula WHERE, que nos permite utilizar critrios de filtragem para exibir registros especficos. Exemplo: Quero que a consulta exiba apenas os clientes do estado de So Paulo.

SELECT [Lista dos Campos] FROM [Nome da Tabela] WHERE [critrio de filtragem];
"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado='So Paulo';"
Observe que coloquei 'So Paulo' entre os apstrofes. uma regra da consulta, a colocao dos apstrofes ou aspas duplas, para valores do tipo string. Para valores do tipo nmero, no se pe os apstrofes. Exemplo:

"SELECT idCliente, NomeCliente FROM tblClientes WHERE idCliente=2;"


Para valores do tipo data temos que usar o cerquilha/tralha (#) . Veja o exemplo de uma consulta exibindo todos os pedidos que possuem a data de entrega maior ou igual a dois de maro de dois mil e onze:

"SELECT idPedido, fornecedor FROM tblPedidos WHERE DataEntrega >= #03/02/2011#;"

Outra questo importantssima a saber no uso de data o formato. O cdigo VBA interpreta o formato Americano (ms/dia/ano). Ento, observe que o cdigo acima est lendo dois de maro e no trs de fevereiro. Vamos supor que voc esteja utilizando o campo de um formulrio, de nome txData, como critrio de filtragem para a data na consulta:

"SELECT idPedido, fornecedor FROM tblPedidos WHERE DataEntrega >=#" & me!txData & "#;"
A data no formulrio digitada no formato (dia/ms/ano), porm preciso entreg-la ao cdigo no formato Americano (ms/dia/ano), para que o VBA leia de forma correta. Vamos supor ento que tenhamos digitado na caixa de texto do formulrio, a data 03/02/2011 (trs de fevereiro).

"SELECT * FROM tblPedidos WHERE DataEntrega >=#" & Format(me!txData,"mm/dd/yyyy") & "#;"
A funo Format() pega a data do campo do formulrio e a entrega para o VBA no formato Americano. O resultado final da consulta como vemos abaixo:

"SELECT * FROM tblPedidos WHERE DataEntrega >= #02/03/2011#;"


O VBA ir ler trs de fevereiro de dois mil e onze, como ns desejamos. Operador Between...And Uma outra forma muito empregada a filtragem por perodo (data inicial e data final). BETWEEN...AND. Exemplo:

Para isso usamos o operador

filtro = "Between #" & me!txDataInicial & "# AND #" & me!txDataFinal" "SELECT * FROM tblPedidos WHERE DataEntrega " & filtro & "#;"
Como se encontra a escrita acima, voc j sabe que teremos resultados errados de filtragem, no? Claro que sabe, pois falta transformamos as datas digitadas nos campos do formulrio para o formato Americano. O correto ento :

filtro="Format(me!txDataInicial,"mm/dd/yyyy") & "# AND #" & Format(me! txDataFinal,"mm/dd/yyyy")" "SELECT * FROM tblPedidos WHERE DataEntrega Between #" & filtro & "#;"
Concatenao Alguns de vocs devem estar se perguntando o que significa o smbolo & na estrutura da consulta. Significa concatenao (unir). Usamos este smbolo quando estamos juntando uma sintaxe escrita do VBA com um valor originrio de um campo de formulrio ou originrio de uma varivel.

Sintaxe final da consulta = [sintaxe parcial] & [varivel ou campo do formulrio] & [sintaxe parcial]

Estas junes costumam dar "dores de cabea" para os programadores mais novos, pois qualquer "bobeada" provoca uma "m" formao da sintaxe, acarretando numa mensagem de erro no momento da sua execuo. Com a vdeo-aula voc aprender como solucionar estes erros, rapidamente. Uso do operador LIKE O LIKE o operador mais apropriado para comparar valores do tipo texto, permitindo no s especificar cadeias de texto idnticas, mas tambm semelhantes, pois existem alguns caracteres especiais que funcionam como "curingas". Exemplos:

"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like 'So Paulo';"
A consulta acima retorna somente os registros dos clientes residentes no estado de So Paulo.

"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like 'pa*';"

J nesta outra consulta, observamos a incluso do caractere asterisco (*) que permite traduzir a declarao nos seguintes termos: Retorna todos os clientes residentes nos estados, comeando com "pa", no importando o que venha depois de "pa" (Par, Paraba e Paran).

"SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado Like '* do *';"

A consulta acima, retorna somente os registros dos clientes residentes nos estados que possuam " DO " no nome ( Rio Grande DO Norte, Rio Grande DO Sul e Mato Grosso DO Sul ). O uso do LIKE muito empregado na prtica, principalmente em consultas dinmicas. Aquelas em que, medida que se vai digitando, vai se obtendo o resultado. No deixe de observar o uso dos apstrofes ( ' ), j que estamos tratando de valores do tipo string. Usando o Operador IN Determina se o valor de uma expresso igual a algum dos vrios valores de uma lista especificada. Exemplo:

filtro = "IN('So Paulo', 'Paran', 'Rio de janeiro')" "SELECT idCliente, NomeCliente, Estado FROM tblClientes WHERE Estado " & filtro & ";"
Retorna somente os registros dos clientes residentes nos estados de So Paulo, Paran e Rio de janeiro. As propriedades RowSource e RecordSource A propriedade RowSource nos permite alimentar as combobox e as listbox com as consultas. Exemplo de uma consulta, via cdigo, alimentando uma combobox, pelo evento "Ao receber foco":

Private Sub cboClientes_GotFocus() Dim strSql As String


strSql = "SELECT idCliente, NomeCliente FROM tblClientes WHERE Estado='So Paulo';"

Me!cboClientes.RowSource = strSql End Sub

Para alimentar os formulrios e relatrios usada a propriedade RecordSource. Exemplo de uma consulta, alimentando um relatrio, pelo evento "Ao abrir" do relatrio:

Private Sub Report_Open(Cancel As Integer) Dim strSql As String strSql = "SELECT * FROM tblClientes WHERE Estado='So Paulo';" Me.RecordSource = strSql End Sub
Uso das propriedades Filter e FilterOn dos objetos formulrio e relatrio. Vamos imaginar um relatrio de cadastro de clientes, que tem como origem dos dados, a tabela tblClientes. Se abrirmos pura simplesmente o relatrio, todos os registros sero carregados, pois no h qualquer tipo de filtragem. Porm, podemos aplicar a propriedade filter ao abrir o relatrio, para obtermos os registros especficos desejados. No exemplo abaixo, o relatrio ir exibir somente clientes de So Paulo.

Private Sub Report_Open(Cancel As Integer) Me.filter = "Estado='So Paulo';" Me.filterOn = true End Sub

A propriedade filter uma expresso de seqncia de caracteres que consiste em uma clusula WHERE sem a palavra-chave WHERE. FilterOn = true aplica a filtragem e FilterOn=false retira a filtragem. A propriedade filter amplamente utilizada nos casos aonde necessitamos filtrar subformulrios, baseada em um campo do formulrio principal. Veja no exemplo abaixo, um cdigo que filtra um subformulrio(sfrmClientes) medida que se digita em uma caixa de texto (txCliente) do formulrio principal:

Private Sub txCliente_Change() Dim filtro As String If Len(Me!txCliente.Text & "") = 0 Then 'Se no h nada digitado, remove o filtro Me!sfrmClientes.Form.Filter = "" Me!sfrmClientes.Form.FilterOn = False Exit Sub End If filtro = "[NomeDoCliente] like '*" & Me!txCliente.Text & "*'" Me!sfrmClientes.Form.Filter = filtro Me!sfrmClientes.Form.FilterOn = True End Sub

Clusula WHERE do comando de ao DoCmd.ApplyFilter Este comando de filtragem aplicado em formulrios e em relatrios que possuem o foco. Por exemplo, no cadastro de clientes, do aplicativo Maestro, tem uma combobox aonde se seleciona o cliente de interesse para a exibio do seu respectivo cadastro. Veja na figura abaixo:

Ao selecionar o cliente, o evento "Aps atualizar" da combobox disparado e a filtragem do registro feita, aplicando-se o comando DoCmd.ApplyFilter. usado no critrio de filtragem do comando, o nmero exclusivo do cliente selecionado, que se encontra na primeira coluna (oculta) da combobox.

Private Sub cboConsulta_AfterUpdate() DoCmd.ApplyFilter , "idcliente = " & Me!cboConsulta.Column(0) Me!cli_Nome.SetFocus Me!cboConsulta = Null End Sub
Note que h um boto ao lado da combobox que para a remoo do filtro, se for preciso.

Private Sub btRemoverFiltro_Click() DoCmd.RunCommand acCmdRemoveFilterSort '----------------------'Ou DoCmd.ShowAllRecords '-----------------------

Me!cboConsulta.SetFocus End Sub

Clusula WHERE dos comandos de ao DoCmd.Openform e DoCmd.OpenReport. Ao solicitarmos a abertura de um formulrio ou de um relatrio, podemos, simultaneamente, definir uma filtragem a ser aplicada e isso amplamente utilizado. Eu abuso desta opo. Imagine uma caixa de listagem, com uma lista de pedidos. Desejamos que, ao se dar um duplo clique em um dos pedidos da lista, se abra o formulrio de pedidos, no registro correspondente.

Private Sub Lista_DblClick(Cancel As Integer) Docmd.OpenForm "frmPedidos",,,"NumeroPedido = " & Me!Lista.column(1) End Sub
Outra situao muito comum querer imprimir ou visualizar um relatrio, correspondente ao cadastro que se est alterando naquele momento.

Private Sub btImprimir_Click() 'Salva as alteraes do cadastro para se refletir no relatrio Docmd.RunCommand acCmdSaveRecord 'Abre o relatrio, filtrado pelo nmero exclusivo do cliente
DoCmd.OpenReport "rltCadastroCliente",acViewPreview,,"idCliente = " & me! idCliente

DoCmd.Maximize End Sub


Critrios de filtragem das funes DLookup(), Dsum(), Dcount() e outras Saber aplicar filtros nestas funes fundamental , porm nada difere do que voc viu at agora. Vamos supor que seja preciso capturar o Preo de Custo de um PenDrive , cdigo pd8gb, que se encontra na tabela de estoque. Podemos capturar valores com a funo Dlookup()

PreoVenda = Dlookup("PreoCusto","tblEstoque","Cdigo = 'pd8gb'") * 1.35


Um uso prtico para a funo DCount() de investigar se h registro(s) presente(s) em uma determinada tabela. O exemplo abaixo investiga se o cliente que est sendo cadastrado, j se encontra registrado na tabela. A lgica : se a funo Dcount() contar 1 ou maior que 1 , o registro existe.

Private Sub NomeCliente_BeforeUpdate(Cancel As Integer)


If DCount("IdCliente","tblClientes","NomeCliente = '" & me!NomeCliente & "'") > 0 then

MsgBox "O Cliente " & Me!NomeCliente & " j existe..." Me.Undo Cancel = True End If End Sub

Imagine que voc agora precise somar as despesas de Luz pagas de um Contas a Pagar, no ano de 2011. A funo Dsum() resolve a questo de forma bem simples.

ValorLuz = Dsum("ValConta","tblContasPagas","TipoConta='Luz' And Year(DataPagamento)=2011")


A questo central voc saber aplicar corretamente o critrio de filtragem. Para ampliar o seu conhecimento O Access possui uma centena de funes prontas, que solucionam a maioria de casos do cotidiano e voc no pode deixar de, pelo menos, saber que existem. O conhecimento destas funes ir ampliar significativamente o seu potencial para montagem desses critrios de filtragem. Algumas destas funes que foram utilizadas aqui no artigo : Format() Year() Dlookup() Dcount() Dsum() Aprenda aonde conhecer todas estas funes no Access aqui. Arquivo exemplo Ofereo o aplicativo Maestro v.2 que possui uma srie de exemplos, empregando as tcnicas de filtragem, aqui apresentadas.

Para entrar na estrutura do Maestro (Maestro_v2.accdb), basta manter pressionada a tecla SHIFT na inicializao. Senha do usurio admin Senha do usurio Avelino Senha do Maestro_v2_be.accdb (tabelas) > a1234

> admin > 1234

Baixe aqui o arquivo exemplo

Nesta vdeo-aula voc ir aprender: Como utilizar o MODO SQL para analisar as consultas criadas no ambiente grfico. Identificar os erros mais comuns, cometidos na construo do critrio de filtragens das consultas. Como construir uma Combobox para filtragens, usada em um formulrio de cadastro. Como utilizar o PONTO DE INTERRUPO no VBA, para detectar erros nos cdigos. Como EXIBIR a vdeo-aula em tela cheia? 1. Clique na seta executar

da

tela

abaixo

para

iniciar

exibio

do

vdeo;

2. D dois cliques rpidos na tela, quando o vdeo comear a ser exibido.

Das könnte Ihnen auch gefallen