domingo, 28 de fevereiro de 2021
DVD
ConteÚdo
DOWNLOADS
Interação
dicas aleatórias
Dica #41
Valores por extenso
Publicado: 24/04/2005

Artigos

Parâmetros

Será que você sabe realmente o que é uma Consulta Parâmetro e como ela funciona? Bom, segundo o Help do Access, “consulta parâmetro é uma consulta que, ao ser executada, exibe sua própria caixa de diálogo solicitando a você informações...

Por: Andréa de Carvalho Tikhomiroff (andrea@ativoaccess.com.br)
Publicado: 20/09/2001  Visitas: 20688
Dificuldade: Intermediário

Indicação de Artigo  Imprimir

Apresentação

Será que você sabe realmente o que é uma Consulta Parâmetro e como ela funciona? Bom, segundo o Help do Access, “consulta parâmetro é uma consulta que, ao ser executada, exibe sua própria caixa de diálogo solicitando a você informações, tais como critérios para recuperação de registros ou valor que você pode desejar inserir em um campo”. Traduzindo, a Consulta Parâmetro é aquela que, através de caixas de diálogo padrão, solicita critérios (datas, cidades, etc.) para exibição de formulários ou relatórios.

Mas será que é só isso? Pois eu lhe digo que não! Pelo contrário, a Consulta Parâmetro é uma ferramenta poderosíssima, se soubermos tirar proveito das suas possibilidades. Por exemplo: ela tanto pode servir para gerar um relatório do registro atual de um formulário, como pode extrair seus critérios de um formulário pop-up, onde podemos ter controles tipo caixas de texto, de combinação, de listagem (para seleção múltipla), grupos de opção (para escolha de um entre vários relatórios), até um controle calendário (para a seleção de datas).

A personalização da Consulta Parâmetro, como descrito acima, torna o seu sistema muito mais enxuto, simpático e profissional. É sobre isso que falarei nesse artigo. Abordarei diversas maneiras de se solicitar um parâmetro ao usuário, de forma a tornar o seu sistema o mais amigável possível. Espero que goste do que será apresentado!

Um abraço,

Andréa de Carvalho Tikhomiroff


Inserindo Parâmetros em Consultas

Criar uma Consulta Parâmetro é bastante simples. Pode-se partir de uma Consulta Seleção qualquer, basta abri-la em modo estrutura e, na célula Critério de cada campo onde desejar inserir um parâmetro, digitar a mensagem desejada entre colchetes. Algo como:

[Digite a data desejada:]

Assim, ao executar a consulta, será exibida uma caixa de diálogo com a mensagem escolhida: Digite a data desejada:

Existem diversos tipos de parâmetros a serem usados. Conhecê-los bem é o primeiro passo para conseguir extrair da sua consulta a informação desejada. O Help do Access possui vários exemplos a respeito.


Entre ... E

Como

>

<

=

<>

>=

<=

É Nulo

É Negado Nulo

“”



Além, claro, de uma série de funções cujo resultado pode ser usado como critério (Direita, Esquerda, SeImed).

É importante também entender como funcionam os critérios E e OU. Se você determina que sua consulta mostrará clientes de nome JOÃO E sobrenome SILVA, apenas serão apresentados resultados que contenham AMBOS os critérios. Mas, se você selecionar clientes de nome JOÃO OU sobrenome SILVA, além dos resultados apresentados na primeira opção (JOÃO SILVA), ainda terá todos os nomes da família SILVA (Ana, Joaquim, José), bem como todas as variações do JOÃO (Souza, Camargo, Oliveira).

Um outro detalhe: use, sempre que necessário, o asterisco como caracter coringa. Existem outros, mas esse certamente é o mais usado. Ele facilita muito quando você não tem certeza da forma como algum nome foi digitado. Por exemplo: será que a cliente que quer localizar é Luisa, Luísa, Luiza ou Luíza... Cerqueira, Sequeira ou Siqueira? Se você usar um critério Como “Lu” & “*” & “queira”, certamente irá encontrá-la, não acha?


Criando Tabelas “de apoio”

Para que possamos fazer todos os testes necessários neste exemplo, sugiro a criação de duas tabelas “fictícias”, que servirão de apoio ou suporte às consultas que serão criadas. Após a criação das tabelas, não esqueça de estabelecer o relacionamento entre elas. Sugiro também que insira alguns dados para depois poder verificar o funcionamento das consultas.

Apenas uma observação: essas tabelas foram criadas apenas para fins de exemplo das consultas parâmetro, por isso não são tabelas normalizadas. Se assim fossem, teríamos uma tblBairro, uma tblMunicipio, e estas estariam ligadas à tblClientes pelas suas chaves, mas não chegaremos a tal nível de detalhamento. Não estamos discutindo modelagem de dados, apenas praticando formas de consulta.

1. tblClientes

a) IdCliente – autonumeração – chave primária

b) NomeCliente – texto

c) BairroCliente – texto

d) MunicipioCliente – texto

2. tblPedidos (ligada à tblClientes)

a) IdCliente – número – chave estrangeira

b) IdPedido – autonumeração – chave primária

c) DataPedido – data/hora (use o formato data abreviada)


Usando o Registro Atual como Critério

Toda empresa possui (ou deveria possuir) um cadastro de clientes. Desse cadastro são extraídas muitas informações como, por exemplo, os pedidos efetuados pelos clientes. Digamos que você queira visualizar apenas os pedidos de um determinado cliente. Você abre seu formulário, localiza o cliente, e clica num botão para gerar o relatório. Grande! Mas aí todos os pedidos, de todos os clientes são exibidos! Como fazer?

Você pode, tranqüilamente, fazer isso via código, se já tiver alguma experiência. Uma expressão SQL resolve o caso. Mas, caso ainda não domine o VBA ou, mesmo, se preferir, pode usar como critério da consulta algo como:


[Formulários]![NomeDoFormulário]![CampoChaveNoFormulário]


Duas observações aqui, com relação ao CampoChaveNoFormulário:

1. Nesse tipo de uso do critério, o correto é usar o campo chave (normalmente um campo autonumeração), porque é um identificador único do registro, o que impedirá que o relatório traga mais registros do que o desejado.

2. O nome do campo usado no critério deve ser o nome do campo no formulário. Observe que você pode ter um campo IDCliente na sua tabela que, no formulário, aparece como Texto0!

Vamos então, ver na prática como isso funciona? Faça o seguinte:

1. Crie um formulário que tenha como origem a tblClientes.

2. Feche o formulário, salvando-o (frmClientes).

3. Crie uma consulta no modo estrutura, incluindo as duas tabelas na grade de consulta.

4. Na linha de critério do campo IdCliente, digite [Formulários]! [frmClientes]![IdCliente].

5. Feche a consulta, salvando-a (qryCliente).

6. Crie um relatório que tenha como origem a qryCliente.

7. Feche o relatório, salvando-o (rptCliente).

8. Abra o frmClientes em modo estrutura.

9. Insira, com a ajuda do assistente, um botão de comando para visualizar o relatório rptCliente.


Criando um Formulário Pop-Up para Entrada de Critérios

Um formulário pop-up é uma excelente alternativa para a inserção de critérios. Além de muito flexível, ainda é bastante amigável, o que deixa seus usuários bastante confortáveis para usá-lo. Para criar um formulário pop-up, faça o seguinte:

1. Crie um formulário no modo estrutura. Não selecione nenhuma tabela ou consulta como Origem do Registro.

2. Altere as Propriedades da seguinte forma:

a) Modo padrão FORMULÁRIO SIMPLES

b) Barras de rolagem NENHUMA

c) Seletores de registro NÃO

d) Botões de navegação NÃO

e) Linhas divisórias NÃO

f) Pop-up SIM

g) Janela restrita SIM (se quiser, é como eu costumo usar)

h) Estilo da borda AJUSTÁVEL (por enquanto)

3. Disponha os controles que quiser. Nesse artigo, trataremos dos controles abaixo, mas veremos como inseri-los e tratá-los mais adiante. Não se preocupe por enquanto, ok?

a) Caixa de Texto (txtCriterio)

b) Caixa de Combinação (cmbCriterio)

c) Caixa de Listagem (lstCriterio)

d) Grupo de Opção (optcriterio)

e) Controle Calendário (calCriterio)

4. Alterne para o modo Formulário.

5. Ajuste as bordas até que fique do tamanho desejado.

6. Feche o formulário, salvando-o (frmCriterio).

7. Abra o formulário novamente em modo estrutura e altere a Propriedade Estilo da Borda para Diálogo.

Inserindo os Controles no Formulário

8. Abra o formulário frmCriterio no modo estrutura.

9. Insira um controle Caixa de Texto

a) Altere o nome do controle para txtCriterio.

b) Altere também o rótulo correspondente ao controle para “Digite aqui parte do nome do cliente que deseja consultar.”

c) Altere a propriedade Ativado para Não.

10. Insira um controle Caixa de Combinação sem usar o assistente. Altere as propriedades:

a) Nome - cmbCriterio

b) Origem da Linha – clique nos ... e selecione a tblClientes

(a) Insira o campo BairroCliente na grade de consulta

(b) Selecione a classificação Crescente

(c) Clique no símbolo de somatória na barra de ferramentas (Agrupar)

(d) Feche o construtor de consultas, clicando em Sim para salvar.

c) Limitar a uma lista - Sim

d) Ativado – Não

e) Altere o rótulo da caixa de combinação para “Selecione o bairro que deseja consultar.”

11. Insira um controle Caixa de Listagem sem usar o assistente. Altere as propriedades:

a) Nome – lstCriterio

b) Origem da Linha – clique nos ... e selecione a tblClientes

(a) Insira o campo MunicipioCliente na grade de consulta

(b) Selecione a classificação Crescente

(c) Clique no símbolo de somatória na barra de ferramentas (Agrupar)

(d) Feche o construtor de consultas, clicando em Sim para salvar.

c) Ativado – Não

d) Altere o rótulo da caixa de listagem para “Selecione o município que deseja consultar.”

12. Insira um controle Calendário.

a) Clique no botão “Mais Controles” na Caixa de Ferramentas

b) Selecione Calendar Control 9.0

c) Dimensione o calendário em seu formulário.

d) Altere a propriedade Nome para calCriterio.

e) Insira, sem o auxílio do assistente, um botão de comando cmdCriterio (altere o rótulo do botão para Marcar Data Inicial), e duas caixas de texto, txtDataInicial e txtDataFinal. Altere os rótulos das caixas para Data Inicial: e Data Final: respectivamente. Altere também a propriedade Formato de ambas as caixas para Data Abreviada.

f) Altere a propriedade Ativado de todos esses controles para Não.

13. Insira um controle Grupo de Opção, usando o assistente.

a) Insira os nomes dos rótulos das opções e clique em Avançar.

(a) Nome – Bairro – Município – Período

b) Selecione a opção “Não, eu não quero selecionar um padrão” e clique em Avançar.

c) Clique novamente em Avançar.

d) Escolha o formato que desejar e novamente clique em Avançar.

e) Digite Selecione o relatório desejado: e clique em Concluir.

f) Altere o nome do controle para optCriterio.

g) Feche o formulário, salvando as alterações.


Automatizando o Uso do Controle Calendário

1. Abra o frmCriterio em modo estrutura.

2. No evento AoAbrir do formulário, coloque o seguinte código:


Me.calCriterio.Value = Now()


3. No evento AoClicar do botão cmdCriterio, coloque o seguinte código:


If Me.cmdCriterio.Caption = "Marcar data inicial" Then

Me.txtDataInicial = Me.calCriterio.Value

Me.cmdCriterio.Caption = "Marcar data final"

Else

Me.txtDataFinal = Me.calCriterio.Value

If Me.txtDataFinal < Me.txtDataInicial Then

MsgBox "A Data Final deve ser posterior à Data Inicial."

Undo

Else

Me.cmdCriterio = "Marcar data inicial"

End If

End if


4. Feche o formulário, salvando-o.


Criando as Consultas com Base nos Campos Criados

1. Crie uma nova consulta no modo estrutura.

2. Insira as tabelas tblClientes e tblPedidos na grade da consulta.

3. Insira todos os campos da tblClientes e os campos IdPedido e DataPedido da tblPedidos.

4. Na linha Critério abaixo do campo NomeCliente, coloque Como “*” & Formulários!frmCriterio!txtCriterio & “*”.

5. Feche a consulta salvando-a (qryNome).

6. Refaça os passos 1 a 3 para criar uma nova consulta.

7. Na linha Critério abaixo do campo BairroCliente, coloque Formulários!frmCriterio!cmbCriterio.

8. Feche a consulta salvando-a (qryBairro).

9. Refaça os passos 1 a 3 para criar uma nova consulta.

10. Na linha Critério abaixo do campo MunicipioCliente, coloque Formulários!frmCriterio!lstCriterio.

11. Feche a consulta salvando-a (qryMunicipio)

12. Refaça os passos 1 a 3 para criar uma nova consulta.

13. Na linha Critério abaixo do campo DataPedido, coloque Entre Formulários!frmCriterio!txtDataInicial E Formulários!frmCriterio! txtDataFinal.

14. Feche a consulta salvando-a (qryPeriodo).


Mostrando Todos os Registros

Uma boa opção que pode ser oferecida aos seus usuários, é a de mostrar todos os registros quando nenhum critério for selecionado. Vamos fazer isso na qryNome. Abra-a em modo estrutura e modifique o critério para que fique assim:


Como "*" & [Formulários]![frmCriterio]![txtCriterio] & "*" Ou (Como "*" & [Formulários]![frmCriterio]![txtCriterio] & "*") É Nulo


Feche a consulta, salvando as alterações.


Criando os Relatórios

Crie, com o auxílio do assistente, relatórios para cada uma das consultas criadas anteriormente. Chame-os de rptNome, rptBairro, rptMunicipio e rptPeriodo.

Muitas vezes, é preciso que um determinado critério seja impresso no relatório. Por exemplo, no relatório por período, pode ser interessante mostrar a que período ele se refere. Para isso:

1. Abra o rptPeriodo em modo estrutura.

2. Insira uma caixa de texto não acoplada (txtPeriodo).

3. Na propriedade Origem do Controle digite ="Relatório de " & Formato([Formulários]![frmCriterio]![txtCriterio];"Data abreviada") & " a " & Formato([Formulários]![frmCriterio]! [txtDataFinal];"Data abreviada")

4. Para que essa caixa funcione corretamente, é necessário que o formulário frmCriterio esteja aberto. Assim, será necessário incluir, no evento Ao Fechar do relatório, a seguinte instrução DoCmd.Close acForm, “frmCriterio”, acSaveYes.

5. Feche o relatório, salvando-o.


Usando um Grupo de Opção para Selecionar um Relatório

Uma das ferramentas mais interessantes para seleção de relatórios, na minha opinião, é o grupo de opção. Vamos usá-lo aqui para determinar que relatório irá abrir e qual critério deve ser solicitado.

1. Abra o frmCriterio em modo estrutura.

2. Insira uma caixa de texto (txtRelatorio) com a propriedade Visível = Não

3. Clique na moldura do grupo de opção optCriterio.

4. No evento ApósAtualizar, coloque o seguinte código:


Me.txtRelatorio = Me.optCriterio

Select Case Me.optCriterio

Case 1

Me.txtCriterio.Enabled = True

Me.cmbCriterio.Enabled = False

Me.lstCriterio.Enabled = False

Me.calCriterio.Enabled = False

Me.cmdCriterio.Enabled = False

Me.txtDataInicial.Enabled = False

Me.txtDataFinal.Enabled = False

Me.txtCriterio.SetFocus

Case 2

Me.txtCriterio.Enabled = False

Me.cmbCriterio.Enabled = True

Me.lstCriterio.Enabled = False

Me.calCriterio.Enabled = False

Me.cmdCriterio.Enabled = False

Me.txtDataInicial.Enabled = False

Me.txtDataFinal.Enabled = False

Me.cmbCriterio.SetFocus

Case 3

Me.txtCriterio.Enabled = False

Me.cmbCriterio.Enabled = False

Me.lstCriterio.Enabled = True

Me.calCriterio.Enabled = False

Me.cmdCriterio.Enabled = False

Me.txtDataInicial.Enabled = False

Me.txtDataFinal.Enabled = False

Me.lstCriterio.SetFocus

Case 4

Me.txtCriterio.Enabled = False

Me.cmbCriterio.Enabled = False

Me.lstCriterio.Enabled = False

Me.calCriterio.Enabled = True

Me.cmdCriterio.Enabled = True

Me.txtDataInicial.Enabled = True

Me.txtDataFinal.Enabled = True

Me.calCriterio.SetFocus

End Select


5. Insira, com o auxílio do assistente, um botão de comando para fechar o formulário (cmdFechar). Altere a propriedade Cancelar do botão para Sim.

6. Insira, sem o auxílio do assistente, um outro botão de comando (cmdAbrirRelatorio). No evento AoClicar, insira o seguinte código:


Select Case Me.txtRelatorio

Case 1

DoCmd.OpenReport "rptNome", acViewPreview

DoCmd.Close acForm, "frmCriterio", acSaveYes

Case 2

DoCmd.OpenReport "rptBairro", acViewPreview

DoCmd.Close acForm, "frmCriterio", acSaveYes

Case 3

DoCmd.OpenReport "rptMunicipio", acViewPreview

DoCmd.Close acForm, "frmCriterio", acSaveYes

Case 4

If IsNull(Me.txtDataInicial) Or IsNull(Me.txtDataFinal) Then

MsgBox "É preciso determinar o período do relatório", vbOKOnly, "Atenção!"

Else

Me.Visible = False

DoCmd.OpenReport "rptPeriodo", acViewPreview

End If

End Select


7. Feche o formulário, salvando-o.

Indo Além... Múltipla Escolha em Caixa de Listagem

A caixa de listagem tem uma característica a mais, que a diferencia bastante da caixa de combinação: nela é possível selecionar vários itens, usando as teclas Shift (para seleção contínua) ou Ctrl (para seleção aleatória) enquanto “clica” nos itens desejados. Como fazer isso? É o que vamos ver agora.

1. Abra o formulário frmCriterio em modo estrutura.

2. Selecione a caixa de listagem lstCriterio.

3. Altere a propriedade Seleções Múltiplas para Estendida.

4. Copie o código abaixo no final do módulo do formulário. Ele contém a mesma função duas vezes: uma para campo numérico e uma para campo texto, que é a que usaremos realmente nesse exemplo.


Public Sub SelecionaMult(cmb As Control, sCampo As String,_

NomeRel As String)

'Para abrir Formulários ou Relatorios com valores selecionados

'Autor: Carlos Moura em 10/08/98 e-mail: crpmoura@ig.com.br

'Num formulario com uma caixa de seleção múltipla



Dim obj As Object, i As Integer, strVal As String

Dim strWhere As String

Set obj = cmb

For i = 0 To obj.ListCount - 1

'Stop

If obj.Selected(i) Then

'Aqui você concatena do jeito que quiser

'Para valor campo string = strVal & "'" & ",'"

'Para valor campo numerico = strVal & ","

If Len(strVal) Then strVal = strVal & ","

strVal = strVal & obj.ItemData(i)

End If

Next



'Aqui é montada a causa WHERE

'Para valor campo string strWhere = sCampo & " In('" & strVal & "')

'Para valor campo numerico strWhere = sCampo & " In(" & strVal & ")

'MeuCampo é o sCampo de relatorio que será filtrado

strWhere = sCampo & " In(" & strVal & ")"



'Aqui voce abre o relatorio somente com os valores selecionadas

DoCmd.OpenReport NomeRel, A_PREVIEW, , strWhere

End Sub



Public Sub SelecionaMultS(cmb As Control, sCampo As String, _ NomeRel As String)

'Para abrir Formulários ou Relatorios com valores selecionados

'Autor: Carlos Moura em 10/08/98 e-mail: crpmoura@ig.com.br

'Num formulario com uma caixa de seleção múltipla



Dim obj As Object, i As Integer, strVal As String

Dim strWhere As String

Set obj = cmb

For i = 0 To obj.ListCount - 1

'Stop

If obj.Selected(i) Then

'Aqui você concatena do jeito que quiser

'Para valor campo string = strVal & "'" & ",'"

'Para valor campo numerico = strVal & ","

If Len(strVal) Then strVal = strVal & "'" & ",'"

strVal = strVal & obj.ItemData(i)

End If

Next



'Aqui é montada a causa WHERE

'Para valor campo string strWhere = sCampo & " In('" & strVal & "')

'Para valor campo numerico strWhere = sCampo & " In(" & strVal & ")

'MeuCampo é o sCampo de relatorio que será filtrado

strWhere = sCampo & " In('" & strVal & "')"



'Aqui voce abre o relatorio somente com os valores selecionadas

DoCmd.OpenReport NomeRel, A_PREVIEW, , strWhere

End Sub


5. Altere o código do Select Case que se refere à caixa de listagem, substituindo DoCmd.OpenReport "rptMunicipio", acViewPreview para Call SelecionaMultS(lstCriterio, "MunicipioCliente", "rptMunicipio").

6. No menu Depurar, selecione Compilar SeuProjeto.

7. Feche o módulo e o formulário, salvando-o.

8. Abra a consulta qryMunicipio em modo estrutura e elimine o critério.

9. Feche a consulta, salvando-a.


Para encerrar...

Pronto! Você agora já está pronto para efetuar todos os testes que quiser. Agora é hora de experimentar, tentar usar outros critérios, para deixar seus sistemas cada vez mais profissionais e amigáveis para o usuário.

Parametro.zip

Até a próxima!

Links relacionados:
http://

Artigos relacionados:
   Automação comercial parte IV  (Automação)




 

   Copyright © Ativo Access 2003 - 2021- Todos os direitos reservados   Política de Privacidade | Fale conosco