Usuário com melhor resposta
Buscas SQL Server

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?
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
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"
-
-
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
-