Fórum Montar uma SQL com vários parâmetros e variáveis... #286051

24/06/2005

0

Estimados amigos delphinianos,

faz um tempo que não posto nada no forum por falta de tempo. Porém, atualmente estou enfrentando um dilema grande, é na montagem de SQL em tempo de execução.

Vejamos o que eu estou querendo dizer:

Vamos supor que eu tenha uma Tabela contendo 6 campos e todos eles sejam pesquisáveis (todos possuem dados relevantes na pesquisa - tanto isolados como em grupo)

Numa janela coloquei um checklistbox, contendo todos os seis campos.
Cada campo possui um componente combobox e um edit; Nos comboboxes são permitidos os seguintes elementos de comparação: >, <, <>, >=, <= e = .
Nos componentes edit´s é feito um teste de integridade na digitação. Campos com números só aceitam números e campos com letras só aceitam letras e assim por diante.

Agora, surge o problema. Se eu criar uma estrutura com IF, eu vou ficar maluco testando cada um dos campos e montando a referida consulta em tempo de execução. Então pergunto para os ilustres amigos:

[b:e10d8b8624][color=blue:e10d8b8624]Como eu poderia fazer isso de uma forma mais rápida, com menos código digitado e de forma eficiente?[/color:e10d8b8624] [/b:e10d8b8624]

Se alguém puder me dar uma dica, estou à disposição de todos.

Agradeço desde já a todos os colaboradores


Eixox

Eixox

Responder

Posts

24/06/2005

Danilorsa

Amigo, seguinte. Vamos supor:

Seus campos importantes de pesquisa são: ID_CLIENTE, NOME, CPF

SELECT * FROM CLIENTES
Se estiver usando Oracle, pode fazer assim
WHERE ID_CLIENTES =NVL(:P_ID_CLIENTE,ID_CLIENTE)
AND NOME = NVL(:P_NOME,NOME)
AND CPF = NVL(:P_CPF,CPF)

Se estiver usando Firebird
WHERE ID_CLIENTE =COALESCE(:P_ID_CLIENTE,ID_CLIENTE)
AND NOME = COALESCE(:P_NOME,NOME)
AND CPF = COALESCE(:P_CPF,CPF)

Desta maneira, você passa aqueles que você quiser, e aqueles que você não passar(ou seja, nulo), ele vai comparar com ele mesmo...

Espero ter ajudado,
Danilo Rogério
Betta Informática


Responder

Gostei + 0

25/06/2005

Adriano Santos

SELECT * FROM CLIENTES Se estiver usando Oracle, pode fazer assim WHERE ID_CLIENTES =NVL(:P_ID_CLIENTE,ID_CLIENTE) AND NOME = NVL(:P_NOME,NOME) AND CPF = NVL(:P_CPF,CPF) Se estiver usando Firebird WHERE ID_CLIENTE =COALESCE(:P_ID_CLIENTE,ID_CLIENTE) AND NOME = COALESCE(:P_NOME,NOME) AND CPF = COALESCE(:P_CPF,CPF)



Caramba, esses [b:8b0956ffb9]COALESCE[/b:8b0956ffb9] e [b:8b0956ffb9]NVL [/b:8b0956ffb9]são comandos do banco?
Posso usar a mesma coisa para MSSql?
Qual seria o comando equivalente?

Isso eu não sabia. Legal essa dica hein [b:8b0956ffb9]danilorsa[/b:8b0956ffb9] :D


Responder

Gostei + 0

26/06/2005

Emerson Nascimento

para SQL Server é IsNull()


Responder

Gostei + 0

26/06/2005

Orpolonio

Alen de todos este vc ainda tem o CASE apertir da 1.5, é simplimente maravilhoso,
Veja no help e novidade do FB a clausula CASE


Responder

Gostei + 0

26/06/2005

Adriano Santos

Cara, fiquei realmente maravilhado porque não sei muito de SQL e nem sou muito chegado, mas sempre me surpreendo com os comandos...valeu pelo esclarecimento.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar