Notifications
Clear all

Pesquisa - SQL Cláusula Where

13 Posts
3 Usuários
0 Reactions
2,110 Visualizações
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Caros,

É possível fazer com que uma query ignore variáveis em branco?

Seguinte, tenho uma série de variáveis que são carregas com itens de uma tabela que (podem ou não existir), se existir então essa variável recebe seu valor, do contrário fica vazia.

Por exemplo, vou consultar conforme descrito abaixo. Mas pode ser que a variável nMicroregiao esteja vazia. Isso tem me avacalhado.

sql = " SELECT * FROM Cadastro "
sql = sql & " WHERE Bandeira = '" & nBandeira & "' and Marketing01 = '" & "Verdadeiro" & "' and Distancia = '" & nDistancia & "' and Rota = '" & nRota & "' and Estado = '" & nEstado & "' and Cidade = '" & nCidade & "' and Microregiao = '" & nMicroregiao & "'"

Se conseguiram entender e puderem propor algo, sou grato antecipadamente.

At

 
Postado : 13/12/2012 2:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Procure utiizar Null :

SQL NULL Functions
http://www.w3schools.com/sql/sql_null_values.asp
http://www.w3schools.com/sql/sql_isnull.asp

VBA / SQL Data where field is NULL
http://www.excelcoder.freehostingcloud. ... ld-is-NULL

[]s

 
Postado : 13/12/2012 2:56 pm
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Procure utiizar Null :

SQL NULL Functions
http://www.w3schools.com/sql/sql_null_values.asp
http://www.w3schools.com/sql/sql_isnull.asp

VBA / SQL Data where field is NULL
http://www.excelcoder.freehostingcloud. ... ld-is-NULL

[]s

Mauro,

Entendi mas não consegui aplicar.
Quero usar IS NOT NULL ou seja, não quero considerar campos vazios na pesquisa para a coluna Microregiao, então coloquei IS NOT NULL a frente da coluna, mas o erro persiste. Eu a coloquei no lugar errado?

Outra coisa, teria como expandir essa regra para todas as colunas?

sql = " SELECT * FROM Cadastro "
sql = sql & " WHERE Bandeira = '" & nBandeira & "' and Marketing01 = '" & "Verdadeiro" & "' and Distancia = '" & nDistancia & "' and Rota = '" & nRota & "' and Estado = '" & nEstado & "' and Cidade = '" & nCidade & "' and Microregiao IS NOT NULL = '" & nMicroregiao & "'"

At

 
Postado : 14/12/2012 6:30 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tambem Voce pode "tratar" a variavel
If nMicroregiao ="" then '(ou if isnull(nMicroregiao )
nMicroregiao ="*"
else
nMicroregiao =nMicroregiao
end if

Então ao executar a qry, se houver vlr irá "filtrar" caso não trará tudo

 
Postado : 14/12/2012 9:05 am
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Tambem Voce pode "tratar" a variavel
If nMicroregiao ="" then '(ou if isnull(nMicroregiao )
nMicroregiao ="*"
else
nMicroregiao =nMicroregiao
end if

Então ao executar a qry, se houver vlr irá "filtrar" caso não trará tudo

Reinaldo,

A idéia de tratar a variável é boa, mas o comando não surtiu efeito.

At

 
Postado : 14/12/2012 10:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como é obtida a variavel? Onde inseriu o "comando"

   
If nMicroregiao ="" then '(ou if isnull(nMicroregiao )
      nMicroregiao ="*"
else
      nMicroregiao =nMicroregiao
end if

 sql = " SELECT * FROM Cadastro "
    sql = sql & " WHERE Bandeira = '" & nBandeira & "' and Marketing01 = '" & "Verdadeiro" & "' and Distancia = '" & nDistancia & "' and Rota = '" & nRota & "' and Estado = '" & nEstado & "' and Cidade = '" & nCidade & "' and Microregiao = '" & nMicroregiao & "'"
 
Postado : 14/12/2012 11:15 am
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Como é obtida a variavel? Onde inseriu o "comando"

   
If nMicroregiao ="" then '(ou if isnull(nMicroregiao )
      nMicroregiao ="*"
else
      nMicroregiao =nMicroregiao
end if

 sql = " SELECT * FROM Cadastro "
    sql = sql & " WHERE Bandeira = '" & nBandeira & "' and Marketing01 = '" & "Verdadeiro" & "' and Distancia = '" & nDistancia & "' and Rota = '" & nRota & "' and Estado = '" & nEstado & "' and Cidade = '" & nCidade & "' and Microregiao = '" & nMicroregiao & "'"

A variável é obtida de outra tabela.

Ficou assim:

sql = " SELECT * FROM Cronogramas "
sql = sql & " WHERE Data = #" & Format$(Date, "mm/dd/yyyy") & "# and Auditor = '" & Userform1.Auditor .Text & "'"

cx.Conectar

On Error Resume Next
banco.Open sql, cx.Conn

Dim nMicroregiao As String

nMicroregiao = banco.Fields("Microregiao")

If nMicroregiao = "" Then
nMicroregiao = "*"
Else
nMicroregiao = nMicroregiao 
End If

sql = " SELECT * FROM Cadastro "
sql = sql & " WHERE Bandeira = '" & nBandeira & "' and Marketing01 = '" & "Verdadeiro" & "' and Distancia = '" & nDistancia & "' and Rota = '" & nRota & "' and Estado = '" & nEstado & "' and Cidade = '" & nCidade & "' and Microregiao = '" & nMicroregiao & "'"

Alguma outra sugestão?

 
Postado : 14/12/2012 12:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi o metodo de seleção/carregamento da variavel nmicro...; pois não há nenhum critério.
Pelo exposto anteriormente deveria funcionar, como não funciona, pode ser que outro fator esteja interferindo no select, ai so acompanhando a execução da rotina como um todo.

 
Postado : 14/12/2012 1:52 pm
(@gamboaisrael)
Posts: 68
Trusted Member
 

Não tive como testar. O problema é só com a variável microregiao? Se for, veja se ajuda:

sql = " SELECT * FROM Cronogramas "
sql = sql & " WHERE Data = #" & Format$(Date, "mm/dd/yyyy") & "# and Auditor = '" & Userform1.Auditor .Text & "'"

cx.Conectar

On Error Resume Next
banco.Open sql, cx.Conn

Dim nMicroregiao As String
Dim sCondicao As String

nMicroregiao = banco.Fields("Microregiao")

If nMicroregiao <> "" Then
sCondicao = "Bandeira = '" & nBandeira & "' and Marketing01 = '" & "Verdadeiro" & "' and Distancia = '" & nDistancia & "' and Rota = '" & nRota & "' and Estado = '" & nEstado & "' and Cidade = '" & nCidade & "' and Microregiao = '" & nMicroregiao & "'"
Else: sCondicao = "Bandeira = '" & nBandeira & "' and Marketing01 = '" & "Verdadeiro" & "' and Distancia = '" & nDistancia & "' and Rota = '" & nRota & "' and Estado = '" & nEstado & "' and Cidade = '" & nCidade & "'"
End if

sql = " SELECT * FROM Cadastro "
sql = sql & " WHERE " & "'" & sCondicao & "'"
 
Postado : 15/12/2012 7:33 pm
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Reinaldo,

O metódo de seleção é: Ir na tabela Cronogramas, verificar se existe lançamento para o dia e o usuário, se isso estiver correto, então carrega-se várias variáveis que servirão de parametros para o trabalho daquele dia. Eu citei no meu exemplo apenas a microregiao, mas existem outras. Até ae está tudo certo, algumas variáveis são preenchidas outras não.

Só gostaria de saber como tratar variáveis vazias numa pesquisa utilizando a cláusula where.

Israel,

Não entendi sua sugestão.

Agradeço as respostas, continuo pesquisando...

At

 
Postado : 17/12/2012 5:59 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Existem varia maneiras para "tratar" variaveis;
Uma é a que foi passada inicialmente (Se a variavel for vazia, variavel ="*" (normalmente qq valor)), outra e conforme a sugestão do gamboisrael.
Como vc disse que pode ter mais de uma "vazia", creio que o melhor seria montar a clausula where variavel por variavel:

'montagem da clausula where em steps
If nBandeira <> "" Then
    sCondicao = "Bandeira = '" & nBandeira
Else
    sCondicao = ""
End If

If nBandeira <> "" Then
    sCondicao = sCondicao & " ' and Marketing01 = '" & "Verdadeiro"
Else
    sCondicao = sCondicao
End If
'.......assim com todas as variaveis

    Sql = " SELECT * FROM Cadastro "
    Sql = Sql & " WHERE " & "'" & sCondicao & "'"
 
Postado : 17/12/2012 7:21 am
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Bem...montar uma query para cada variável era minha primeira alternativa, "meio suja", desgasante, extensa, etc, etc...mas se não tem outro jeito, não posso parar porque esse detalhe. Quando souber faço novamente.

Obrigado e até mais.

At

 
Postado : 17/12/2012 9:01 am
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Caros,

Retorno ao tópico para compartilhar a solução obtida em outro fórum.
Pesquisei bastante na web, li muitas coisas mas nada havia solucionado esse problema, então achei relevante o tema e é preciso deixá-lo para consultas futuras.

Muito obrigado aos que propuseram alternativas.

http://www.excelforum.com/excel-program ... olved.html

At

 
Postado : 20/12/2012 7:00 am