Boa tarde
Estou com um problema e mesmo utilizando a busca não consegui achar nenhuma solução aparente para o meu problema.
Eu tenho uma aplicação que chama om relatório do Jasper reports passando dois parametros para o jasper, neste existe uma consulta sql que depende destes dois parametros. O meu problema é que algumas vezes pode acontecer de não ser enviado nenhum parametro, para este caso, o relatorio deveria retornar todos os dados da consulta, mas não estou sabendo como fazer isso.
Alguem tem alguma ideia de como fazer?
Olá tiagoencd,
Você deverá prever a situação em sua consulta SQL, caso não sejam passados parâmetros, retornar todos os resultados.
Abraços.
_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL
Tem alguma dica de como fazer isso?
Cara,
eu tentaria fazer o seguinte, criaria uma variável e nela eu verifico os parametros que possuem valor
e assim posso concatenar a string que quero adicionar no sql.
Feito isso dentro do teu sql tu adiciona da seguinte forma a variável: V!{variavel_criada}
Não entendi muito bem.
Eu pensei no seguinte, eu tenho lá meu select * from xxx where xxx = variavel. Eu pensei em verificar se essa variavel está vazia antes de mandar para o jasper e caso esteja, mandar uma variavel que me retorne tudo, tipo um where xxx = all, só que isso não existe eu acho.
Olá tiagoencd,
No seu SQL faça:
select * from sua_tabela
where ((seu_campo = p_parametro)
or (ifnull(p_parametro,0) = 0));
Caso p_parametro não for nulo, retorna somente os dados obedecendo a condição, caso contrário, mostra todos.
Abraços
_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL
Cara, muito obrigado mesmo! Deu certo testando no SQL. Amanhã testo na aplicação mesmo porque hoje tenho que sair!
Falou tiagoencd, fico feliz em ter ajudado, abraços.
_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL
Meu camarada Fabiano. Na verdade deu certo e não deu.
Testando diretamente no banco ele retorna a consulta normalmente, porem quando fui testar no iReport, ele deu o seguinte erro:
Error filling print… java.lang.Integer cannot be cast to java.lang.Boolean
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Boolean
O parametro que passo é um valor inteiro. Teria como eu fazer no lugar desse ifnull um if para verificar o valor desse parametro? Tentei de diversas maneiras mas sempre dava erro. Alguma ideia?
Resolvido!
Esse erro que tava dando era algum problema espiritual do iReport. Fiz outro relatório novo com a mesma query e funcionou perfeitamente, mas para o caso do int, eu usei esse código:
and ((codUnidade = $P{cod_unidade})
or (if($P{cod_unidade}=-1,0,1)=0))
Obrigado a todos