Skip to Content
0
Former Member
Apr 23, 2012 at 09:05 PM

Error generating report with linked subreport and multiple link values

129 Views

If I try to view a report that contains a subreport linked on a key field and the main report's resultset contains more than one distinct key value, Crystal throws an "Unexpected database connector error" exception (class ReportSDKException). When I restrict the main resultset to just one key value everything is fine. The root cause of the error seems to be a SQLException: "JZ0R0: ResultSet has already been closed." I don't see how that could be the case, though, so perhaps that's a red herring.

The attached file has the source of a test class that demonstrates the error. It's based on the "Java Reporting Component - ResultSet Datasource" sample, with the addition of a few lines to push a resultset into the sample subreport. Note that I tried the test code against both Sybase SQL Anywhere 11 and Oracle 11g with essentially the same results. The exception is a NullPointerException for Oracle, but the behavior is the same -- fine with one key value in the main resultset, error with multiple keys.

Here is the full output from the test code:

run:

2012-04-23 16:03:12,202 WARN [common:?] CRConfig.xml not found

2012-04-23 16:03:12,202 WARN [common:?] No keycodes found

Crystal Reports Viewer 12.0.0.0

java.vendor = Sun Microsystems Inc.

java.version = 1.6.0_25

os.name = Windows 7

os.version = 6.1

os.arch = x86

2012-04-23 16:03:15,696 ERROR [JRCCommunicationAdapter:?] detected an exception: Unexpected database connector error

at com.crystaldecisions.reports.datafoundation.DFQuery.for(Unknown Source)

at com.crystaldecisions.reports.datalayer.a.do(Unknown Source)

at com.crystaldecisions.reports.datalayer.a.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.m.b(Unknown Source)

at com.crystaldecisions.reports.dataengine.j.b(Unknown Source)

at com.crystaldecisions.reports.dataengine.m.o(Unknown Source)

at com.crystaldecisions.reports.dataengine.m.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.ContextNode.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.ContextNode.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.j.case(Unknown Source)

at com.crystaldecisions.reports.dataengine.h.<init>(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataContext.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.new(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.try(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.int(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.I(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.if(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.u.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.u.e(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.u.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.aa.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.v.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.v.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ColumnFormatter.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.aa.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ah.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ReportColumnFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.SinglePageFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ColumnFormatter.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.SinglePageFormatter.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.aa.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.PageFormatter.do(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.PageFormatter.formatPage(Unknown Source)

at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.byte(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.do(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.if(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.a(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.a(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.call(Unknown Source)

at com.crystaldecisions.reports.common.ThreadGuard.syncExecute(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.for(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.int(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.request(Unknown Source)

at com.businessobjects.sdk.erom.jrc.a.a(Unknown Source)

at com.businessobjects.sdk.erom.jrc.a.execute(Unknown Source)

at com.crystaldecisions.proxy.remoteagent.RemoteAgent$a.execute(Unknown Source)

at com.crystaldecisions.proxy.remoteagent.CommunicationChannel.a(Unknown Source)

at com.crystaldecisions.proxy.remoteagent.RemoteAgent.a(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.ds.a(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.ReportSource.a(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.ReportSource.getPage(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.AdvancedReportSource.getPage(Unknown Source)

at com.crystaldecisions.reports.reportengineinterface.JPEReportSource.getPage(Unknown Source)

at com.businessobjects.crystalreports.viewer.core.rs.RSRecordSource.openInputStream(Unknown Source)

at com.businessobjects.crystalreports.viewer.core.TSLVReader.a(Unknown Source)

at com.businessobjects.crystalreports.viewer.core.TSLVReader.run(Unknown Source)

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

Unexpected database connector error

And for fun, here's the SQLException I dug out with different test code:

Cause: JZ0R0: ResultSet has already been closed.

java.sql.SQLException: JZ0R0: ResultSet has already been closed.

at com.sybase.jdbc3.jdbc.ErrorMessage.raiseError(Unknown Source)

at com.sybase.jdbc3.jdbc.SybResultSet.checkResultSet(Unknown Source)

at com.sybase.jdbc3.jdbc.SybResultSet.getMetaData(Unknown Source)

at com.crystaldecisions.reports.common.data.JdbcCrystalResultSet.getMetaData(Unknown Source)

at com.businessobjects.reports.jdbinterface.common.ResultSetReader.bindToField(Unknown Source)

at com.crystaldecisions.reports.queryengine.ResultSetRecordReader.a(Unknown Source)

at com.crystaldecisions.reports.queryengine.Rowset.a(Unknown Source)

at com.crystaldecisions.reports.queryengine.Rowset.z9(Unknown Source)

at com.crystaldecisions.reports.queryengine.Rowset.Aa(Unknown Source)

at com.crystaldecisions.reports.queryengine.Rowset.z3(Unknown Source)

at com.crystaldecisions.reports.queryengine.Rowset.bL(Unknown Source)

at com.crystaldecisions.reports.queryengine.Rowset.zM(Unknown Source)

at com.crystaldecisions.reports.queryengine.RowsetBase.zA(Unknown Source)

at com.crystaldecisions.reports.queryengine.QueryInfo.vE(Unknown Source)

at com.crystaldecisions.reports.datafoundation.DFQuery.for(Unknown Source)

at com.crystaldecisions.reports.datalayer.a.do(Unknown Source)

at com.crystaldecisions.reports.datalayer.a.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.m.b(Unknown Source)

at com.crystaldecisions.reports.dataengine.j.b(Unknown Source)

at com.crystaldecisions.reports.dataengine.m.o(Unknown Source)

at com.crystaldecisions.reports.dataengine.m.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.ContextNode.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.ContextNode.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.j.case(Unknown Source)

at com.crystaldecisions.reports.dataengine.h.<init>(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataContext.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.a(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.new(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.try(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.int(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.I(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.if(Unknown Source)

at com.crystaldecisions.reports.dataengine.DataProcessor2.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.u.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.u.e(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.f.e(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.u.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.aa.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ObjectFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.v.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.v.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ColumnFormatter.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.aa.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ah.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ReportColumnFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.SinglePageFormatter.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ai.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.ColumnFormatter.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.SinglePageFormatter.for(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.objectformatter.aa.a(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.PageFormatter.do(Unknown Source)

at com.crystaldecisions.reports.formatter.formatter.paginator.PageFormatter.formatPage(Unknown Source)

at com.crystaldecisions.reports.formatter.export2.a.a(Unknown Source)

at com.crystaldecisions.reports.formatter.export2.a.a(Unknown Source)

at com.crystaldecisions.reports.formatter.export2.ExportSupervisorEx.if(Unknown Source)

at com.crystaldecisions.reports.formatter.export2.ExportSupervisorEx.a(Unknown Source)

at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.a(Unknown Source)

at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.int(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.do(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.if(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.a(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.a(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.call(Unknown Source)

at com.crystaldecisions.reports.common.ThreadGuard.syncExecute(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.for(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.int(Unknown Source)

at com.businessobjects.reports.sdk.JRCCommunicationAdapter.request(Unknown Source)

at com.businessobjects.sdk.erom.jrc.a.a(Unknown Source)

at com.businessobjects.sdk.erom.jrc.a.execute(Unknown Source)

at com.crystaldecisions.proxy.remoteagent.RemoteAgent$a.execute(Unknown Source)

at com.crystaldecisions.proxy.remoteagent.CommunicationChannel.a(Unknown Source)

at com.crystaldecisions.proxy.remoteagent.RemoteAgent.a(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.ds.a(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.ReportSource.a(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.ReportSource.a(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.if(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(Unknown Source)

at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(Unknown Source)

at com.cbord.pcs.prototypes.crystaljrctest.Main.run(Main.java:143)

at com.cbord.pcs.prototypes.crystaljrctest.Main.main(Main.java:60)

Attachments