none
Buscas SQL Server RRS feed

  • Pergunta

  • Olá minha gente

    Estou querendo fazer uma pesquisa SQL Server por coluna. Estou usando:

                        Dim sql As String = "SELECT " & ColunasExibidas_Pedidos & " FROM Pedidos WHERE PedidoNum LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " OR Cliente LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " OR TotalRS LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " OR Data LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " AND ComprasOuVendas LIKE 'Vendas'" &
                                      " AND OrcamentoOuPedido LIKE 'Pedido' ORDER by Data ASC"

    Digito oque quero procurar em "txtBuscar.Text", e é exibido todas as linhas que tiverem os caracteres em qualquer das colunas "PedidoNum, Cliente, TotalRS ou Data", funciona corretamente.

    No entanto preciso SEMPRE filtrar por "ComprasOuVendas" e  "OrcamentoOuPedido".

    A questão é que mesmo "ComprasOuVendas"estar definida como "Vendas" e "OrcamentoOuPedido" como "Pedido" exibe outros itens também.

    Qual seria a ordem ou uso correto (usando o SELECT) para buscar em todas as colunas informadas usando "ComprasouVendas" e "OrcamentoOuPedido" fixo?

    terça-feira, 2 de fevereiro de 2016 00:17

Respostas

  • Kra, acredito que o seu problema está na ordem que os argumentos em "WHERE" são processados. Se você não especificar parênteses, ele fara a combinação dos argumentos "AND" (es estão no final) apenas com o último argumento após o "OR".

    Para ficar correto deveria ser algo assim:

    Dim sql As String = "SELECT " & ColunasExibidas_Pedidos & " FROM Pedidos WHERE (PedidoNum LIKE '%" & txtBuscar.Text.Trim & "%'" &
    " OR Cliente LIKE '%" & txtBuscar.Text.Trim & "%'" &
    " OR TotalRS LIKE '%" & txtBuscar.Text.Trim & "%'" &
    " OR Data LIKE '%" & txtBuscar.Text.Trim & "%'" &
    ") AND ComprasOuVendas LIKE 'Vendas'" &
    " AND OrcamentoOuPedido LIKE 'Pedido' ORDER by Data ASC"

    Note que os parênteses agrupam todos os "OR" como um argumento só. Então para o SQL o pensamento é "o resultado de PedidoNum OU Cliente OU TotalRS OU Data, ai então E ComprasOuVendas E OrcamentoOuPedido". Do outro jeito era "OU PedidoNum, OU Cliente, OU TotalRS OU o resultado de Data E ComprasOuVendas E OrcamentoOuPedido".

    Tente agora.

    • Sugerido como Resposta SammuelMiranda terça-feira, 2 de fevereiro de 2016 16:46
    • Marcado como Resposta Eliseu5 terça-feira, 2 de fevereiro de 2016 17:27
    terça-feira, 2 de fevereiro de 2016 16:46

Todas as Respostas

  • Isto está acontecendo por você estar usando o operador LIKE nesses campos, então qualquer coisa que se pareça com "Vendas" ou "Pedido" em qualquer registro vai aparecer. Para o seu caso, simplesmente troque o LIKE por sinal de igual, assim:

    0
    Votar
    Olá minha gente
    
    Estou querendo fazer uma pesquisa SQL Server por coluna. Estou usando:
    
                        Dim sql As String = "SELECT " & ColunasExibidas_Pedidos & " FROM Pedidos WHERE PedidoNum LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " OR Cliente LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " OR TotalRS LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " OR Data LIKE '%" & txtBuscar.Text.Trim & "%'" &
                                      " AND ComprasOuVendas = 'Vendas'" &
                                      " AND OrcamentoOuPedido = 'Pedido' ORDER by Data ASC"

    • Sugerido como Resposta SimorC terça-feira, 2 de fevereiro de 2016 08:25
    • Marcado como Resposta Marcos SJ terça-feira, 2 de fevereiro de 2016 12:23
    • Não Marcado como Resposta Eliseu5 terça-feira, 2 de fevereiro de 2016 15:38
    terça-feira, 2 de fevereiro de 2016 01:28
  • Olá Kerplunk

    Obrigado pela ajuda. Fiz exatamente oque você sugeriu mas não resolveu, nas buscas continua aparecendo resultados que não deveriam (ComprasOuVendas = "Compras")

    :/

    terça-feira, 2 de fevereiro de 2016 15:46
  • Kra, acredito que o seu problema está na ordem que os argumentos em "WHERE" são processados. Se você não especificar parênteses, ele fara a combinação dos argumentos "AND" (es estão no final) apenas com o último argumento após o "OR".

    Para ficar correto deveria ser algo assim:

    Dim sql As String = "SELECT " & ColunasExibidas_Pedidos & " FROM Pedidos WHERE (PedidoNum LIKE '%" & txtBuscar.Text.Trim & "%'" &
    " OR Cliente LIKE '%" & txtBuscar.Text.Trim & "%'" &
    " OR TotalRS LIKE '%" & txtBuscar.Text.Trim & "%'" &
    " OR Data LIKE '%" & txtBuscar.Text.Trim & "%'" &
    ") AND ComprasOuVendas LIKE 'Vendas'" &
    " AND OrcamentoOuPedido LIKE 'Pedido' ORDER by Data ASC"

    Note que os parênteses agrupam todos os "OR" como um argumento só. Então para o SQL o pensamento é "o resultado de PedidoNum OU Cliente OU TotalRS OU Data, ai então E ComprasOuVendas E OrcamentoOuPedido". Do outro jeito era "OU PedidoNum, OU Cliente, OU TotalRS OU o resultado de Data E ComprasOuVendas E OrcamentoOuPedido".

    Tente agora.

    • Sugerido como Resposta SammuelMiranda terça-feira, 2 de fevereiro de 2016 16:46
    • Marcado como Resposta Eliseu5 terça-feira, 2 de fevereiro de 2016 17:27
    terça-feira, 2 de fevereiro de 2016 16:46
  • Olá Sammuel

    Funcionou perfeitamente, e entendi a lógica. :)

    Muito obrigado, você é show ;)

    terça-feira, 2 de fevereiro de 2016 17:29