[resolvido]filtro de relatorio no ireport

21 respostas
D

ola gente este botao abaixo é o botao com que filtro o relatorio por data digito uma data no campo texto e clico no botao pra filtra porem apresenta erro?
alguem da uma luz minha aplicacao ja esteve parada por muito tempo por causa do filtro de relatorio alguem pode ajudar?

uso o ireport para fazer o relatorio o parametro que foi criado na query é o $P{dat} do tipo date

obrigada

botao1.addActionListener(new ActionListener() {   
               
            public void actionPerformed(ActionEvent e) {   
                RelatorioCliente rep = new RelatorioCliente();   
                objetoCliente =   
                    (Cliente) gerenciador.createQuery(     
                    "from Cliente pr WHERE data = $P[dat]").setParameter("data",caixa1.getSize()).getSingleResult(); 
                JasperPrint relat;   
                try {   
                    relat = rep.gerarRelatorioCliente();   
                    JasperViewer.viewReport(relat, false);   
                } catch (Exception e1) {   
                    e1.printStackTrace();   
                }   
//                 
            }   
            });

erro

Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException
at org.hibernate.hql.ast.tree.IdentNode.resolveIndex(IdentNode.java:43)
at org.hibernate.hql.ast.tree.IndexNode.resolve(IndexNode.java:63)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
at org.hibernate.hql.ast.HqlSqlWalker.processIndex(HqlSqlWalker.java:830)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4359)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1212)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4041)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3528)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
at FiltroCliente$1.actionPerformed(FiltroCliente.java:96)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

21 Respostas

D

code gerenciador.createQuery(
“from Cliente pr WHERE data = $P[dat]”)
.setParameter(“data”,caixa1.getSize()).getSingleResult(); [/code]

clico no erro e aponta pra esta linha o que pode estar ocorrendo?

R

cara, o JPA não aceita essa sintaxe de parâmetros do iReport … você tem usar ou placeholders (?) ou parâmetros nomeados (:data)

D

eu sou mulher nao entendi o que voce disse se puder explicar melhor

D

tipo eu uso o java desktop jpa? placeholders? nunca usei placeholders?

D

jpa e web nao e?

R

Não necessariamente. JPA pode ser usado para qualquer aplicação que usa banco de dados. O fato é que para você indicar em uma query JPA que você quer usar um parâmetro você deve fazer :

"from Cliente pr WHERE data = :data"
D

tipo na query do filtro do relatorio por exemplo nao tenho que usar nesse selected o parametro que coloquei no filtro tipo esse $P{dat}?

R

Na query do relatório sim. Se você já fez a query no relatório não precisa fazer de novo na aplicação Java.

D

esse é o codigo do meu filtro de relatorio e essa é minha query criado no relatorio select*from cliente where date(data) = $P{dat}

quando digito a data no campo texto e pego e clico no botao nao esta me trazendo nenhuma consulta.

import java.awt.event.*;   
import java.text.ParseException;
import java.text.SimpleDateFormat;   
import java.util.Date;   
  
import javax.persistence.EntityManager;   
import javax.persistence.EntityManagerFactory;   
import javax.persistence.Persistence;   
import javax.swing.*;   
  
import Modelo.Cliente;   
import Modelo.Compra;   
import Modelo.Conta;   
  
import net.sf.jasperreports.engine.JasperPrint;   
import net.sf.jasperreports.view.JasperViewer;   
  
//import controle.Utilitarios;   
  
// Ctrl+Shift+F => Formata o código   
// Ctrl+A e Ctrl+i => Formata a seleção   
  
public class FiltroCliente extends JFrame {   
    private JLabel rotulo1;   
    private JTextField caixa1;   
    private JButton botao1;   
  
    private static EntityManagerFactory fabricaDeEntidades = null;   
  
    private static EntityManager gerenciador = null;   
    Cliente objetoCliente;   
    ImageIcon icone;   
    public FiltroCliente(EntityManagerFactory fabricaDeEntidades2, EntityManager gerenciador2) throws ParseException {   
        super("Relatório Cliente");   
        Container tela = getContentPane();   
        icone = new ImageIcon("100.gif");   
        botao1 = new JButton (icone);   
        tela.setLayout(null);   
        fabricaDeEntidades=fabricaDeEntidades2;   
        gerenciador=gerenciador2;   
  
        rotulo1 = new JLabel("Data:");   
       
        caixa1 = new JTextField();   
           
        //botao1 = new JButton("Gerar Relatório");   
       
  
        // coluna, linha, largura, altura   
        rotulo1.setBounds(24, 19, 56, 20);   
        caixa1.setBounds(75, 19, 100, 20);   
  
        botao1.setBounds(54, 60, 100, 20);   
           
  
        //rotulo2.setBounds(24, 50, 100, 20);   
        //caixa2.setBounds(75, 50, 100, 20);   
  
           
  
        tela.add(rotulo1);   
        tela.add(caixa1);   
  
        //tela.add(rotulo2);   
        //tela.add(caixa2);   
  
        tela.add(botao1);   
       
    SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");

//      Transforma uma String em um Date
     Date base = formatador.parse("29/01/2007");
     Date hoje= new Date();

//      Calcula a diferença em milisegundos entre as duas datas
     long dif = hoje.getTime() - base.getTime();

//      divide a diferença pelo numero de milisegundos de 1 dia, que seria 86400000
     long dias = dif/(1000L*60*60*24);
     long horas = dif/(1000L*60*60);
     long minutos = dif/(1000L*60);

     System.out.println("Data Atual: " + hoje);
     System.out.println("Data FORMATADA: " + formatador.format(base));
     System.out.println("Dif. em Dias: " + dias);
     System.out.println("Dif. em Horas: " + horas);
     System.out.println("Dif. em Minutos: " + minutos);

     
        botao1.addActionListener(new ActionListener() {   
               
            public void actionPerformed(ActionEvent e) {   
                RelatorioCliente rep = new RelatorioCliente();   
                gerenciador.createQuery(     
                    		"from Cliente pr WHERE data = :data"); 
                JasperPrint relat;   
                try {   
                    relat = rep.gerarRelatorioCliente();   
                    JasperViewer.viewReport(relat, false);   
                } catch (Exception e1) {   
                    e1.printStackTrace();   
                }   
//                 
            }   
            });   
  
        // setSize(largura, altura);   
        setSize(250, 150);   
        setVisible(true);   
        setLocationRelativeTo(null);   
    }   
  
    public static void main(String[] args) throws ParseException {   
  
        fabricaDeEntidades = Persistence   
                .createEntityManagerFactory("TurmaN40PostgreSQL");   
  
        gerenciador = fabricaDeEntidades.createEntityManager();   
  
        FiltroCliente app = new FiltroCliente(fabricaDeEntidades, gerenciador);   
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  
    }   
}
D

conexao do relatorio cliente

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;


public class RelatorioCliente 
{ 
	Connection con;
	
	public JasperPrint gerarRelatorioCliente() 
	throws Exception
	{ JasperPrint rel=null;
	
	String url = "jdbc:postgresql://localhost:5432/TurmaN40";
    try { 
    	Class.forName("org.postgresql.Driver");
    } catch(java.lang.ClassNotFoundException e1) { 
        System.err.print("ClassNotFoundException: "); 
        System.err.println(e1.getMessage()); 
    } 
    try { 
        con = DriverManager.getConnection(url,"postgres", "postgres"); 
    } catch(SQLException ex) { 
        System.err.print("SQLException: "); 
        System.err.println(ex.getMessage()); 

    }

    try	{ // Connection con = Conexao.criaConexao(); 
	HashMap<String, JasperPrint> map= new HashMap<String, JasperPrint>(); 
	map.put("data", rel);
	String arquivoJasper= "C:\\vidracaria\\RelatorioCliente.jasper"; 
	rel=JasperFillManager.fillReport(arquivoJasper,map,con);
	con.close();
	}
	catch (JRException e)
	{ e.printStackTrace(); 
	} 
	return rel; 
	}
}
D

nao tem ideia do que seja o problema o fato que nao esta retornando consulta pois cadastro no banco de dados tem mais nao retornou nenhuma o codigo e esse acima estou tentando a meses fazer esse filtro e nao consigo tem ideia do que seja meu ireport e o 2.0.4 bem simples poderia ajuda? obrigada

R

Eu sugiro, antes de mais nada, remover essa linha do código que trata o evento do botão:

gerenciador.createQuery("from Cliente pr WHERE data = :data");

Você executou o relatório no iReport, ele funciona corretamente ?

D

irei tenta remover e vou testar denovo no ireport funcionou se eu fizer o seguinte teste select * from cliente where date(data)=‘2012-05-29’

assim ele retorna a consulta desse dia caso contrario nao retorna nada.

D

meu relatorio ainda nao filtra nada :frowning:

D

ele chama mais sem consulta nenhuma

R

Essa linha aqui é problemática:

map.put("data", rel);

você tem que passar uma data como parâmetro do relatório, e não o próprio relatório. Tente usar uma instância de java.util.Date no lugar.

D

pode me dar um exemplo de instancia ai dentro uma instancia de java.util.date ou nem?

R

Ué, é só fazer um new Date() que você passa a data atual.[

Mas me diga lá, você conhece pelo menos o básico de Java ? Na boa, porque eu to vendo que você tá sofrendo com coisas muito básicas.

D

cara conheco senao nao teria feito uma aplicacao com tanto codigo o problema que formata data velho nunca tinha feito sacas e quando tentava dava pau vc nao ta aqui pra critica e sim ajudar
manow eu ajudo vc ajuda e fica todo mundo feliz nao precisa critica obrigada pelo apoio.

mais mto obrigada pelas dicas valeu \o

D

eu so tinha pedido uma ajuda com um filtro de relatorio porque nunca filtrei relatorio acabei de me formar…

todo mundo sofre no comeco

mais obrigada

sera q nunca foi iniciante um dia
?

sera?

D

so falta isso pra mim termina esse programa porque alem de estar fazendo esse programa eu tbm to estudando afinal todo iniciante e assim…tbm to baixando mais video aulas estudando pq tem que estuda mto mais enfim te agradeco.

Criado 29 de maio de 2012
Ultima resposta 1 de jun. de 2012
Respostas 21
Participantes 2