Query com vários parâmetros

31/08/2004

0

Pessoal, alguém pode me ajudar???

Preciso fazer uma tela onde tenho vários parâmetros que servirão de condição para os meus selects (entrarão na cláusula where).
Criei uma tela onde ao lado de cada edit tenho um checkbox e quero que se o checkbox estiver marcado, ele vai pegar o valor do edit e jogar dentro do select da query.
O usuário pode marcar somente um campo, assim como todos e todos deverão entrar na condição da consulta.
Como deve ser criada essa query e passado os valores do edit para ela?

Alguém já fez isso???
Como faço?

Obrigada


Barbara.michele

Barbara.michele

Responder

Posts

31/08/2004

Lucas Silva

// faça assim:
coloque os parâmetros com like tipo:
codigo like :parcod and cliente like :parcli
e por ai vai... se não tiver nenhum valor você coloca o ¬.


Responder

31/08/2004

Paulo_amorim

Olá

Você tem diversas opções, todas relacionadas com a construção da instrução SQL
Dou a sugestão de 3 tipos:

1- Monte sua cláusula Where com if´s para cada parâmetro
with Query1 do
begin
  SQL.Add(´SELECT * FROM cliente WHERE cliente LIKE :param´);
  if Checkbox1.Checked then
    SQL.ADD(´AND condicao1´);
  if Checkbox2.Checked then
    SQL.ADD(´AND condicao2´);
end;

O problema eh se vc não tiver nenhum parâmetro fixo

2- Utilize operador AND
SELECT * FROM cliente
WHERE (:p1 AND condicao1)
AND (:p2 AND condicao2)

E depois passe o parametro p1, p2 com:
Query1.Parambyname(´p1´).AsBoolean := Checkbox1.Checked;

Me parece o mais ´limpo´, mas eu não lembro se eh exatamente assim

3- Utilizar 2 operadores, um OR e um AND
SELECT * FROM cliente
WHERE ( (:p1 = FALSE) OR (:p1 = TRUE AND condicao1) )
AND( (:p2 = FALSE) OR (:p2 = TRUE AND condicao2) )

Esse funciona mesmo que eu lembro :)
Esse método dá pra vc passar com where ((:p1 = 0) or (:p1 = 1 and condicao) ), daí vai de você...

Espero que ajude
Até+


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar