Multiplos wheres ireport

5 respostas Resolvido
java
denisspitfire

Preciso de uma SQL que nos parâmetros do IReport, ele aceite diversos ids. Preciso de um relatório de diversas maquinas no caso, essas maquinas serão indicadas pelo id.

Exemplo:

where id =1,5,8,10.

mas pode ser 2 ou 1000 maquinas e agora?

5 Respostas

Marcus_Gp

Pode ser feito desse jeito,mas não ficou muito clara sua dúvida.

SELECT * FROM MAQUINAS WHERE ID IN (1,2,3,4,5,6,7,8,9,...);
denisspitfire

Eu vi isso, mas como eu vou criar essa SQL dinamica?

Exemplo: faço um filtro por data. fica assim:

where date between $P{dataIni} and $P{dataFim}

viu que são 2 parâmetros?, mas as maquinas, não podem ser 2,3,10 parâmetros. tem que ser de 1 ao infinito. Tipo uma lista. Eu preciso ao invés de vários parâmetros no IReport, eu preciso ter 1, que é a lista de ids.

denisspitfire

Tentei isso

where date between $P{dataIni} and $P{dataFim} and machineId IN ($P{machines})`

quando abro o formulário ele pergunta qual String quero usar. eu coloco 44, vem a maquina 44, coloco 45 vem a maquina 45 ai tudo certo.

eu coloco 44,45. Só vem a 44.

eu coloquei

where date between $P{dataIni} and $P{dataFim} and machineId IN (44,45)

e vem as duas, achei que era por causa da “,” então coloquei no relatório para aparecer oque é $P{machines}, mesmo escrevendo 44,45. No relatório só vem a maquina 44. E no texto impresso esta 44,45. Não sei porque ele esta ignorando depois da , na query, mas no text não?

denisspitfire

achei uma solução mas nao me atende.

SELECT * FROM ORDERS WHERE $X{IN, SHIPCOUNTRY, myCountries}

esse IN, pega de um conteudo de dentro de uma tabela. Mas nao pode ser de uma tabela. Tem que ser do parametro enviado do cliente.

denisspitfire
Solucao aceita

Solução.

antes de chamar o relatorio, meu programa pega todas as maquinas que vai fazer a pesquisa. Vai na tabela de pesquisa e grava com uma tag. essa tag é um time de quando o cliente pediu.

no ireport

where date between $P{dataIni} and $P{dataFim} and machineId IN 
      (select machineId from temporary_id_machines where tag = $P{tagSrc})

esse tag é enviado depois da gravação para a criação do relatorio.

tudo certo!

Criado 27 de julho de 2016
Ultima resposta 27 de jul. de 2016
Respostas 5
Participantes 2