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