Preparei um relatório que funciona normalmente no preview do iReport, porém, qdo executo o arquivo .jasper atraves do sistema
ele nao funciona e mostra uma mensagem dizendo que nao encontra alguns campos do banco de dados.
Alguem poderia me informar o que ocorre neste caso e como resolvê-lo???
Pelo que da pra perceber… pode ser a conexão ou os paramentros que vc ta enviando pro relatório… recentemente tive inúmeros problemascom o ireport, mas agora está tudo funcionando perfeitamente. Para lhe ajudar melhor seria bom vc enviar o erro junto com a sua classe que chama o relatório
F
fbraga
Código da classe que chama o relatorio.
importjava.util.HashMap;importjavax.swing.JOptionPane;importnet.sf.jasperreports.engine.JRResultSetDataSource;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.view.JasperViewer;publicclassRelatorioProcesso{Stringcodigo,situacao;Conexaoconecta=newConexao();publicRelatorioProcesso(){try{conecta.conecta();conecta.executeSQL("select * from processo");JRResultSetDataSourcejrRs=newJRResultSetDataSource(conecta.resultset);JasperPrintrelatorio=JasperFillManager.fillReport("C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",newHashMap(),jrRs);JasperViewer.viewReport(relatorio,false);}catch(Exceptionerro){JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+erro);erro.printStackTrace();}}voidsetVisible(booleanb){thrownewUnsupportedOperationException("Not yet implemented");}}
F
fbraga
e a mensagem de erro é a seguinte;
"Erro ao Exibir Relatórionet.sf.jasperreports.engine.JRException: Unknow column name: acao "
Sendo que ainda vou reforçar que: no Preview o relatorio funciona perfeitamente.
Outro detalhe que nao sei se faz diferença mas: este relatorio usa informações de pelo menos 5 tabelas diferentes.
os outros relatorios que buscam informações de uma unica tabela funcionam normalmente.
ao tentar chamar a classe de relatorios o “PrintStackTrace” NAO apresenta erro nenhum.
Fico no aguardo de novas dicas.
leoramos
1-> A query está fixa no relatório, pra estar funcionando no preview, certo? Se sim, porquê você está passando outra coleção de dados pro relatório? Tem algum motivo?
2-> Teu iReport e teu sistema estão conectados no mesmo banco?
3-> Pode haver um problema com alias no teu SQL
Eu aposto na número 1: você tá passando uma coleção pra ele, e essa coleção não possui o atributo acao.
Abraço!
L
linkin_vitor
É como o amigo Leoramos falou vc está passando uma novo query quando precisaria apenas da conexão
se o relatório já esta funcinando no preview é pq a query já esta funcionando portanto só precisa da conexão
este é a minha classe funcionando 100%
packagebr.com.relatorio;importbr.com.query.Conexao;importjava.sql.*;importjava.util.HashMap;importjava.util.Map;importjavax.swing.JOptionPane;importnet.sf.jasperreports.engine.*;importnet.sf.jasperreports.view.JasperViewer;/** * * @author carlos.vitor */publicclassRelAvs{@SuppressWarnings("unchecked")//recebe o parametro para executar a query que existe no formulário.publicvoidgerarRelatorioAVS(intnumAvs)throwsException{Connectionconn=newConexao().conectar();StringendRel="C:/Documents and Settings/cvssouza/Modelos/Meus documentos/NetBeansProjects/UtilCea/src/br/com/relatorio/";try{//mapea os paramentrosMapparametros=newHashMap();//"numAVS" é o nome do campo no relatório, numAvs é a variavel que vou enviar para o relatórioparametros.put("numAVS",numAvs);//Preenche o formulário com os parametros e conexãoJasperFillManager.fillReportToFile(endRel+"AVS.jasper",endRel+"AVS.jrprint",parametros,conn);//Exporta o arquivo para pdfJasperExportManager.exportReportToPdfFile(endRel+"AVS.jrprint","C:/pdf.pdf");//Visualiza o documentoJasperViewer.viewReport(endRel+"AVS.jrprint",false);//Imprime o documento JasperPrintManager.printReport(endRel+"AVS.jrprint",true);}catch(JRExceptionex){System.out.print(ex);JOptionPane.showMessageDialog(null,"Erro !","Mensagem",JOptionPane.INFORMATION_MESSAGE);}}}
F
fbraga
Ok. ao retirar a coleção de dados ele carrregou o arquivos mas recebi a mensagem que “o Documento nao tem paginas”. e nada apareceu;
ASSIM Ó:
importjava.util.HashMap;importjavax.swing.JOptionPane;importnet.sf.jasperreports.engine.JRResultSetDataSource;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.view.JasperViewer;publicclassRelatorioProcesso{Stringcodigo,situacao;Conexaoconecta=newConexao();publicRelatorioProcesso(){try{conecta.conecta();//RETIREI ESTA LINHA DE CODIGO E O ARQUIVO CARREGOU, MAS, SEM PAGINAS.// conecta.executeSQL("select * from processo");JRResultSetDataSourcejrRs=newJRResultSetDataSource(conecta.resultset);JasperPrintrelatorio=JasperFillManager.fillReport("C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",newHashMap(),jrRs);JasperViewer.viewReport(relatorio,false);}catch(Exceptionerro){JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+erro);erro.printStackTrace();}}voidsetVisible(booleanb){thrownewUnsupportedOperationException("Not yet implemented");}}
L
linkin_vitor
Vc ainda continua enviando um resultset no lugar de uma conexão
tenta isso
//Crie essa variavel antes do try
Connection conn = new Conexao().conectar();
//
Na linha 25 do seu código deveria ficar assim...
JasperPrint relatorio = JasperFillManager.fillReport("C:/Sistema Dorival/relatorios/relatorioProcesso.jasper", conn);
Caso contrário tenta implementar com base no meu código
vou mandar de novo a classe completa com a sua alteração ja feita.
importjava.util.HashMap;importjava.util.Map;importjavax.swing.JOptionPane;importnet.sf.jasperreports.engine.JRResultSetDataSource;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.view.JasperViewer;publicclassRelatorioProcesso{Stringcodigo,situacao;Conexaoconecta=newConexao();publicRelatorioProcesso(){Conexaoconn=newConexao();try{conecta.conecta();Mapparametros=newHashMap();JRResultSetDataSourcejrRs=newJRResultSetDataSource(conecta.resultset);//ESTA LINHA AQUI ESTA TODA SUBLINHADA EM VERMELHO.JasperPrintrelatorio=JasperFillManager.fillReport("C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",parametros,conn);JasperViewer.viewReport(relatorio,false);}catch(Exceptionerro){JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+erro);erro.printStackTrace();}}voidsetVisible(booleanb){thrownewUnsupportedOperationException("Not yet implemented");}}
L
linkin_vitor
Bom eu fiz com os mesmo dasdos seus aqui e funcionou tudo certinho
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagebr.com.relatorio;importbr.com.query.Conexao;importjava.sql.Connection;importjava.util.HashMap;importjava.util.Map;importjavax.swing.JOptionPane;importnet.sf.jasperreports.engine.JRException;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.view.JasperViewer;/** * * @author Vitor */publicclassRelatorioProcesso{//variavel de conexão já tem q ir com a conexão feita e não sozinha como estava//Conexao conn = new Conexao();Connectionconn=newConexao().conecta();publicvoidRelatorioProcesso()throwsException{try{Mapparametros=newHashMap();//Não nescessita pois vc já fez as querys todas no formulário//JRResultSetDataSource jrRs= new JRResultSetDataSource(conecta.resultset) ;//JasperPrintrelatorio=JasperFillManager.fillReport("C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",parametros,conn);JasperViewer.viewReport(relatorio,false);}catch(JRExceptionerro){JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+erro);erro.printStackTrace();}}//Este método é apenas para testarpublicstaticvoidmain(Stringargs[])throwsException{newRelatorioProcesso().RelatorioProcesso();}}
Caso o erro persista envie o erro e o código xml do seu formulário para eu ver sua a sua query
F
fbraga
putz, ô vida dificil.
da uma olhada na imagem aí.
//import br.com.query.Conexao; importjava.sql.Connection;importjava.util.HashMap;importjava.util.Map;importjavax.swing.JOptionPane;importnet.sf.jasperreports.engine.JRException;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.view.JasperViewer;/** * * @author Vitor */publicclassRelatorioProcesso{//variavel de conexão já tem q ir com a conexão feita e não sozinha como estava //Conexao conn = new Conexao(); // NESTA LINHA AÍ EM BAIXO TUDO FICA SUBLINHADO EM VERMELHO E DIZ "TIPOS INCOMPATIVEIS" e sugere a troca so tipo da variavel conn para boolean.Connectionconn=newConexao().conecta();publicvoidRelatorioProcesso()throwsException{try{Mapparametros=newHashMap();//Não nescessita pois vc já fez as querys todas no formulário //JRResultSetDataSource jrRs= new JRResultSetDataSource(conecta.resultset) ; // JasperPrintrelatorio=JasperFillManager.fillReport("C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",parametros,conn);JasperViewer.viewReport(relatorio,false);}catch(JRExceptionerro){JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+erro);erro.printStackTrace();}}//Este método é apenas para testar publicstaticvoidmain(Stringargs[])throwsException{newRelatorioProcesso().RelatorioProcesso();}}