Não consigo fazer este tipo de consulta !?!?!

Delphi

26/02/2014

Bom dia amigos

Espero conseguir explicar minha duvida que é a seguinte:
Quero trazer na consulta todos os cadastro que possuam determinados códigos:

Ex: 2, 4, 15, 56 e 57 somente. (integer)

Até aí beleza,

WHERE CODIGO IN (2, 4, 15, 56, 57)

Mas a dificuldade está que preciso que receba os valores que o usuário escolher. É uma consulta personalizável, a qual o usuário escolhe na tela quais códigos ele quer.

Tentei com parâmetro: WHERE CODIGO IN (:CODIGOS)
Mas nada feito, firebird aceita apenas um valor por vez.
Procurei por array no firebird, mas o que encontrei até agora não consegui entender direito.
Gostaria de saber se alguém já montou algo parecido, ou se tem alguma ideia de como solucionar esse caso.

Agradeço desde já a atenção.
[]s
Silvio Morelo

Silvio Morelo

Curtidas 0

Respostas

Marcos Saffran

Marcos Saffran

26/02/2014

Boa noite Morelo,

tente com

WHERE CODIGO = 2 AND
CODIGO = 4 AND
CODIGO = 15 AND
CODIGO = 56 AND
CODIGO = 57

WHERE CODIGO = :CODIGO1 AND
CODIGO = :CODIGO2 AND
CODIGO = :CODIGO3 AND
CODIGO = :CODIGO4 AND
CODIGO = :CODIGO5

isso serve para a quantidade fixa de 5 códigos.

Espero que te ajude.
GOSTEI 0
Silvio Morelo

Silvio Morelo

26/02/2014

Marcos obrigado por responder a minha pergunta.

Sua dica funciona perfeitamente porem eu não sei quantos códigos serão selecionados para efetuar a consulta.

[]'s
GOSTEI 0
Marcos Saffran

Marcos Saffran

26/02/2014

Bom dia Morelo,

nesse caso é necessário fazer um loop:

sqltxt := '....WHERE '; //aqui vem todo o código sql até o WHERE

for I=1 to qtcodigos do //de 1 até a quantidade de códigos a ser inserida
begin
  strCodigo := ':CODIGO' + IntToStr(I);
  if I = qtcodigos then
  begin
    sqltxt := sqltxt + 'CODIGO = ' + strCodigo + ' '; /caso seja o último loop não acrescenta o AND
  end
  else
  begin
    sqltxt := sqltxt + 'CODIGO = ' + strCodigo + ' AND ';
  end;
end;


Para os parâmetros faça um loop parecido.
GOSTEI 0
Silvio Morelo

Silvio Morelo

26/02/2014

Valeu Marcos,

Funcionou corretamente.
[]'s
GOSTEI 0
POSTAR