[AJUDA] - Não consigo conectar o Ireport ao NetBeans

Olá pessoal, meu problema é o seguinte:

possuo minha conexão com o banco de dados:

import java.sql.*;
import javax.swing.*;

public class conexao{
    
    final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    final private String url = "Jdbc:Odbc:Estoque";
    final private String usuario = "";
    final private String senha = "";
    private Connection conexao; 
    public Statement statement;
    public ResultSet resultset;
    
    public boolean conecta(){
        boolean result = true;
        try{
            Class.forName(driver);
            conexao = DriverManager.getConnection(url, usuario, senha);
            JOptionPane.showMessageDialog(null, "Conectado com o Banco de Dados!");
        }
        catch(ClassNotFoundException Driver){
            JOptionPane.showMessageDialog(null, "Driver não Localizado " + Driver);
            result = false;
        }
        catch(SQLException Fonte){
            JOptionPane.showMessageDialog(null, "Deu erro na conexão " + "com a fonte de dados " + Fonte);
            result = false;
        }
        return result;        
    }

public void executeSQL(String sql){
        try{
            statement = conexao.createStatement();
            statement = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
        }
        catch(SQLException sqlex){
            JOptionPane.showMessageDialog(null, "Não foi possivel " +
                    "executar o comando sql, " + sqlex + ", o sql passado foi " + sql);
        }        
 }

já tenho meu Relatório criado no Ireport (estoque.jasper), porém estou tendo dificuldades
na hora de efetuar a conexão do mesmo com o Netbeans (chamar o relatório através de um jButton por exemplo)

tentei montar a “classe Relatorio” e é aqui que minha dificuldade entra, aqui está minha classe:

package utilitarios;

import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.*;
import java.sql.*;
import java.util.*;
import utilitarios.conexao;


public class Relatorio {
    conexao con = new conexao();

    public void rel() {
        try {
            con.conecta();
            con.executeSQL("select * from estoque");
            
            JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);  //nao sei se está certo
            
            /* dentro do fillReport vao 3 parâmetros: nao sei qual é o primeiro então a principio
             chamarei de reticências (...), o segundo imagino que seja new HashMap() pois nao vou adicionar 
             nada ao relatorio, e o terceiro deve ser o jrRS declarado acima */
            JasperPrint jasperPrint = JasperFillManager.fillReport(... , new HashMap(), jrRS); 
            
            //a partir daqui nao sei mais o que fazer            
                         
        } catch (Exception erro){
            JOptionPane.showMessageDialog(null, "Erro = " + erro);
        }
    }

    public static void main(String args[]) {
        new Relatorio().rel();
    } 
}

já olhei um monte de tutoriais + mesmo assim não consigo entender, se alguém puder me ajudar
ficarei grato. :smiley:

Altere sua classe Relatorio de:

[code]package utilitarios;

import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.;
import net.sf.jasperreports.view.
;
import java.sql.;
import java.util.
;
import utilitarios.conexao;

public class Relatorio {
conexao con = new conexao();

public void rel() {   
    try {   
        con.conecta();   
        con.executeSQL("select * from estoque");   
           
        JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);  //nao sei se está certo   
           
        /* dentro do fillReport vao 3 parâmetros: nao sei qual é o primeiro então a principio  
         chamarei de reticências (...), o segundo imagino que seja new HashMap() pois nao vou adicionar  
         nada ao relatorio, e o terceiro deve ser o jrRS declarado acima */   
        JasperPrint jasperPrint = JasperFillManager.fillReport(... , new HashMap(), jrRS);   
           
        //a partir daqui nao sei mais o que fazer               
                       
    } catch (Exception erro){   
        JOptionPane.showMessageDialog(null, "Erro = " + erro);   
    }   
}   

public static void main(String args[]) {   
    new Relatorio().rel();   
}   

}[/code]
Para:

[code]package utilitarios;

import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.;
import net.sf.jasperreports.view.
;
import java.sql.;
import java.util.
;
import utilitarios.conexao;

public class Relatorio {
conexao con = new conexao();

public void rel() {   
    try {   
        con.conecta();   
        con.executeSQL("select * from estoque");   
           
         //Implementação da interface JRDataSource para DataSource ResultSet
         JRResultSetDataSource jrRS = new JRResultSetDataSource( con.resultset );
        
         //HashMap de parametros utilizados no relatório. Sempre instanciados mesmo sem parametros
         Map parameters = new HashMap();
         //parameters.put("COLUNA", valor);
        
          //Preenche o relatório com os dados. Gera o arquivo lancamentosjuridico.jrprint
         JasperFillManager.fillReportToFile( "caminnhoDoSeu.jasper", parameters, jrRS );
                                
         //Exporta para o formato PDF 
         JasperExportManager.exportReportToPdfFile( "caminhoDoSeu.jrprint" );
        
         //Visualiza o relatório em formato PDF
         JasperViewer.viewReport( "caminhoDoSeu.jrprint" , false , false);
                       
    } catch (Exception erro){   
        JOptionPane.showMessageDialog(null, "Erro = " + erro);   
    }   
}   

public static void main(String args[]) {   
    new Relatorio().rel();   
}   

}[/code]
Nesse exemplo não consegui visualizar em pdf, então visualizei com o viewer do Jasper mesmo.
Acho que assim funciona.
Tenta ai :smiley:
T+

opa… obrigado mesmo cara…
só que aqui ainda está dando erro.

aparece esse erro aqui:
digamos que meu .jasper está em D:/Nova Pasta/estoque.jasper

entao na linha onde eu teria que colocar o caminho ficaria:

JasperFillManager.fillReportToFile("D:/Nova Pasta/estoque.jasper", parameters, jrRS );

certo?

se for isto, aparece esse erro:

Erro = net.sf.jasperreports.engine.JRException: Class not found when loading object from file: D:\Nova Pasta\estoque.jasper

o que estou fazendo de errado? :?

[quote=merso]opa… obrigado mesmo cara…
só que aqui ainda está dando erro.

aparece esse erro aqui:
digamos que meu .jasper está em D:/Nova Pasta/estoque.jasper

entao na linha onde eu teria que colocar o caminho ficaria:

JasperFillManager.fillReportToFile("D:/Nova Pasta/estoque.jasper", parameters, jrRS );

certo?

se for isto, aparece esse erro:

Erro = net.sf.jasperreports.engine.JRException: Class not found when loading object from file: D:\Nova Pasta\estoque.jasper

o que estou fazendo de errado? :? [/quote]
Bom, uma opção seria:

JasperFillManager.fillReportToFile("D:\\Nova Pasta\\estoque.jasper", parameters, jrRS );

ou, coloque o relatorio.jasper e o relatorio.jrprint dentro da pasta do seu projeto.
Abraços

cara… fiz exatamente como vc falou:

primeiro troquei C:\Nova Pasta\estoque.jasper por C:\Nova Pasta\estoque.jasper

e nao deu certo.

Depois coloquei o arquivo (já estava também) na pasta do projeto, e também nao funcionou.

O que mais posso fazer?
:?

outra coisa, eu nao sei onde fica esse tal “estoque.jrprint”

Provavelmente está no diretório do iReport.

Do contrário mande o assistente de pesquisa do windows procurá-lo para vc e o coloque dentro da pasta raiz do projeto juntamente com o estoque.jasper.

ok.

Mas este .jrprint é para criar o pdf?

Se for isto, não estou querendo criar pdf, eu apenas fiz a classe
para mostrar o relatoro a tela. (só implementei um “main” ali para ver se funcionava minha classe).

Eu dei um “debug file” e o erro acontece quando chega na linha:

JasperFillManager.fillReportToFile("D:\\Hemerson\\JAVA\\Projetos\\Lactovel\\estoque1.jasper", parameters, jrRS ); 

quando vou passar dela já aparece o erro na tela.

e não tem nenhum. jrprint na pasta do ireport. :frowning:

pra gerar o arquivo .pdf,
teria que ser:

 JasperExportManager.exportReportToPdfFile( "estoque1.jrprint" );

porém comigo eu não consegui visualizá-lo com .pdf somente com .jrprint.

Onde estão os arquivos gerado pelo jasper?

Obs.: configurou corretamente o CLASSPATH?

vamos lá:
no meu CLASSPATH eu tenho o seguinte:

Nome da variável: CLASSPATH
Valor da variável: C:\Arquivos de programas\Java\jdk1.5.0_06\lib\tools.jar;C:\Arquivos de programas\JasperSoft\iReport-1.2.7\lib;

falta alguma coisa?

até agora esse tópico tava dando problema,
agora voltou a funcionar?

:?

[quote=merso]até agora esse tópico tava dando problema,
agora voltou a funcionar?

:? [/quote]

É verdade, também não entendi :!: :?:

Tente o seguinte:

Vá até janela no netbeans depois arquivos, click com o botão direito do mouse em cima do seu projeto, vá até propriedades depois em bibliotecas clique em adicionar JAR localize a pasta lib do ireport e adicione todo conteúdo dela ao projeto.

Pode ser falta de alguma biblioteca.

Outra coisa, no ireport consegue visualizar o relatório?

Opa… 1 coisa boa e outra ruim.

Olha só o que aconteceu agora: ^^

  1. fiz aquele negócio de adicionar o conteúdo da pasta lib lá em Propriedades/Bibliotecas/adicionar…
  2. eu dei um “debug file”, dai quando chegou na linha que estava dando problema:
JasperFillManager.fillReportToFile("D:\\JAVA\\Projetos\\Lactovel\\estoque1.jasper", parameters, jrRS );

ele passou \o/\o/…

  1. quando foi para a próxima linha:
JasperExportManager.exportReportToPdfFile( "D:\\JAVA\\Projetos\\Lactovel\\estoque1.jrprint" );

deu o seguinte erro: Erro = net.sf.jasperreports.engine.JRException:java.io.FileNotFoundException: D:\JAVA\Projetos\Lactovel\estoque1.jrprint
deve ser porque ele nao achou o arquivo jrprint. Mas beleza, eu nem quero criar o pdf. (por enquanto)

  1. dai eu coloquei a linha acima em comentário e troquei a linha que vinha depois:
JasperViewer.viewReport( "D:\\JAVA\\Projetos\\Lactovel\\estoque1.jrprint" , false , false); 

por

JasperViewer.viewReport( "D:\\JAVA\\Projetos\\Lactovel\\estoque1.jasper" , false , false); 

para ver o que aconteceu… dai deu o seguinte erro:

Erro = java.lang.ClassCastException: net.sf.jasperreports.engine.JasperReport cannot be cast to net.sf.jasperreports.engine.JasperPrint

isso eu nao sei o que significa.

  1. Abri o Ireport e rodei meu relatório, e lá funcionou perfeitamente, inclusive a impressão.

O que eu faço agora??
Posso estar errado, mas acho que agora falta pouco.

Obrigado por enquanto e ainda conto com sua ajuda. :wink:

Por algum motivo ele não está gerando o .jrprint que é para visualizar com viewer do jasper e fazer a impressão.

Verifique se os parametros do resultSet são os mesmos esperados pelo relatório do jasper.
Teste o resultSet pra saber se está recebendo os dados da consulta.

Com relação a:

não iria funcionar mesmo, ele espera um arquivo .pdf, .jrprint, .html, .xml etc.

Tente agora colocar ao invéz do caminho o arquivo, ou seja:

JRResultSetDataSource jrRS = new JRResultSetDataSource( con.resultset ); Map parameters = new HashMap(); //parameters.put("COLUNA", valor); JasperFillManager.fillReportToFile( "estoque1.jasper", parameters, jrRS ); JasperExportManager.exportReportToPdfFile( "estoque1.jrprint" ); JasperViewer.viewReport( "estoque1.jrprint" , false , false);
Colocando o último arquivo compilado do jasper, o estoque1.jasper na pasta raiz do projeto.

fiz algumas mudanças na minha classe e consegui
fazer o que queria! \o

só que ainda tenho uma duvida:

Se eu não usar o tal .jrprint eu não vou conseguir imprimir?

do jeito que está o código, se eu usar a classe através de um jButton,
a aplicação exibe o relatório tudo certo. Dai se eu clicar no botãozinho da impressora,
aparece o seguinte erro: “Erro ao imprimir relatório. Verifique o donsole para detalhes.”

meu código está assim:

import javax.swing.JOptionPane;     
import net.sf.jasperreports.engine.*;     
import net.sf.jasperreports.view.*;     
import java.sql.*;     
import java.util.*;     
import utilitarios.conexao;     


public class Relatorio {     
    //conexão ao banco de dados
    conexao con = new conexao();     

    public void rel() {     
        try {     
            con.conecta();     
            con.executeSQL("select * from estoque");     

            //Implementação da interface JRDataSource para DataSource ResultSet  
            JRResultSetDataSource jrRS = new JRResultSetDataSource( con.resultset );  

            //HashMap de parametros utilizados no relatório.   
            Map parameters = new HashMap();  
            
            //JasperFillManager.fillReportToFile("D:\\JAVA\\Projetos\\Lactovel\\Relatorio\\Estoque.jasper", parameters, jrRS );  
            
            //Exporta para o formato PDF   
            //JasperExportManager.exportReportToPdfFile( "D:\\JAVA\\Projetos\\Lactovel\\Relatorio\\Estoque.jrprint" );  

            //Visualiza o relatório em formato PDF
            //JasperViewer.viewReport( "D:\\JAVA\\Projetos\\Lactovel\\Relatorio\\Estoque.jasper" , false , false);  
            
            JasperPrint jasperPrint = JasperFillManager.fillReport(
                    "D:\\JAVA\\Projetos\\Lactovel\\Relatorio\\Estoque.jasper", parameters, jrRS);
            
            JasperViewer.viewReport(jasperPrint, false);
        } catch (Exception erro){     
            JOptionPane.showMessageDialog(null, "Erro = " + erro);     
        }     
    }     

    public static void main(String args[]) {     
        new Relatorio().rel();     
    }     
}  

se eu conseguir criar o tal do .jrprint e mostrar o arquivo .pdf, eu consigo fazer a impressão?

estou com dificuldades com esse .jrprint.

Gostaria da sua ajuda. :smiley:

ATUALIZANDO:

depois das alterações que vc falou anteriormente, meu código está assim:

import javax.swing.JOptionPane;     
import net.sf.jasperreports.engine.*;     
import net.sf.jasperreports.view.*;     
import java.sql.*;     
import java.util.*;     
import utilitarios.conexao;     


public class Relatorio {     
    //conexão ao banco de dados
    conexao con = new conexao();     

    public void rel() {     
        try {     
            con.conecta();     
            con.executeSQL("select * from estoque");     

            //Implementação da interface JRDataSource para DataSource ResultSet  
            JRResultSetDataSource jrRS = new JRResultSetDataSource( con.resultset );  

            //HashMap de parametros utilizados no relatório.   
            Map parameters = new HashMap();  
            
            JasperFillManager.fillReportToFile( "Estoque.jasper", parameters, jrRS );     
            JasperExportManager.exportReportToPdfFile( "Estoque.jrprint" );  //Exporta para o formato PDF    
            JasperViewer.viewReport( "Estoque.jrprint" , false , false);     //Visualiza o relatório em formato PDF
            
            /*JasperPrint jasperPrint = JasperFillManager.fillReport(
                    "Estoque.jasper", parameters, jrRS);
            
            JasperViewer.viewReport(jasperPrint, false);*/
        } catch (Exception erro){     
            JOptionPane.showMessageDialog(null, "Erro = " + erro);     
        }     
    }     

    public static void main(String args[]) {     
        new Relatorio().rel();     
    }   
}  

Está tudo funcionando!
Agora eu queria saber como eu faço para conseguir imprimir. Continua dando o mesmo erro quando eu clico na impressora.

fiz alguns testes aqui e sem o .jrprint ele não imprime, mas vc disse que esle está funcionando corretamene.

O que seria esse corretamente, ele gerou o .jrprint?
Está visualizando o relatório atravéz da aplicação ou pelo ireport?

O que seria esse corretamente, ele gerou o .jrprint?
Está visualizando o relatório atravéz da aplicação ou pelo ireport?

Nas linhas onde tem que colocar o diretório, eu só coloquei “Estoque.jasper” (troquei o nome de estoque1 para Estoque)
e só tinha esse arquivo .jasper na pasta do meu projeto.

Quando eu executo toda a aplicação, logo que eu clico no botão que chama a classe Relatório,
ele mostra o relatório perfeitamente, mas mostra pelo JasperViewer.

até ai tudo ok.

Dai eu fecho a aplicação, e vou na pasta do projeto.
Lá tem o arquivo .jasper, o .jrprint e o .pdf também.

Mas ainda dá erro quando eu clico para imprimir.

O que eu faço?