2011-11-30 120 views
2

我不知道是什么线程把这个,请指示我到正确的一个,如果这一个不是它。iReport子报告

我在iReport的分报告中挣扎。

我有一个报告,从MSSQL数据库中进行选择,并使用子报告从MySQL数据库中进行选择。我已经成功地做到了这一点(从MySQL报告选择,从MSSQL中选择子报告),但这样做的方式让我难住。

这就是我目前的做法: 主要报告(只是子报告标签,让我知道是否需要发布有关主报告的更多信息,我替换了一些变量,我的工作需要我于):

<subreport> 
    <reportElement x="360" y="0" width="100" height="20"/> 
    <subreportParameter name="ID"> 
     <subreportParameterExpression><![CDATA[$F{pkiCandidateID}]]></subreportParameterExpression> 
    </subreportParameter> 
    <connectionExpression><![CDATA[java.sql.DriverManager.getConnection("jdbc:mysql://<ip address>:3306/<db name>","<username>","<password>")]]></connectionExpression> 
    <subreportExpression class="java.lang.String"><![CDATA["repo:/Enterprise/jrxml/Candidates/report1_subreport1.jrxml"]]></subreportExpression> 
</subreport> 

错误我收到:

Error filling print...  
Error executing SQL statement for : report1_subreport1 
net.sf.jasperreports.engine.JRException:  
Error executing SQL statement for : report1_subreport1 
    at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:143) 
    at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:684) 
    at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:605) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:901) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845) 
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) 
    at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:877) 
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) 
    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) 
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'tCandidate'. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:281) 
    at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:137) 
    ... 11 more 
Print not filled. Try to use an EmptyDataSource... 

请让我知道如果我需要提供更多的信息,请和,如果你知道我做错了什么,帮助我出去了。这已经让我耽搁了2天。

+0

请发表子报表的代码段 –

回答

1

看着它试图使用MSSQL服务器jdbc驱动程序的异常。您确定您首先注册了MySQL JDBC驱动程序吗?也许当你的应用程序启动,或执行试运行前:

Class.forName("com.mysql.jdbc.Driver"); 

除此之外,你可以调用报告之前在你的应用程序的连接,并通过他们作为一个参数,你可以使用一个主报告和第二份报告可以通过您的子报告。