iReport подотчеты - PullRequest
       19

iReport подотчеты

2 голосов
/ 30 ноября 2011

Я не уверен, в какую нить это вставить, пожалуйста, направьте меня к правильному, если этот не тот.

Я борюсь с подотчетом в 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 дня.

1 Ответ

1 голос
/ 12 марта 2012

Глядя на исключение, он пытается использовать драйвер MSSQL Server jdbc. Вы уверены, что сначала зарегистрировали драйвер MySQL JDBC. Может быть, когда ваше приложение запускается или перед выполнением попробуйте запустить:

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

Кроме этого, вы можете создать соединения в своем приложении перед вызовом отчета и передать их в качестве параметра, который вы могли бы использовать один для основного отчета, а второй мог бы быть передан в ваш подотчет. *

...