Controlar o SQL da tabela do Ireport

3 respostas
ireportprogramação
Matheus_Bigai_Ferrei

Olá a todos,
Então, estou com uma dúvida e gostaria de saber se vocês podem me ajudar.
No meu sistema, estou usando o Ireport como gerador de relatórios, e já fui bem longe com ele. Quase toda a estrutura das minhas telas estão prontas e funcionando na parte de geração de relatório. Infelizmente não consegui resolver um dos casos, que é o seguinte:
Preciso gerar um relatório de Honorário para um cliente, e como eu fiz, seria necessário controlar a Query da tabela que eu inseri, ou seja, alterar dinamicamente o SQL dela, de preferencia que eu consiga fazer isso pelo Netbens, como faço normalmente quando o relatório não possui tabelas, só assim conseguiria gerar os filtros que preciso.
Será que existe como fazer isso?

3 Respostas

Cleiton_Conceicao

É possível vc enviar uma query completa por parâmetro no ireport.
Na sua aplicação você monta a query da forma dinâmica e envia essa mesma query via parâmetro por ireport.

Matheus_Bigai_Ferrei

Então Cleiton, eu até tentei criar um parâmetro na tabela ela se chamava SQL e era do tipo String, e ela correspondia a outro de nome SQL_TABELA que iniciava diretamente no meu relatório, mas quando eu tentava dar um Preview e inseria o SQL ele dava erro. Pensei que por eu ter deixado a query passando só um parâmetro fosse o problema.
Mas, mesmo com o erro, vou tentar construir ele e executar no meu sistema para ver o que acontece. Qualquer coisa volto aqui.

Matheus_Bigai_Ferrei

Finalmente voltei, e infelizmente essa ideia não deu certo.
Me retornou vários erros, como foi no iReport. Não sei se isso vai ajudar, mas segue eles abaixo:

mai 13, 2020 4:00:45 PM net.sf.jasperreports.engine.fill.JRFillSubreport prepare

GRAVE: Fill 1: exception

net.sf.jasperreports.engine.JRException: Error executing SQL statement for: RelatorioProcesso1_Honorarios_1593633388473_882318.

at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:267)

at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1129)

at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:696)

at net.sf.jasperreports.engine.fill.BaseReportFiller.setParameters(BaseReportFiller.java:434)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:519)

at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:393)

at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:728)

at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:58)

at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:216)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '‘SELECT U.<em>, SUM(U.HONORARIO_VALOR), C.</em>, A.CLIENTE_RAZAOSOCIAL, A.CLIENTE_CPF_C at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.Util.getInstance(Util.java:386)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)

at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:257)

 11 more
Exception in thread AWT-EventQueue-0 net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error executing SQL statement for: RelatorioProcesso1_Honorarios_1593633388473_882318.

at net.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:872)

at net.sf.jasperreports.components.table.fill.FillTableSubreport.prepareSubreport(FillTableSubreport.java:166)

at net.sf.jasperreports.components.table.fill.FillTable.prepare(FillTable.java:417)

at net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:150)

at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:330)

at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:382)

at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:357)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBandNoOverflow(JRVerticalFiller.java:435)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageHeader(JRVerticalFiller.java:395)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:256)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:122)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:551)

at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:411)

at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:122)

at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:667)

at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:648)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:970)

at relatorio.RelatorioProcessoHonorario.acionaRelatorioCliente(RelatorioProcessoHonorario.java:104)

at view.impressao.ViewImpressaoHonorario.jButtonImprimirActionPerformed(ViewImpressaoHonorario.java:293)

at view.impressao.ViewImpressaoHonorario.access$600(ViewImpressaoHonorario.java:28)

at view.impressao.ViewImpressaoHonorario$6.actionPerformed(ViewImpressaoHonorario.java:184)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)

at java.awt.Component.processMouseEvent(Component.java:6539)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6304)

at java.awt.Container.processEvent(Container.java:2239)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2297)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)

at java.awt.Container.dispatchEventImpl(Container.java:2283)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)

at java.awt.EventQueue$4.run(EventQueue.java:733)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Caused by: net.sf.jasperreports.engine.JRException: Error executing SQL statement for: RelatorioProcesso1_Honorarios_1593633388473_882318.

at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:267)

at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1129)

at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:696)

at net.sf.jasperreports.engine.fill.BaseReportFiller.setParameters(BaseReportFiller.java:434)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:519)

at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:393)

at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:728)

at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:58)

at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:216)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '‘SELECT U.<em>, SUM(U.HONORARIO_VALOR), C.</em>, A.CLIENTE_RAZAOSOCIAL, A.CLIENTE_CPF_C at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.Util.getInstance(Util.java:386)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)

at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:257)

 11 more

Acho que esse problema precisa de alguma outra solução.

Criado 12 de maio de 2020
Ultima resposta 13 de mai. de 2020
Respostas 3
Participantes 2