Bom noite estou um problema e queria ajuda de vcs…
eu tenho um relatorio de alunos em sistema que estou desenvolvendo e neste relatorio eu tenho
que ter dois filtros codigo do aluno e nome do aluno sendo que nunca os dois filtros serão informados
de uma so vez sendo que quando o codigo do aluno for informado o sql deverá ficar assim
exemplo:
SELECT CODIGO , NOME , ENDERECO FROM ALUNOS WHERE CODIGO = $P{CODIGO}
e quando for o nome deverá ficar assim
SELECT CODIGO , NOME , ENDERECO FROM ALUNOS WHERE NOME = $P{NOME}
mas ai que ta o problema como eu faço pra mudar a minha instrução WHERE do relatorio em tempo de execução
ja que só um desses filtros vai se executado por vez tem como eu fazer isso o tenho que fazer de outra forma
se poderem me ajudar postando exemplo ou me indicando um tutorial, desde de já eu agradeço.
Creio que há mais formas, mas no momento as que lembro são:
1 - Se quiser usar sql mesmo, faça um procedure passando os dois parâmentros, lá no procedure, se o parâmetro código for nulo, então consulta por nome e vice versa.
2 - Se usar hibernate, faça a consulta no seu código e envie para o relatório a lista de beans da resposta.
Simples,
Na hora de selecionar o SQL para fazer a consulta,
Crie na sua janela visual um seletor de Radio Button ou CheckBox,
Se estiver selecionado 1 ele usa o SQL1, Se estiver selecionado 2 ele usa o SQL2
sendo que 1 é por codigo, e 2 por nome.
Att. Jonas
Bom dia
Tranquilo, crie os 2 parametros normalmente, dentro de um terceiro parametro $P{WHERE} coloque:
$P{CODIGO} != null ?
"nomeTabela.codigo = $P{CODIGO}" :
$P{NOME} != null ?
"nomeTabela.nome = $P{NOME}"
Dessa maneira quando um dos parametros for nulo ele irá assumir o valor do outro parametro.
Att.
dessa forma vai trazer informações incorretas do banco…
imaginando que a consulta sql esteja sendo feita no sistema, e não no relatório
A minha consulta sql esta sendo feita dentro da query que esta dentro do ireport tem como aterala em tempo de execução
devo fazer de ourta forma??
na minha opinião, toda parte de comunicação com banco deve ser feita a nivel de sistema…
Deixando a nivel de relatório apenas mostrar os resultados da consulta feita no sistema…
Sempre faço assim e nunca tive problemas…
Att. Jonas
Eu pego o SQL do IReport de SELECT depois no programa coloco where e order by e envio apenas o ResultSet como DataSource pro JasperReport.
Hum, to ligado… Mas ainda sim nao largo minha opcao de utilizar toda parte de banco no proprio sistema ;D
Tem um artifício que resolve, use o ponto de exclamação quando quiser concatenar um parametro no sql:
SELECT CODIGO , NOME , ENDERECO FROM ALUNOS WHERE $P!{clausulaWhere}
O parâmetro “clausulaWhere” pode ter o valor: “CODIGO = …” ou “NOME = …”