Estou fazendo um relatório em jasper coloquei uma query dentro do ireports. Quando mando imprimir este relatório está aparecendo tudo nulo. Alguém poderia me ajudar?
Tenho outra pergunta: Para que serve o SubDataSet no Ireports?
Kra … sua conexão com o banco esta ok ???
Vc testou ele dentro do iReport ???
E
efukuda
denis_gariglio:
Kra … sua conexão com o banco esta ok ???
Vc testou ele dentro do iReport ???
Então a minha conexão está ok…
Eu testei no Ireports e imprime os dados certinho… Mas quando eu chamo pelo java os dados não aparecem.
Quando eu crio o select dentro do Ireport, em codigo java no fillreport eu passo como parametro um inputstream, um hasmap e um datasource.
Qual é esse datasource??? Eu acho que ele está aparecendo em branco porque eu passo o JREmptyDataSource.
Abs
denis_gariglio
To postando o codigo que usei para funcionar ... espero que ajude ...
publicclassRelatorioActionextendsAgsiDispatchAction{/** * Método que irá gerar etiquetas em PDF * @param caminho Caminho da pasta do Relatório * @return * @exception Exception * @deprecated A partir do JDK 1.5 */publicActionForwarddoPost(ActionMappingmapping,ActionFormform,HttpServletRequestreq,HttpServletResponseres)throwsServletException{HttpSessionsessao=req.getSession();Guiaguia=(Guia)req.getSession().getAttribute("guia");StringconsultaDados="";StringconsultaItens="";Longrecebeguia=guia.getCd();Stringcaminho="/usr/tomcat/webapps/autorizanet/etiqueta";// String caminho = "C:\Java\Tomcat 5.0\webapps\autorizanet\etiqueta"; Stringnomerelatorio="Impressao_Etiqueta"+recebeguia+".pdf";try{consultaDados="SELECT usu_cd, usu_nome, emp_cd, emp_ds, P.cre_endereco, P.cre_bairro, P.cre_fone, "+"P.cre_cd as pcd, P.cre_nome as pnome, S.cre_cd as scd, S.cre_nome as snome, gui_cd, "+" gui_obs, I.guitem_procedimento, M.desresumo "+" FROM (((aut_guia INNER JOIN aut_itensguia I ON I.guitem_guia = aut_guia.gui_cd) "+" INNER JOIN aut_credenciado P ON P.cre_cd = I.guitem_prestador) "+" INNER JOIN aut_credenciado S ON S.cre_cd = gui_solicitante "+" INNER JOIN ben_usuario ON ben_usuario.usu_cd = aut_guia.gui_usuario) "+" INNER JOIN ben_empresa ON ben_empresa.emp_cd = ben_usuario.usu_empresa "+" INNER JOIN aut_amb M ON M.codigo = I.guitem_procedimento "+" where aut_guia.gui_cd ="+recebeguia;Conexaocon=newConexao();HashMapparametros=newHashMap();parametros.put("sql",consultaDados);// parametros.put("codguia", recebeguia); // String path = ((ServletRequest) getServlet()).getRealPath("C:\Java\Tomcat 5.0\webapps\autorizanet") + "\";JasperReportjasperReport=JasperManager.loadReport(caminho+"/Impressao_Etiqueta.jasper");JasperPrintjasperPrint=JasperManager.fillReport(jasperReport,parametros,con.getConexao());JasperExportManager.exportReportToPdfFile(jasperPrint,caminho+"/"+nomerelatorio);//JasperViewer.viewReport(nomerelatorio, false);// res.sendRedirect("Impressao_Etiqueta.pdf");//String url="C:\Java\Tomcat 5.0\webapps\autorizanet\relatorios\Impressao_Etiqueta.pdf";//((ServletRequest) getServlet()).getRequestDispatcher(url).forward(req,res);// con.close();}catch(Exceptione){e.printStackTrace();}req.getSession().setAttribute("relatorio",nomerelatorio);req.getSession().setAttribute("caminho",caminho);returnmapping.findForward("relatorio");}}
Na linha 46 (JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parametros, con.getConexao()); )
você passou uma conexão. Quando eu coloco o select no Ireports ou passo como parâmetro eu preciso passar uma conexão?
Estou perguntando isso porque no IReports eu defino uma conexão. eu pensei que não precisaria passar uma connection.
E
efukuda
denis_gariglio:
To postando o codigo que usei para funcionar ... espero que ajude ...
publicclassRelatorioActionextendsAgsiDispatchAction{/** * Método que irá gerar etiquetas em PDF * @param caminho Caminho da pasta do Relatório * @return * @exception Exception * @deprecated A partir do JDK 1.5 */publicActionForwarddoPost(ActionMappingmapping,ActionFormform,HttpServletRequestreq,HttpServletResponseres)throwsServletException{HttpSessionsessao=req.getSession();Guiaguia=(Guia)req.getSession().getAttribute("guia");StringconsultaDados="";StringconsultaItens="";Longrecebeguia=guia.getCd();Stringcaminho="/usr/tomcat/webapps/autorizanet/etiqueta";// String caminho = "C:\Java\Tomcat 5.0\webapps\autorizanet\etiqueta"; Stringnomerelatorio="Impressao_Etiqueta"+recebeguia+".pdf";try{consultaDados="SELECT usu_cd, usu_nome, emp_cd, emp_ds, P.cre_endereco, P.cre_bairro, P.cre_fone, "+"P.cre_cd as pcd, P.cre_nome as pnome, S.cre_cd as scd, S.cre_nome as snome, gui_cd, "+" gui_obs, I.guitem_procedimento, M.desresumo "+" FROM (((aut_guia INNER JOIN aut_itensguia I ON I.guitem_guia = aut_guia.gui_cd) "+" INNER JOIN aut_credenciado P ON P.cre_cd = I.guitem_prestador) "+" INNER JOIN aut_credenciado S ON S.cre_cd = gui_solicitante "+" INNER JOIN ben_usuario ON ben_usuario.usu_cd = aut_guia.gui_usuario) "+" INNER JOIN ben_empresa ON ben_empresa.emp_cd = ben_usuario.usu_empresa "+" INNER JOIN aut_amb M ON M.codigo = I.guitem_procedimento "+" where aut_guia.gui_cd ="+recebeguia;Conexaocon=newConexao();HashMapparametros=newHashMap();parametros.put("sql",consultaDados);// parametros.put("codguia", recebeguia); // String path = ((ServletRequest) getServlet()).getRealPath("C:\Java\Tomcat 5.0\webapps\autorizanet") + "\";JasperReportjasperReport=JasperManager.loadReport(caminho+"/Impressao_Etiqueta.jasper");JasperPrintjasperPrint=JasperManager.fillReport(jasperReport,parametros,con.getConexao());JasperExportManager.exportReportToPdfFile(jasperPrint,caminho+"/"+nomerelatorio);//JasperViewer.viewReport(nomerelatorio, false);// res.sendRedirect("Impressao_Etiqueta.pdf");//String url="C:\Java\Tomcat 5.0\webapps\autorizanet\relatorios\Impressao_Etiqueta.pdf";//((ServletRequest) getServlet()).getRequestDispatcher(url).forward(req,res);// con.close();}catch(Exceptione){e.printStackTrace();}req.getSession().setAttribute("relatorio",nomerelatorio);req.getSession().setAttribute("caminho",caminho);returnmapping.findForward("relatorio");}}
Caso vc passe um select precisa sim passar a conexão, pois a consulta esta sendo feita na classe … agora caso vc coloque o select direto no iReport e passe somente o paramento que sera usado na consulta vou ficar te devendo, pois sempre passo o select inteiro.
Espero ter ajudado.
Abraço
E
efukuda
denis_gariglio:
Caso vc passe um select precisa sim passar a conexão, pois a consulta esta sendo feita na classe … agora caso vc coloque o select direto no iReport e passe somente o paramento que sera usado na consulta vou ficar te devendo, pois sempre passo o select inteiro.
Espero ter ajudado.
Abraço
Beleza Denis. Muito obrigado pela ajuda e pela paciência…
Abraços
E
efukuda
denis_gariglio:
Caso vc passe um select precisa sim passar a conexão, pois a consulta esta sendo feita na classe … agora caso vc coloque o select direto no iReport e passe somente o paramento que sera usado na consulta vou ficar te devendo, pois sempre passo o select inteiro.
Espero ter ajudado.
Abraço
Cara, estou com outro problema…
Agora eu estou passando o select inteiro por parâmetro. Eu fiz agual ao exemplo que vc passou. Só que dá um erro que a sintax do select está errado mas não está!!!
Já passou por isso???
Abraços
denis_gariglio
Esse erro acusa no iReport ou “estoura” na tela qdo é executado o sistema?
InputStreamin=null;JasperPrintprint=null;JasperViewerviewer=null;HashMapmap=newHashMap();Stringsql="select * from funcionarios";try{map.put("sql",sql);in=ResourceHelper.getResourceAsStream("report.jasper");print=JasperFillManager.fillReport(in,map,getConnection());viewer=newJasperViewer(print,false);viewer.show();}catch(IOExceptione){e.printStackTrace();}catch(JRExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}
denis_gariglio
Está faltando a chamada da conexão com o banco … de uma olhada no que eu mandei que tem um
A conexão eu estou pegando… Eu tenho um método chamado getConnection onde retorna uma conexão com o BD. Por exemplo: Quando no ireports eu coloco o select:
select * from tabela where coluna = $P{parameter}
E passo por parametro alguma informação para o meu where do select, executa o relatório certinho.
Quando eu passo o select inteiro por parametro dá erro de sintax…
denis_gariglio
Como esta sua chamada dentro do iReport?
Eu uso assim :
$P!{sql}
E
efukuda
[quote=denis_gariglio]Como esta sua chamada dentro do iReport?
Eu uso assim :
$P!{sql}
Putz… kra era isso. Eu estava colocando assim: $P{sql}.
Não estava colocando o ponte de exclamação.
Te pergunto: Qual a diferença com o ponto de exclamação e sem?
Abs
denis_gariglio
Então … é por causa do que vem com o parametro … porem não lembro direito o pq …
Essa vou ficar te devendo … vou dar uma olhada e assim que achar uma explicação melhor posto aqui
Abraço
E
efukuda
denis_gariglio:
Então … é por causa do que vem com o parametro … porem não lembro direito o pq …
Essa vou ficar te devendo … vou dar uma olhada e assim que achar uma explicação melhor posto aqui
Abraço
Cara muito obrigado pela ajuda…
denis_gariglio
Opa … precisando tamo ai abraço
feltraco
Particularmente acho melhor deixar a função
de resgatar os dados para a aplicação assim
vc pode usar tanto HIBERNATE, SQL, EJB ou qq coisa
que o relatorio fica independente…