Relatorio ireport , não consigo carregar os subreport na aplicação java

Fiz um relatório IReport que tem 3 Sub Relatórios no IReport funcionam tudo certo, mas, quando puxo o IReportprincipal pelo Java ele não carrega os Sub Relatórios só o principal?

como você está passando a conexão para os sub-Relatórios?

qual a fonte de dados dos sub-relatórios? está passando via parametro?

poste o código fonte da chamada do relatório.

esse é o codigo que chama o relatorio , muito obrigado pela ajuda.

try {
conexao con = new conexao();
con.conectar(“jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”,“root”,“evolution”);
String venda = CODVEND.getText();
String sql = “select * from vendas where COD_VENDA =’”+CODVEND.getText()+"’" ;
con.ExecutaSQL(sql);
JRResultSetDataSource relatresult = new JRResultSetDataSource(con.resultset);
HashMap parametros = new HashMap();
parametros.put(“CODVENDA”, Integer.parseInt(CODVEND.getText()));
JasperPrint jpPrint = JasperFillManager.fillReport(“src\relatorios\relatoriovenda.jasper”,parametros,relatresult );

        JasperViewer jv = new JasperViewer(jpPrint,false); 
     
        jv.setVisible(true);
        
    } catch (JRException e) {
        JOptionPane.showMessageDialog(rootPane, "erro ao chamar relatorio"+e);
  }

try {
conexao con = new conexao();
con.conectar(“jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”,“root”,“evolution”);
String venda = CODVEND.getText();
String sql = “select * from vendas where COD_VENDA =’”+CODVEND.getText()+"’" ;
con.ExecutaSQL(sql);
JRResultSetDataSource relatresult = new JRResultSetDataSource(con.resultset);
HashMap parametros = new HashMap();
parametros.put(“CODVENDA”, Integer.parseInt(CODVEND.getText()));
JasperPrint jpPrint = JasperFillManager.fillReport(“src\relatorios\relatoriovenda.jasper”,parametros,relatresult );

        JasperViewer jv = new JasperViewer(jpPrint,false); 
     
        jv.setVisible(true);
        
    } catch (JRException e) {
        JOptionPane.showMessageDialog(rootPane, "erro ao chamar relatorio"+e);
  }[quote="Sandro_Machado, post:2, topic:334547, full:true"]

como você está passando a conexão para os sub-Relatórios?

qual a fonte de dados dos sub-relatórios? está passando via parametro?

poste o código fonte da chamada do relatório.
[/quote]

esse é o codigo que chama o relatorio sandro muito obrigado por ajudar , estudo sozinho é complicado

eu acabei de modificar o codigo passando o caminho do sub relatorio como parametro para o SUBREPORT_DIR
mas mesmo assim nao me trouxe o sub so o principal ,se alguem puder ajudar ai e deixar skype sei la muito obrigado a todos

manda o codigo que passa o caminho do subrelatorio.

como você está passando a conexão para os subrelatórios?

assim?

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource()

como você passa as informações para popular os fields dos subrelatórios?

isso que nao sei fazer passar a conexao para os subrelatorios

try {
conexao con = new conexao();
con.conectar(“jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”,“root”,“evolution”);
String sql = “select * from vendas where COD_VENDA =’”+CODVEND.getText()+"’" ;
con.ExecutaSQL(sql);
JRResultSetDataSource relatresult = new JRResultSetDataSource(con.resultset);
HashMap parametros = new HashMap();
parametros.put(“CODVEND”,Integer.parseInt(CODVEND.getText()));
parametros.put(“SUBREPORT_DIR”, “src\relatorios\”);
//teste para popular subrelatorio
String sqlsub = “select * from servicos where COD_VENDA =’”+CODVEND.getText()+"’" ;
con.ExecutaSQL(sql);
JRResultSetDataSource subvendas = new JRResultSetDataSource(con.resultset);
parametros.put(“REPORT_CONNECTION” ,con.resultset) ;
//teste para popular subrelatorio

        JasperPrint jpPrint = JasperFillManager.fillReport("src\\relatorios\\relatoriovenda.jasper",parametros,relatresult);
    
        JasperViewer jv = new JasperViewer(jpPrint,false); 
     
        jv.setVisible(true);
        
    } catch (JRException e) {
        JOptionPane.showMessageDialog(rootPane, "erro ao chamar relatorio"+e);
  }

tentei fazer assim agora , mas nao sei se é o jeito certo de popular o sub relatorio, se puder me ajudar agreço muito

sandro vc tem skype ?
então eu achei que so passando o parametro para o formulario principal ja ia dar certo.
nãos sabia que precisava passar pela aplicação tambem ,
eu não usei
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource()
como faço para poder popular os subrelatorios pelo java ?

estou meio confuso, você está passando para o subrelatório o mesmo resultSet do relatório principal?

não seria outras informações?

outra coisa no ireport você tem que definir como o subrelatório vai receber as informações, confira isto.

eu passo uma List por parametro

            parametros.put("listaEmpresa", listEmpresa);

e no ireport eu crio um novo parametro $P{listEmpresa}

com isso defino no source Expression do subrelatório

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listEmpresa})

vou procurar pra ver como se usa o new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listEmpresa})
nunca usei ele é a primeira vez que faço relatórios desculpa a ignorância .

assim estaria certo sandro
String sqlsub = “select * from servicos where COD_VENDA =’”+CODVEND.getText()+"’" ;
con.ExecutaSQL(sqlsub);
parametros.put(“REPORT_CONNECTION” ,con.resultset) ;

passa o resultSet pra uma List, então pega essa lista e passa por parametro parametros.put("listaServico", sualistaAqui);, onde listaServico voce tem que criar um
parametro no ireport com exatamente o mesmo nome.

e nas propriedades do subrelatório, no Data source Expression você coloca

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listaServico})

blz vou tentar aqui qualquer coisa volto a te perguntar vleww muito obrigadooo to revirando a net aqui , mas acho que vai dar certo vo tentar aqui !

kkkkk cara de tanto revirar eu sei todos os campos que vc me falou pra altera , ja deixei tudo no jeito como faço pra passar o resultset da minha sql em uma list ? (dai ja era) kkkk

tem que passar por um for e ir adicionando a Lis conforme for passando pelo rs.next()

abaixo um exemplo pra você ter uma ideia

ArrayList<Usuarios> listaUsuarios;

    try {
        s.execute("SELECT * FROM USUARIOS ORDER BY IDUSUARIO");
        ResultSet rs = s.getResultSet();
        while (rs.next()) {
            listaUsuarios.add(new Usuarios(Integer.parseInt(rs.getString("IDUSUARIO")), rs.getString("NOMEUSUARIO"), rs.getString("NICKUSUARIO"), rs.getString("SENHAUSUARIO")));
        }
    } catch (SQLException ex) {
        Logger.getLogger(CadastroEmpresa.class.getName()).log(Level.SEVERE, null, ex);
    }

blz ja tive uma ideia vou fazer aqui e te falo o resultado muito obrigado mesmo

ai sandrao hj eu entendi a desse codigooo kkkkkkk
hj to passando o sub relatorio certinho conforme a venda , lembrei desse codigo ja ta dando certo aqui kkk vlew

1 curtida