[resolvido]filtro de relatorio no ireport

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

[code]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();   
            }   

//
}
});
[/code]

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)

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?

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

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

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

jpa e web nao e?

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"

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}?

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.

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.

[code]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/(1000L606024);
long horas = dif/(1000L
6060);
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);   

}   

} [/code]

conexao do relatorio cliente

[code]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; 
}

}[/code]

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

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 ?

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.

meu relatorio ainda nao filtra nada :frowning:

ele chama mais sem consulta nenhuma

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.

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

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.

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