Galera,
estou tentando fazer um sql dinamico no ireport e nao estou conseguindo. Fiz o seguinte:
fiz o layout no ireport
coloquei a query desejada
adicionei nessa query um parametro
fiz minha classe java para gerar o relatorio
coloquei a mesma query q estava la no ireport na minha classe
copiando ate mesmo o parametro
mas tem o seguinte, qndo vou gerar o relatorio ele pega o oarametro q coloquei la no ireport, nao deixando eu colocar outro.
Gostaria de saber se alguem poderia me dizer como faco para gerar essa query dinamica.
A solução é simples, basta não fazer a query diretamente no relatório :) . Execute sua query na aplicação da maneira que quiser, pegue o ResultSet e tranforme ele em uma lista. Então utilize o objeto JRBeanCollectionDataSourcee passe o objeto prontinho prontinho para o relatório:
//Método onde adquiro a listapublicvoidrliLista(){/* Obtem a coleção de objetos * para compor o detail do relatório * a partir do Hibernate */Listresultado=f.selecionaTudo("ListaInfratores");JRBeanCollectionDataSourcejrc=newJRBeanCollectionDataSource(resultado);/* chamando o metodo para construir * o relatório apartir de um collection */nova="rliLista";constroiRelatorio(jrc);}}
//metodo que constroi o relatorio passando o objeto anteriorpublicvoidconstroiRelatorio(JRBeanCollectionDataSourcejrc){try{//compila relátorioJasperReportrelatorio=JasperCompileManager.compileReport(layout);// prepara o relatorio para impressaoJasperPrintimpressao=JasperFillManager.fillReport(relatorio,parametros,jrc);//Exibi o resultado da impressão em padrão swingif(!nova.equals(atual)&&viewer!=null){viewer.dispose();viewer=null;}if(viewer==null){atual=nova;viewer=newJasperViewer(impressao,false);viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);viewer.setVisible(true);}else{viewer.setVisible(true);}viewer.addWindowListener(newWindowAdapter(){publicvoidwindowClosed(WindowEventarg0){viewer=null;instance=null;}});}catch(JRExceptione){e.printStackTrace();}}
Esse último metodo você pode dar uma boa enxugada nele afinal fiz algumas coisas a mais neles (reaproveitei de um projeto antigo).
Flw.
M
mek
Tudo bem tRuNkSnEt, vc me deu uma luz muito boa.
mas ainda fiquei com duvida, no caso de eu nao estar utilizando hibernate, pq ainda estou fazendo testes usarei o hibernate, mas apriore nao.
faco minha query normal e passo ela para o metodo da lista??? Ou coloco tudo no mesmo metodo, digo, a query e a lista?
valew brigadaoooo!
fredferrao
Vai la o IReport e cria sua Query normalmente, sem usar parametros nem nada(coloca no where uns parametros fixos so pra ele trazer os campos pra vc trabalhar)
depois na hora de chamar o jasper vc faz o select que quiser e joga em um resultSet e depois passa esse result pro jasper assim:
ResultSet seuResult = suaConsulta;
JasperFillManager.fill(relatorio, map, new JRResultSetDataSource(seuResult));
verifica se os nome dos componentes sao estes mesmos, to fazendo de cabeça!!!
[edited]
observando que os campos da query que vc fez la no IReport devem estar presentes nessa sua query dinamica!!!
M
mek
Galera,
mil perdoes … mas nao estou conseguindo fazer o relatorio.
sera que alguem pode me mandar um codigo exemplo completo para que eu possa dar uma olhada, pq eu nao estou entendendo algumas coisas, e talvez isso resolva se alguem mandar um exemplo completo.
fico grato!
abs
fredferrao
o que vc nao esta entendendo???
M
mek
Cara, é o seguinte:
Vamos por parte, 1º:
Tenho duvidas como vou fazer para criar essa lista para popular o meu relatorio. nao consigo visualizar isso, esta confuso pacas.
vcs tem me ajudado, mas esta dificil.
para ver se facilita vou mandar o codigo do relatorio.
Galera,
meu maior problema é nao conseguir popular meu HashMap para que ele possa jogar no relatorio, nao eh assim q funciona?
primeiro popula o HashMap e depois joga para o relatorio?
pq se for assim o negocio … eh isso q falta.
Valew
colosos_colossus
AWE galera nao esta alterando minha sql
tá ficando a do iReport
olha meu código
@SuppressWarnings("static-access")
private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {
try {
String jasperFile = "C:\Arquivos de programas\projetosNetBeans\Controledevales\src\report2.jasper";
String sql = "";
if ((jFormattedTextField3.getText().equals("")) & (jFormattedTextField3.getText().equals(""))) {
sql = "SELECT * FROM MOVVALE INNER JOIN TABPROF ON TABPROF.CODPROF = MOVVALE.CODPROF WHERE TABPROF.CODPROF = " + jTCodigo.getText();
} else {
data = dataformatador.parse(jFormattedTextField3.getText());
data2 = dataformatador.parse(jFormattedTextField6.getText());
sql = "SELECT * FROM MOVVALE INNER JOIN TABPROF ON TABPROF.CODPROF = MOVVALE.CODPROF WHERE TABPROF.CODPROF = " + jTCodigo.getText() + " and DTMOV BETWEEN '" + dataformatador2.format(data) + "' and '" + dataformatador2.format(data2) + "'";
}
JOptionPane.showMessageDialog(null, "cod!\n" + jTCodigo.getText());
Class.forName(driver);
Connection con = DriverManager.getConnection(url, login, pwd);
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(sql);
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
Map parametros = new HashMap();
parametros.put("SALPROF", new Double(10));
this.impr = JasperFillManager.fillReport("C:\Arquivos de programas\projetosNetBeans\Controledevales\src\report2.jasper", parametros, con);
JasperFillManager.fillReportToFile(jasperFile, parametros, jrRS);
JasperViewer ver = new JasperViewer(impr, false);
ver.viewReport(impr, false);
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "ERRO! " + e.getLocalizedMessage());
}
}