Pessoal, estou com um problema na hora de alimentar os parametros de um relatório, no meu banco eu tenho um campo “status” que recebe 0 ou 1, quando vou gerar o relatório ele me traz todos que tem status=0 e status=1, o problema é que preciso que ele me traga todos independente se o valor for 0 ou 1,eu testei o comando no mysql assim: select * from tabela where status=status e ele me puxou todos os dados, só que quando passo por parametro no ireport assim status= $P{status} (nesse caso o parametro status vai ser alimentado pelo nome do campo da tabela) ele não me traz nada.
estou com o mesmo problema so que com datas.
Nao entendi muito bem, vc deseja que em algum momento ele traga todos os status e em outros (dependendo do q for passado) ele traga todos os status?
Camarada, essa é a query mais sem noção que já vi.
É o mesmo que fazer
SELECT * FROM tabela WHERE 1 = 1;
Ou seja, se a única verificação na cláusula WHERE for o status = status, ela pode ser omitida.
Segundo, os relatórios jasper gerados ou não pelo iReport utilizam o preparedStatement e isso transforma
SELECT * FROM tabela WHERE status = $P{status};
em
SELECT * FROM tabela WHERE status = 'status';
E, caso a coluna status só possua valores 0 ou 1, nenhum resultado será obtido, certo (pois 0 <> ‘status’ e 1 <> ‘status’).
Até seria viável utilizar a cláusula in
SELECT * FROM tabela WHERE status IN ($P{status});
Mas, como nunca fiz isto, eu não recomento.
Por outro lado, eu sugeriria fazer a query na aplicação e mandar para o relatório só a listagem com os dados pré determinados. Mais seguro e rápido.
Geralmente o que se costuma fazer nesse caso é:
SELECT * FROM tabela WHERE status = $P{status} or $P{status} is null;
E sim… por incrivel que pareça quando o status for null isso se transforma em:
SELECT * FROM tabela WHERE status = null or null is null;
Sempre vi desta forma… se não tiver status como filtro, basta passar o parâmetro como null.
Porém, eu prefiro fazer relatórios direto no Java, desta forma tendo controle total dos filtros, querys e tudo mais e então criar um JRBeanCollectionDataSource e montar o relatório desta forma, considerando que relatório não tem lógica nenhuma, é só apresentação e evita essas querys “medonhas”.
drsmachado , você tem algum exemplo de como fazer isso?
Galera, problema resolvido, alimentei todo o sql atravez de um parametro, alimento ele com o sql que necessito