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?
Controlar o SQL da tabela do Ireport
3 Respostas
É 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.
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.
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 moreException 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.