Array
(
)

Query com vários parâmetros

Barbara.michele
   - 31 ago 2004

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


Lucas Silva
   - 31 ago 2004

// 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 ¬.


Paulo_amorim
   - 31 ago 2004

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
#Código

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
#Código
SELECT * FROM cliente
WHERE (:p1 AND condicao1)
AND (:p2 AND condicao2)

E depois passe o parametro p1, p2 com:
#Código
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
#Código
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é+