• 0
Sign in to follow this  
Elber Carretoni

Pesquisa Avançada (com Vários Critérios Simultâneamente)

Question

Gracias galera!

boa noite!

Estou pensando em criar um formulário em que o usuário possa efetuar uma filtragem de dados de determinada tabela selecionando critérios simultâneamente e digitando seus respectivos valores procurados.

Portanto, pensei na seguinte hipótese:

Criaria um formulário (FormPesquisa) independente, com objetos checkbox (critérios) e campos não acoplados a fim de solicitar as informações ao usuário para efetuar uma filtragem avançada de dados!

O usuário pode efetuar a filtragem de dados através de vários critérios assinalados simultaneamente...a verificação de quais critérios o usuário assinalou e à determinação da instrução SQL já tenho em mente através de VB.

Criaria uma consulta com todos os campos da tabela (ConsultaPesquisa) e esta colocaria como subformulário não ativado no formulário 'FomPesquisa', a fim de gerar um efeito apenas de visualização de dados filtrados (DBGrid).

Porém, tenho dúvidas de como mandar a instrução sql gerada por progamação (armazenada em uma variável string) para a ConsultaPesquisa.

A idéia planejada daria certo?

Além disso, tenho dúvidas de como determinar por VBA quando uma checkbox está checada ou não. Em DELPHI a instrução era CHECKBOX.CHECKED. Fiz os testes e, portanto, no VBA não consigo determinar tal propriedade. Alguém poderia ainda me dar uma luz sobre as propriedades de uma checkbox?

Sou fraco em consultas através de access. Mas acredito que a idéia dê certo!

Só gostaria de umas dicas, alguns procedimentos, ressalvas...enfim...AJUDA aí?

desde já agradeço a força...

Abraços! :blink:

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

galera,

sobre as propriedades da checkbox já consegui uma solução...

em vez de checkbox.checked (conforme delphi), em vb se usa apenas checkbox.value = True/False!

a dúvida agora é mandar uma instrução em sql (determinada por uma variável string do vb) para uma consulta do access!!! Alguém sabe aí??? :unsure:

Share this post


Link to post
Share on other sites
  • 0

Do ponto de vista do vba, uma sql é na realidade uma string.

Strings devem necessariamente ser delimitadas por aspas, simples ou duplas.

Então, se há a possibilidade dos dados apresentarem no seu conteúdo aspas simples, necessariamente o delimitador para a string de sql deve ser aspas duplas.

Quando a construção da sql se dá em tempo de execução, concatenando sequências com o conteúdo de variáveis, devemos ainda prestar atenção para inserir aspas em torno de literais. Por exemplo:

Dim nome as string

dim sql as string

nome = "Caixa d'agua"

sql = "SELECT * FROM tabela "

sql = sql & "WHERE nome = " & nome

deste jeito, o conteúdo da variável sql sera:

SELECT * FROM tabela WHERE nome = Caixa d'agua

Para o "motor" de sql do access, nome, caixa, d'agua serão tratados como a mesma coisa. O access irá tentar comparar o conteúdo do campo nome com o conteúdo do campo caixa (peraí, não encontrei nenhum campo com nome caixa! ... e d'agua, o que será que é pra fazer com isto?).

Para não dar um nó no interpretador de sql é que se limitam literais entre aspas, simples ou duplas.

Então, como estamos usando aspas duplas para delimitar o conteúdo de nossa variável, para não complicar, vamos usar aspas simples para delimitar valores dentro desta variável. O primeiro exemplo ficará assim:

sql = "SELECT * FROM tabela "

sql = sql & "WHERE nome = '" & nome & "'"

Se o conteudo da variavel fosse "Roberto", o conteúdo da variável sql ficaria assim:

SELECT * FROM tabela WHERE nome = 'Roberto'

Perfeito. Se houver um campo nome com conteúdo igual a "Roberto", será encontrado.

MAs para

nome = "Caixa d'agua", nossa sql resultaria neste conteúdo:

SELECT * FROM tabela WHERE nome = 'Caixa d'agua'

com aspas obviamente não balanceadas, causando um erro semelhante ao primeiro exemplo.

Então, corrigindo o segundo exemplo, trocando as aspas simples como delimitador de literais por aspas duplas, e prestando atenção para que estas aspas duplas não sejam confundidas com as aspas duplas que delimitam a sql, chegamos a mais um exemplo:

sql = "SELECT * FROM tabela "

sql = sql & "WHERE nome = """ & nome & """"

O que aparentemente parece um exagero de aspas, criará como conteúdo para a variável sql, assumindo de novo "caixa d'agua" como o conteúdo da variável nome a seguinte expressão:

SELECT * FROM tabela WHERE nome = "Caixa d'agua"

uma expressão correta!

_____________________________

Créditos para Roberto Spier, através de pesquisa achei essa explicação e acho que deve resolver seu problema!

Share this post


Link to post
Share on other sites
  • 0

ótimo post...perfeito ao entendimento...

quando estava lendo sobre o mesmo lembrei-me que em Delphi também colocava-se quatro aspas seguidas...

pra ser bem sincero não lembrava-me o porque das 4 aspas seguidas...agora tá jóia!rsrs

vlw a força mrMalj!!

mas ainda tenho um problema principal...

após determinar uma instrução sql conforme os exemplos e tals, enfim, como eu mando essa variável string com a instrução sql para a consulta? entendeu? mandar o critério de pesquisa e fazer executar a pesquisa....

estive pensando, e reparei que em vba existe a função docmd.RunSQL...se eu executar uma instrução sql indicando a própria tabela principal e não a consulta, e no meu formulário colocasse um subformulário com a determinada tabela, daria certo?

ainda não fiz os testes...mas to trabalhando nisso...

de qualquer forma, se você tiver um parecer ou alguma outra dica, por favor...

abração! fique com Deus...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this