Utilizando filtro para gerar relatorios com iReport

Caros colegas, tenho grandes duvidas em relação a como fazer uma pesquisa para filtrar as informações do relatorio.
Como por exemplo digitar uma data inicial e uma data final dai gerar um relatorio contendo apenas informações filtradas pela data.

Se puderem ajudar, ou tiverem algum codigo para ter uma base de como gerar o filtro, agradeço …

Olá gleybsonmanso, com um post tão generico assim fica dificil vc conseguir uma ajuda.
Tente falar realmente qual o seu problema, por exemplo:

  • vc esta usando hibernate ou a api sql do java?
  • é um sistema web ou desktop?
  • ja tem algo implementado e ta com problema gerando algum erro?

Tente expor realmente seu problema, assim com certeza o pessoal aqui do forum vai poder te ajudar!

[]'s

Estou precisando gerar um relatorio com parametros de pesquisa por data, para uma aplicação desktop, estou usando uma conexão com banco de dados MySQL.
Já tenho o seguinte codigo implementado, o qual gera perfeitamente o relatorios:

public void geraRelatorio_veiculos_desejados() throws JRException, Exception {   
  
Connection con = getConnection();   
Statement stm = con.createStatement();   
String query = "select * from cadastro";   
ResultSet rs = stm.executeQuery(query);   
HashMap parameters = new HashMap();   
JasperPrint jp = JasperFillManager.fillReport("C:\\Relatorios\\rel_veiculos.jasper", parameters, con);   
JasperViewer jrv = new JasperViewer(jp,false);   
jrv.setVisible(true);   
JasperViewer.viewReport("C:\\Relatorios\\rel_veiculos.pdf", true);   
  
}  

O codigo acima estou utilizando dentro de um jButton chamado “gerar relatorio”.

Gostaria de ajuda, desde já obrigado.

Pelo visto vc ja tem td funcionando falta so a consulta por data, se for isso vc tera q fazer:

  • Alterar seu relatorio original no ireport para exibir tambem as datas do filtro;
  • Vc pode controlar a visibilidade dos labels das datas inicial e final para exibir apenas se os parametros data inicial e final forem passados para o relatorio;
  • Vc vai precisar setar essas datas dos parametros na sua varialvel parameters;
  • Vc vai precisar alterar seu sql para algo como:
String query = "select * from cadastro where data between dataInicial and dataFinal"

(provavelmente esse sql esta errado, vc precisa adotar o nome do seu campo em sua tabela)

Fora isso é o mesmo esquema pra vc gerar o seu relatorio.

[]'s

Olá thiago, fiz umas alterações no codigo que passei anteriormente.

public void geraRelatorio_clientes() throws JRException, Exception {   
        Connection con = getConnection();   
        Statement stm = con.createStatement();   
        String query = "select * from cadastro where data_cadastro between '"+dtini.getText().toUpperCase()+"' and '"+dtfim.getText().toUpperCase()+"'";       
        
        ResultSet rs = stm.executeQuery(query);   
        
        HashMap parameters = new HashMap();   
        parameters.put("dt1", " '"+dtini.getText().toUpperCase()+"' ");
        parameters.put("dt2", "'"+dtfim.getText().toUpperCase()+"'");
        
        JasperPrint jp = JasperFillManager.fillReport("C:\\Relatorios\\rel_clientes2.jasper", parameters, con);   
        JasperViewer jrv = new JasperViewer(jp,false);   
        jrv.setVisible(true);   
  
        JasperViewer.viewReport("C:\\Relatorios\\rel_clientes2.pdf", true);   
    }  

Fiz alteração no select e acrecentei dois parametros. Teria algo mais a acrecentar e se eu devo colocar o select do report como esta no pograma acima?
Sendo que o select do report est´r assim: select * from cadastro

Obrigado deste já.

amigo se o seu campo for um data no banco essa consulta não vai funcionar pq vc ta passando String, da uma olhada nisso.

Hum vc faz a consulta no relatorio né, ou ta passando a consulta como parametro?

Se der algum erro posta o erro q fica mais facil ajudar!

[]'s

Thiago joia ?

O campo la no banco do tipo String mesmo, então o codigo está certo?
Eu tenho a consulta do codigo e no report esta configurado na query uma consulta tambem.
Se vc pudese dar uma olhadinha no arquivo report agradeceria.

Cara, posso estar enganado, mas acho q vc não vai conseguir filtrar por um periodo usando String’s, o campo teria q ser date.

Eu não costumo gerar o relatorio fazendo consulta sql, sempre passo a coleção ja pronta pro relatorio e ele só tem o trabalho de montar.

Posta ai que eu dou uma olhada.

[]'s

Então vou mudar o campo de String para Date.
Mas enquanto isso estou lhe enviando o arquivo gerado pelo Ireport para seu email ok.
Se caso vc tirer algum exemplo que possa me enviar, ficaria agradecido…

Atenciosamente.

Cara, nao tenho mais o ireport instalado na minha maq. aqui no serviço não usamos ele.

E pelo xml fica dificil analisar.

sorry!

Olha só…duas dicas:

  • Não utilize querys no relatório. Utilize JRCollectionBeanDatasource.
  • Não passe o caminho do relatório. Se tu colocar sua aplicação em outro local? Utilize this.getClass().getResourceAsStream("/META-INF/nome-relatorio.jasper"), por exemplo se seu relatório estiver na pasta META-INF do teu arquivo .jar.

Da uma procurada no guj que tem um tutorial que parece ser completo, ensinando a usar bean para mandar os dados.

Fernando

Concordo plenamente com as dicas do amigo Fernando, eu sempre utilizo o JRBeanCollectionDataSource para enviar os dados para meus relatorios.

Segue um link de um blog onde tem um tutorial muito bom sobre o uso do JRBeanCollectionDataSource.

http://www.furutani.com.br/2009/02/usando-o-jrbeancollectiondatasource/

[]'s

pessoal estou com o mesmo problema nao consigo fazer o relatorio alguem pode me ajudar