parÂmetros no ireport

12 respostas
C

Boa tarde
gostaria de uma ajuda

criei um parâmetro no ireport para pedir a data inicial e a data final , funcionou, só que quando eu abro este relatório pelo aplicativo java ele não pede a data inicial e nem a data final ,

como faço??

12 Respostas

H

Você deve construir um Map e passar para o Ireport os parametros necessários para o seu relatório.

Como caminho de imagens, data e outra coisa que você utilize internamente no seu relatório.

CarlosEduardoDantas

cristiandrj:
Boa tarde
gostaria de uma ajuda

criei um parâmetro no ireport para pedir a data inicial e a data final , funcionou, só que quando eu abro este relatório pelo aplicativo java ele não pede a data inicial e nem a data final ,

como faço??

brother… o que está acontecendo é que os parametros que voce criou como “show prompt”, voce criou no iReport e não na sua aplicação… aquele prompt que aparece no iReport pedindo para passar os parametros serve unicamente para testar os valores dentro do iReport…

na sua aplicação, voce passará os parametros por um Map, sendo que o “prompt” será criado por voce dentro do seu projeto

CarlosEduardoDantas

só lembrando que…voce nao deve remover os parametros nem o prompt do seu relatorio no iReport… o prompt pq é bom pra vc testar e os parametros pq serao chamados pela aplicacao, porém o Map na sua aplicacao faz exatamente o que os valores que vc digita no prompt faz.

C

Valeu,

bom é o seguinte,

eu consigo retornar valores do banco e setar em um jtable através de uma consulta entre datas numa boa

o código é este

private void ConsultarLancamentos(){
        CombustivelControl cb = new CombustivelControl();
        //if (tfDataInicial.getValue() == null){
          //  JOptionPane.showMessageDialog(this, "Informe a data Inicial!");
//            tfDataInicial.requestFocus();
  //      } else if (tfDataFinal.getValue() == null){
    //        JOptionPane.showMessageDialog(this, "Informe a data Final!");
      //      tfDataFinal.requestFocus();
        //} else {
            while (tmCombustivel.getRowCount() > 0){
                tmCombustivel.removeRow(0);
            }
            
                    SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
            
            java.util.Date dataInicio = (java.util.Date) tfDataInicial.getValue();
            //System.out.println(formato.format(dataInicio));
                        
            
         //   System.out.println(formato.format(dataInicio));
                                          
            
            java.util.Date dataFim = (java.util.Date) tfDataFinal.getValue();
                  
                      
            
                buscaCombustivel= cb.listarCombustivelPeriodo(Date.valueOf(formato.format(dataInicio)), Date.valueOf(formato.format(dataFim)));
                String [] campos = new String[] {null, null, null, null, null,null,null,null,null};
                for (int i = 0; i < buscaCombustivel.size(); i++){
                    tmCombustivel.addRow(campos);

                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getId(), i, 0);
                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getNotaFiscal(),i,1);
                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getNomeEscala(),i,2);
                    SimpleDateFormat formato1 = new SimpleDateFormat("dd-MM-yyyy");
                       
                    java.sql.Date data = buscaCombustivel.get(i).getData();

                    tmCombustivel.setValueAt(formato1.format(data),i,3);

                                      
                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getPlaca(),i,4);
                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getLitros(),i,5);
                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getTipo(),i,6);
                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getAutorizacao(),i,7);
                    tmCombustivel.setValueAt(buscaCombustivel.get(i).getValor(),i,8);    
                    
                }
                if (buscaCombustivel.size() == 0){
                    JOptionPane.showMessageDialog(this, "Nenhum registro encontrado!");
                }
            }

Agora como faço o mesmo para abrir o relatório ireport com o resultado baseado no critério de data usado acima???

C

Este é o meu código para chamar o relatório e dá certo, só que gostaria de implementar o código acima para abrir este relatório com o mesmo critério de busca entre datas acima

AcessoMySql con = new AcessoMySql();

                        try 
  {
     
      CombustivelControl cb = new CombustivelControl();
    

  
       String sql =("select * from Conrtolecombust"); 
                               
            
con.conectar();

con.executeSQL(sql);

Map param = new HashMap(); 
      
 JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
      JasperPrint jasperPrint = JasperFillManager.fillReport(
      "relatorios/CombustivelPeriodo.jasper", new HashMap(), jrRS);
      JasperViewer.viewReport(jasperPrint);
  } catch (Exception erro){
             JOptionPane.showMessageDialog(null,"deu erro ="+erro);
   }


        
    }

Vão me ajudar bastante galera

CarlosEduardoDantas

cara… é o seguinte… nesse caso acima que vc fez, nem precisa jogar parametros la pro relatorio, basta alterar a query para o codigo abaixo:

select * from Conrtolecombust where SEU_CAMPO_DE_DATA between dataInicio and dataFim

mas eu particularmente nao gosto mto desse tipo de implementação, falando de JDBC claro, primeiro porque é melhor ter a query no seu relatório para testar à vontade dentro do iReport … enviando o arquivo .jasper para a aplicação apenas qdo o relatorio estiver muitissimo bem testado e segundo pq queries com parametros no fonte acho que polui o codigo… (nesse caso de relatorios, aonde temos um ambiente especifico pra isso)

entao eu colocaria a query dentro do seu iReport assim:

select * from Conrtolecombust where SEU_CAMPO_DE_DATA between $P{dataInicio} and $P{dataFim}

crie os 2 parametros dataInicio e dataFim la em view | parameters

beleza… dentro do seu codigo fonte, apenas faça assim:

Map param = new HashMap();
    param.put("dataInicio",dataInicio); /* dataInicio é a variavel populada no seu outro fonte */ 
    param.put("dataFim",dataFim); /* dataFim é a variavel populada no seu outro fonte */

    JasperPrint jasperPrint = JasperFillManager.fillReport(  
       "relatorios/CombustivelPeriodo.jasper", param, con);  
    JasperViewer.viewReport(jasperPrint);
C

Olá, muito obrigado pela ajuda

fiz como você falou, e deu este erro

JasperPrint jasperPrint = JasperFillManager.fillReport(
"relatorios/CombustivelPeriodo.jasper", param,con);     

// nesta linha acima deu este erro   symbol : method fillReport(java.lang.String,java.util.Map,dao.AcessoMysql)
//location: class net.sf.jasperreports.engine.JasperFillManager
CarlosEduardoDantas
cristiandrj:
Olá, muito obrigado pela ajuda

fiz como você falou, e deu este erro

JasperPrint jasperPrint = JasperFillManager.fillReport(
"relatorios/CombustivelPeriodo.jasper", param,con);     

// nesta linha acima deu este erro   symbol : method fillReport(java.lang.String,java.util.Map,dao.AcessoMysql)
//location: class net.sf.jasperreports.engine.JasperFillManager

o erro é porque o terceiro parametro está pedindo o seu Connection do JDBC... como a variavel chamava con eu achava que se tratava de um Connection.

C

é, apesar da estar escrito AcessoMysql, é uma conexão jdbc com o banco em access

AcessoMySql con = new AcessoMySql(); // fiz com o nome de con mesmo

CarlosEduardoDantas

foi mal, nao tinha reparado… mas conseguiu resolver?

C

Olá, ainda não consegui , ele dá este erro mas não sei como resolver

vou tentar a maneira que você também me ensinou que é esta para ver se consigo

String sql "select * from Conrtolecombust where SEU_CAMPO_DE_DATA between dataInicio and dataFim "

CarlosEduardoDantas

cristiandrj:
Olá, ainda não consegui , ele dá este erro mas não sei como resolver

vou tentar a maneira que você também me ensinou que é esta para ver se consigo

String sql "select * from Conrtolecombust where SEU_CAMPO_DE_DATA between dataInicio and dataFim "

em algum momento vc precisa setar sua conexao JDBC … como no exemplo abaixo:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql?user=root");

basta criar um metodo pra retornar essa Connection dentro da sua classe.

Criado 7 de novembro de 2008
Ultima resposta 13 de nov. de 2008
Respostas 12
Participantes 3