Ireport não reconhece resultset no netbeans (RESOLVIDO)

Montei um relatorio que funciona bonitinho…desde que eu não utilize resultset para filtrar os resultados !
Ele simplesmente diz que não há paginas ! ou então não consegue achar um campo retornando field not found
O relatorio foi criado com IReport e incorporado a projeto no NetBeans 7.0, seguem as rotinas;

  • botão que chama o relatorio

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { try { String seletor = "Select * from cadastroempresa where cnpj = " + "'" + cnpj.getText() + "'" + ""; //seletor = "Select * from cadastroempresa where status = 'ATIVA'"; System.out.println(seletor); gRelatorio(seletor,"cadempr.jasper","pegasus"); } catch (JRException ex) { Logger.getLogger(clientes1.class.getName()).log(Level.SEVERE, null, ex); } catch (Exception ex) { Logger.getLogger(clientes1.class.getName()).log(Level.SEVERE, null, ex); } }

  • metodo que (deveria) imprimir o relatorio:

[code]public void gRelatorio(String seletor,String relatorio, String banco) throws JRException, Exception {
java.sql.Connection con;
con = funcoes.conecta(banco);
ResultSet rs = funcoes.rsf(seletor,banco);
rs.next();
JRResultSetDataSource rrs = new JRResultSetDataSource(rs);
HashMap parameters = new HashMap();
URL arq = getClass().getResource(relatorio);
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(arq);
JasperPrint jp = JasperFillManager.fillReport(jasperReport, parameters, rrs);
JasperViewer jrv = new JasperViewer(jp);
jrv.setVisible(true);

}[/code]

Mais uma informação, se retiro o uso do resultset e faço o link pela conexao ele imprime o relatorio todo, sem falha. apenas que não quero todo, quero pagina por pagina e por isto
estou selecionado pelo cnpj para imprimir cada empresa de uma vez quando for necessario.

Alguem por favor me ajude !

cara não conheço nada de IReport mas será que a implementação do JRResultSetDataSource não da um rs.next() ?

pq se dá ele vai apontar para o vazio ( levando em consideração que o seu select retorne somente 1 linha.

abraço!

Tentei, mas o que acenteceu segue abaixo

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
log4j:WARN Please initialize the log4j system properly.
24/05/2011 16:40:36 ta01.clientes1 jButton4ActionPerformed
GRAVE: null
net.sf.jasperreports.engine.JRException: Unknown column name : cadastroempresa_razaosocial
at net.sf.jasperreports.engine.JRResultSetDataSource.getColumnIndex(JRResultSetDataSource.java:355)
at net.sf.jasperreports.engine.JRResultSetDataSource.getFieldValue(JRResultSetDataSource.java:112)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:821)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:785)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1482)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
at ta01.clientes1.gRelatorio(clientes1.java:1364)
at ta01.clientes1.jButton4ActionPerformed(clientes1.java:1240)
at ta01.clientes1.access$2100(clientes1.java:39)
at ta01.clientes1$21.actionPerformed(clientes1.java:428)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Mais uma informação, se faço isto

JRResultSetDataSource rrs = new JRResultSetDataSource(rs); rrs.next();

o resultado é um msgbox informando que o relatorio não contem paginas e sem seguida o aparecida de um jasperviewe vazio sem mensagens de erro.

Acho que o que o kritiuns falou está certo, eu nunca coloquei aquele “next” antes de chamar o relatório.

Inclusive creio que esse erro que deu (Unknown column name : cadastroempresa_razaosocial) é justamente pq ele encontrou registros e tentou imprimir, mas não encontrou o campo “cadastroempresa_razaosocial”. Provavelmente esse campo existe no fields do seu relatório mas não tá indo no DataSource (pelo menos não com esse nome!)

Tenta debugar, ali, logo depois que cria seu rrs pra ver o que tem dentro dele. Eu to achando que os dados estão sim dentro do datasource, mas sem os nomes das colunas, ai não dá certo qdo chega no relatório pq ele não encontra os campos. Dá uma olhada se não é isso.

Eu raramente uso passando o datasource, quase sempre passo a instrução SQL. Só em alguns casos. E nesses, eu uso de forma diferente do que vc fez, então não tenho problema com o nome da coluna. No meu caso, só uso passar por datasource qdo são poucos registros então dá pra fazer o que eu costumo fazer. Veja um ex, quem sabe resolve no seu caso:

HashMap[] aLinhas = new HashMap[10]; // crio um HashMap[] do tamanho que vou precisar (pego o tamanho do meu ResultSet que já tenho pronto)

Então faço um loop num objeto semelhante a um ResultSet que tenho, e pra cada registro, eu monto um outro HashMap, com os campos de cada linha, como o trecho abaixo:

[code]// isso aqui dentro do loop
HashMap<Object,Object> hm = new HashMap<Object,Object>();

hm.put(“codigo”, pego o campo de codigo do meu ResultSet);
hm.put(“descricao”, pego o campo de descrição do meu ResultSet);

aLinhas[contador] = hm;[/code]

Depois, pra mandar pro Jasper, faço assim:

JRMapArrayDataSource ds = new JRMapArrayDataSource(aLinhas); JRDataSource dados = (JRDataSource)ds;

Tá vendo que eu especifico o nome das colunas qdo estou criando? Então Não tenho o problema de não encontrar determinado field.

Bom, dá uma olhada se não é isso.
Espero ter ajudado.

Vou tentar fazer do teu jeito. Parece realmente mais facil do que o meu. Mas…
Coloquei em certa altura dos acontecimentos um JOptionPane para me mostrar um dado qualquer, no caso a razao social mesmo, usando o campo como esta “razaosocial” e ele me mostrou o conteudo direitinho.
Este JOption foi colocado antes de jogar o resultset no JRResultSetDataSource, mostrando assim que pelo menos no resultset o nome do campo esta correto e chamando o conteudo correto.
Vou tentar agora e depois posto o resultado, mas desde já agradeço a atenção e a ajuda.
Valeu Mesmo.

RenataFA você é um genio. Fliquei felicissssiiiiiimo ao descobrir que funciona !
Mas também fiquei tristissimo ao descobrir que não sei nada mesmo de Java ! rsrsrsrs

Falando serio, deu certo e é realmente um jeito muito mais facil de fazer.

Obrigado pela ajuda. :smiley:

Que bom que deu certo! Parabéns! :wink: