BUSCA EXATA COM VRIOS CRITRIOS

 Tópico anterior Próximo tópico Novo tópico

BUSCA EXATA COM VRIOS CRITRIOS

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#490840 - 18/10/2019 17:45:09

WELISSON
CACHOEIRO DE ITAPEMIRIM
Cadast. em:Junho/2017


Boa tarde!

Tenho esse cdigo SQL, que me permite buscar por vrios critrios:

SELECT TBProduto .*, TBEstoque .* FROM TBEstoque INNER JOIN TBProduto On TBEstoque.IdProduto = TBProduto.Id WHERE (Quantidade < EstoqueMin AND Codigo Like []%[] + ?  AND Tamanho  Like []%[] + ? AND Referencia Like []%[] + ?  AND Descricao LIKE []%[] + ? + []%[] ) Order By Codigo,Tamanho, Referencia Asc  


Ao usar o operador
  Like []%[]
, o sistema no me retorna valores exatos em algumas buscas. Sei que isso devido a
[]%[]
. Porem ao remove-lo,
necessrio digitar todos os campos para retornar os registros. Eu preciso que essa busca seja exata, mas porem que ele filtre os registros
caso apenas um campo for informado, ou retorne tudo se nada for informado.

Existe uma forma de fazer isso, usando o  = ou apenas o LIKE sem % ?



#490842 - 18/10/2019 18:03:23

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
1 - LIKE um operador para strings, no deveria ser usado com numricos. como dizer []parecido com[] ou []que contenha[]. Algo assim:

SELECT * FROM Clientes WHERE Nome LIKE []%fernando%[]

Traduzindo seria: Selecione todos os registros de Clientes onde o Nome contenha []Fernando[]
2 - Por ser mais genrico e trazer valores []parecidos[] como o seu critrio, obviamente a busca no ser exata. Para isso existe o operador []=[]. Mais ou menos assim:

SELECT TBProduto .*, TBEstoque .* FROM TBEstoque INNER JOIN TBProduto On TBEstoque.IdProduto = TBProduto.Id WHERE (Quantidade < EstoqueMin AND Codigo = ?  AND Tamanho  = ? AND Referencia = ?  AND Descricao = ?) Order By Codigo,Tamanho, Referencia Asc  



_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#490843 - 18/10/2019 18:39:50

WELISSON
CACHOEIRO DE ITAPEMIRIM
Cadast. em:Junho/2017


Citação:
:
1 - LIKE um operador para strings, no deveria ser usado com numricos. como dizer []parecido com[] ou []que contenha[]. Algo assim:

SELECT * FROM Clientes WHERE Nome LIKE []%fernando%[]

Traduzindo seria: Selecione todos os registros de Clientes onde o Nome contenha []Fernando[]
2 - Por ser mais genrico e trazer valores []parecidos[] como o seu critrio, obviamente a busca no ser exata. Para isso existe o operador []=[]. Mais ou menos assim:

SELECT TBProduto .*, TBEstoque .* FROM TBEstoque INNER JOIN TBProduto On TBEstoque.IdProduto = TBProduto.Id WHERE (Quantidade < EstoqueMin AND Codigo = ?  AND Tamanho  = ? AND Referencia = ?  AND Descricao = ?) Order By Codigo,Tamanho, Referencia Asc  



KERPLUNK assim funciona perfeitamente! Mas necessrio informar todos os campos, preciso
que ele filtre se o usurio no informar outros critrios.




#490845 - 18/10/2019 19:45:32

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Ah bom, da voc vai ter que ir montando sua query conforme os campos preenchidos, uma clusula WHERE dinmica. A que um ORM bom brilha. Ao invs de usar assim to artesanal, experimente algo como Entity Framework ou mesmo Dapper

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#490846 - 18/10/2019 20:01:51

WELISSON
CACHOEIRO DE ITAPEMIRIM
Cadast. em:Junho/2017


Citação:
:
Ah bom, da voc vai ter que ir montando sua query conforme os campos preenchidos, uma clusula WHERE dinmica. A que um ORM bom brilha. Ao invs de usar assim to artesanal, experimente algo como Entity Framework ou mesmo Dapper

kkkkkkkkkk Que tristeza :(

Estou estudando ORM, mas a frente estarei aplicando!



#490854 - 20/10/2019 07:22:24

NICKOSOFT
SANTO ANDRE
Cadast. em:Maio/2009


muitas vezes monto a query pelo preenchimento de campos como foi dito, no morre fazendo isso e vai resolver......

Cada dia vejo surgirem novos []programadores[] de cdigo pronto aqui



#490882 - 22/10/2019 02:32:43

WELISSON
CACHOEIRO DE ITAPEMIRIM
Cadast. em:Junho/2017


Citação:
:
muitas vezes monto a query pelo preenchimento de campos como foi dito, no morre fazendo isso e vai resolver......


Ento, criei algumas condies no cdigo mesmo. Dessa forma concateno o sql
de acordo com a busca do usurio, tipo isso:


  var criterio = [][];

                if (numeroAtividade != [][])
                    criterio += [] And Id Like @Id[];

                if (tipo != [][])
                    criterio += [] And Tipo LIKE @Tipo[];

                if (operacao != [][])
                    criterio += [] And Situacao LIKE @Situacao[];

                commandSQL += criterio;


No a forma mais elegante, mas s por enquanto. S que agora me deparei com outro problema, pois
esse mesmo filtro deve ser feito para gerar o relatrio no reportvier. Porem os comandos sql fao direto no
TableAdapter do dataset.

Voc sabe me dizer como posso passar o cdigo sql para o TableAdapter a parti de uma classe? Sem digitar
diretamente no objeto?




#490885 - 22/10/2019 10:35:23

NICKOSOFT
SANTO ANDRE
Cadast. em:Maio/2009


se na criao/preenchimento do dataset vc chamar uma funo q monta pra vc a query conforme os campos preenchidos, exatamente com o cdigo q postou acima, passe esse cdigo pra uma funo e chame sempre q precisar, ele retorna a query e vc aplica......

Cada dia vejo surgirem novos []programadores[] de cdigo pronto aqui



#490894 - 22/10/2019 16:28:35

WELISSON
CACHOEIRO DE ITAPEMIRIM
Cadast. em:Junho/2017


 Anexos estao visíveis somente para usuários registrados

Citação:
:
se na criao/preenchimento do dataset vc chamar uma funo q monta pra vc a query conforme os campos preenchidos, exatamente com o cdigo q postou acima, passe esse cdigo pra uma funo e chame sempre q precisar, ele retorna a query e vc aplica......


No entendi muito bem, eu fao a consulta direto pois so relatrios simples. Dessa vez que preciso de
um filtro mais dinmico, da uma olhada no anexo:

No to sabendo como fazer isso, to a dias j nesse relatrio :(



#490901 - 22/10/2019 20:01:02

NICKOSOFT
SANTO ANDRE
Cadast. em:Maio/2009


vc faz a query direto contra o relatorio?
nao usa pra preencher um dataset? e passa esse dataset para o relatorio?

Cada dia vejo surgirem novos []programadores[] de cdigo pronto aqui



#490904 - 22/10/2019 22:20:53

WELISSON
CACHOEIRO DE ITAPEMIRIM
Cadast. em:Junho/2017


Citação:
:
vc faz a query direto contra o relatorio?
nao usa pra preencher um dataset? e passa esse dataset para o relatorio?


Ento, estou aprendo c# e comprei um curso para fazer relatrios. E o cara s ensina fazer dessa forma, muito complicado
porque o cdigo fica muito difcil para manter. Pois qualquer modificao, causa problemas. Fora que []No tenho o controle[],
se perde o arquivo perco tudo!

Assim, no sei como fazer mesmo da forma que disse. Cara se voc pude me ajuda, at pago se for preciso. Pois eu estou a dias
nisso, e ta brabo o negcio!



 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário