Dúvidas IReports

20 respostas
E

Olá pessoal,

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?

Obrigado pela atenção.

20 Respostas

denis_gariglio

Kra … sua conexão com o banco esta ok ???
Vc testou ele dentro do iReport ???

E

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 ...

public class RelatorioAction extends AgsiDispatchAction  {

    /**
     * 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
     */
    public ActionForward doPost(ActionMapping mapping,ActionForm form,
            HttpServletRequest req, HttpServletResponse res)
    throws ServletException  {

        HttpSession sessao = req.getSession();

        Guia guia = (Guia) req.getSession().getAttribute("guia");

      String consultaDados = "";
      String consultaItens = "";
      Long recebeguia = guia.getCd();
      String caminho = "/usr/tomcat/webapps/autorizanet/etiqueta";
     // String caminho = "C:\Java\Tomcat 5.0\webapps\autorizanet\etiqueta";  
     String nomerelatorio = "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;
        
        Conexao con = new Conexao();
        HashMap parametros = new HashMap();
        parametros.put("sql", consultaDados);
      //  parametros.put("codguia", recebeguia);                

               //    String path = ((ServletRequest) getServlet()).getRealPath("C:\Java\Tomcat 5.0\webapps\autorizanet") + "\";

        JasperReport jasperReport = JasperManager.loadReport(caminho +
   "/Impressao_Etiqueta.jasper");
        JasperPrint jasperPrint = 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(Exception e)
      {       
        e.printStackTrace();
      }
      req.getSession().setAttribute("relatorio", nomerelatorio);
      req.getSession().setAttribute("caminho", caminho);
      return mapping.findForward("relatorio");
    }
}

e no jsp

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.io.File" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="java.util.HashMap" %>

<html>
	<head>
	
        <meta HTTP-EQUIV="Pragma" CONTENT="no-cache" />  
        <meta HTTP-EQUIV="Cache-control" CONTENT="no-cache" />  
        <meta HTTP-EQUIV="Expires" CONTENT="0" /> 		
	
		<link rel="stylesheet" href="img/css.css" type="text/css">
		<title>Menu</title>
	</head> 
	<body> 
		<% 
		String relatorionome = (String)request.getSession().getAttribute("relatorio");
		
		response.sendRedirect("\etiqueta" + "\" + relatorionome);%>
	</body>
</html>
E
denis_gariglio:
To postando o codigo que usei para funcionar ... espero que ajude ...
public class RelatorioAction extends AgsiDispatchAction  {

    /**
     * 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
     */
    public ActionForward doPost(ActionMapping mapping,ActionForm form,
            HttpServletRequest req, HttpServletResponse res)
    throws ServletException  {

        HttpSession sessao = req.getSession();

        Guia guia = (Guia) req.getSession().getAttribute("guia");

      String consultaDados = "";
      String consultaItens = "";
      Long recebeguia = guia.getCd();
      String caminho = "/usr/tomcat/webapps/autorizanet/etiqueta";
     // String caminho = "C:\Java\Tomcat 5.0\webapps\autorizanet\etiqueta";  
     String nomerelatorio = "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;
        
        Conexao con = new Conexao();
        HashMap parametros = new HashMap();
        parametros.put("sql", consultaDados);
      //  parametros.put("codguia", recebeguia);                

               //    String path = ((ServletRequest) getServlet()).getRealPath("C:\Java\Tomcat 5.0\webapps\autorizanet") + "\";

        JasperReport jasperReport = JasperManager.loadReport(caminho +
   "/Impressao_Etiqueta.jasper");
        JasperPrint jasperPrint = 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(Exception e)
      {       
        e.printStackTrace();
      }
      req.getSession().setAttribute("relatorio", nomerelatorio);
      req.getSession().setAttribute("caminho", caminho);
      return mapping.findForward("relatorio");
    }
}

e no jsp

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.io.File" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="java.util.HashMap" %>

<html>
	<head>
	
        <meta HTTP-EQUIV="Pragma" CONTENT="no-cache" />  
        <meta HTTP-EQUIV="Cache-control" CONTENT="no-cache" />  
        <meta HTTP-EQUIV="Expires" CONTENT="0" /> 		
	
		<link rel="stylesheet" href="img/css.css" type="text/css">
		<title>Menu</title>
	</head> 
	<body> 
		<% 
		String relatorionome = (String)request.getSession().getAttribute("relatorio");
		
		response.sendRedirect("\etiqueta" + "\" + relatorionome);%>
	</body>
</html>

Denis,

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
denis_gariglio:
To postando o codigo que usei para funcionar ... espero que ajude ...
public class RelatorioAction extends AgsiDispatchAction  {

    /**
     * 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
     */
    public ActionForward doPost(ActionMapping mapping,ActionForm form,
            HttpServletRequest req, HttpServletResponse res)
    throws ServletException  {

        HttpSession sessao = req.getSession();

        Guia guia = (Guia) req.getSession().getAttribute("guia");

      String consultaDados = "";
      String consultaItens = "";
      Long recebeguia = guia.getCd();
      String caminho = "/usr/tomcat/webapps/autorizanet/etiqueta";
     // String caminho = "C:\Java\Tomcat 5.0\webapps\autorizanet\etiqueta";  
     String nomerelatorio = "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;
        
        Conexao con = new Conexao();
        HashMap parametros = new HashMap();
        parametros.put("sql", consultaDados);
      //  parametros.put("codguia", recebeguia);                

               //    String path = ((ServletRequest) getServlet()).getRealPath("C:\Java\Tomcat 5.0\webapps\autorizanet") + "\";

        JasperReport jasperReport = JasperManager.loadReport(caminho +
   "/Impressao_Etiqueta.jasper");
        JasperPrint jasperPrint = 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(Exception e)
      {       
        e.printStackTrace();
      }
      req.getSession().setAttribute("relatorio", nomerelatorio);
      req.getSession().setAttribute("caminho", caminho);
      return mapping.findForward("relatorio");
    }
}

e no jsp

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.io.File" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="java.util.HashMap" %>

<html>
	<head>
	
        <meta HTTP-EQUIV="Pragma" CONTENT="no-cache" />  
        <meta HTTP-EQUIV="Cache-control" CONTENT="no-cache" />  
        <meta HTTP-EQUIV="Expires" CONTENT="0" /> 		
	
		<link rel="stylesheet" href="img/css.css" type="text/css">
		<title>Menu</title>
	</head> 
	<body> 
		<% 
		String relatorionome = (String)request.getSession().getAttribute("relatorio");
		
		response.sendRedirect("\etiqueta" + "\" + relatorionome);%>
	</body>
</html>

Segue o codigo abaixo... Por que está saindo em branco???

InputStream in = null;
        JasperPrint print = null;
        JasperViewer viewer = null;

        JREmptyDataSource ds = new JREmptyDataSource();

        try {
            in = ResourceHelper.getResourceAsStream("Report.jasper");

            print = JasperFillManager.fillReport(in, new HashMap(), ds);

            viewer = new JasperViewer(print, false);

            viewer.show();
        } catch (IOException e) {
            
        } catch (JRException e) {
           
        }
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

E

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

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?

E

Isso acontece quando eu executo pelo java.

Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘select * from funcionarios’’ at line 1

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2822)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1536)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1626)

at com.mysql.jdbc.Connection.execSQL(Connection.java:3031)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:943)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1049)

at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:115)

 11 more
denis_gariglio

Se puder posta o seu codigo … :slight_smile:

E

Está ai…

InputStream in = null;
        JasperPrint print = null;
        JasperViewer viewer = null;
        HashMap map = new HashMap();

        String sql = "select * from funcionarios";

        try {
            map.put("sql", sql);

            in = ResourceHelper.getResourceAsStream("report.jasper");

            print = JasperFillManager.fillReport(in, map, getConnection());

            viewer = new JasperViewer(print, false);

            viewer.show();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JRException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
denis_gariglio

Está faltando a chamada da conexão com o banco … de uma olhada no que eu mandei que tem um

Conexao con = new Conexao();

Que vou usar depois em

JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parametros, con.getConexao());

E

denis_gariglio:
Está faltando a chamada da conexão com o banco … de uma olhada no que eu mandei que tem um

Conexao con = new Conexao();

Que vou usar depois em

JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parametros, con.getConexao());

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

[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 :slight_smile:

Abraço

E

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 :slight_smile:

Abraço

Cara muito obrigado pela ajuda…

denis_gariglio

Opa … precisando tamo ai abraço :slight_smile:

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…

da uma olhada nesse artigo…

http://blog.apollo-ti.com/?p=8

FLwS

Criado 5 de dezembro de 2007
Ultima resposta 21 de jan. de 2008
Respostas 20
Participantes 3