如何使用JavaSwing在CrystalReports中运行时切换数据库连接

如何使用JavaSwing在CrystalReports中运行时切换数据库连接,java,swing,crystal-reports,crystal-reports-xi,Java,Swing,Crystal Reports,Crystal Reports Xi,请帮忙。我正在开发一个Swing应用程序,可以打开使用水晶报表席的报告。我试图做的是打开一个报表并将连接信息传递给该报表,以便动态更改报表的数据库。但由于某些原因,它不起作用,报告仍然从最初建立的数据库中生成信息。有人能告诉我我做错了什么吗?顺便说一句,当我尝试使用com.crystaldecisions.sdk.occa.report.application.ReportClientDocument时,我得到一个服务器未找到错误。但是当我尝试使用import com.crystaldescis

请帮忙。我正在开发一个Swing应用程序,可以打开使用水晶报表席的报告。我试图做的是打开一个报表并将连接信息传递给该报表,以便动态更改报表的数据库。但由于某些原因,它不起作用,报告仍然从最初建立的数据库中生成信息。有人能告诉我我做错了什么吗?顺便说一句,当我尝试使用com.crystaldecisions.sdk.occa.report.application.ReportClientDocument时,我得到一个服务器未找到错误。但是当我尝试使用import com.crystaldescisions.reports.sdk.ReportClientDocument时;它不起作用了。我不确定什么是报表服务器,我想我没有在我的计算机上设置它。请帮忙。这是我的密码:

import com.crystaldecisions.sdk.occa.report.application.ReportClientDocument;

ReportClientDocument rpt =  new ReportClientDocument();
    rpt.open(reportPath+fileName, 0);
    Fields fields = null;

    IConnectionInfo connInfo = rpt.getDatabaseController().getConnectionInfos(null).getConnectionInfo(0);

     PropertyBag innerProp = connInfo.getAttributes();
        innerProp.clear();

        PropertyBag propertyBag = new PropertyBag();
        propertyBag.put("Server Type", "JDBC (JNDI)");
        propertyBag.put("Database DLL", "crdb_jdbc.dll");
        propertyBag.put("Database Class Name", "com.mysql.jdbc.Driver");
        propertyBag.put("Use JDBC", "true");
        propertyBag.put("Server Name", DBConnect.getServer());
        propertyBag.put("Generic JDBC Driver Behavior", "No");
        propertyBag.put("URI", "!com.mysql.jdbc.Driver!jdbc:mysql://"+DBConnect.getServer()+":"+DBConnect.getPort()+"/"+DBConnect.getDatabase()+"!ServerType=29!QuoteChar=`");

        connInfo.setAttributes(innerProp);
        connInfo.setPassword(DBConnect.getPassword());
        connInfo.setUserName(DBConnect.getUsername());




    int replaceParams = DBOptions._ignoreCurrentTableQualifiers + DBOptions._doNotVerifyDB;
    rpt.getDatabaseController().replaceConnection(rpt.getDatabaseController().getConnectionInfos(null).getConnectionInfo(0), connInfo, fields, replaceParams);

您没有使用添加到propertyBag的属性。您应该将属性添加到innerProp,用innerProp.put(…)替换propertyBag.put(…),或者将connInfo.setAttributes(innerProp)更改为connInfo.setAttributes(propertyBag)。我建议使用第一种方法。

您没有使用添加到propertyBag的属性。您应该将属性添加到innerProp,用innerProp.put(…)替换propertyBag.put(…),或者将connInfo.setAttributes(innerProp)更改为connInfo.setAttributes(propertyBag)。我建议第一种方法。

Oops。我的错误。但实际上,如果我将此代码与已更正的propertyBag一起使用,我会得到一个serverNotFound错误。有什么帮助吗?也许你的数据库连接有问题。我的数据库连接工作正常。我有其他的课程,这取决于它。这是确切的错误消息:com.crystaldecisions.sdk.occa.report.lib.ReportSDKServerException:未指定服务器。---错误代码:-2147217390错误代码名称:serverNotFound。每当我使用import com.crystaldecisions.sdk.occa.report.application.ReportClientDocument而不是com.crystaldecisions.reports.sdk.ReportClientDocument时,我总是会遇到这个错误。我们的任何计算机上都没有安装crystal reports服务器。我们只有crystal report designer,我们认为这已经足够了,因为在我们的C#和vb代码中,我们能够在几行代码上更改数据库。我的错误。但实际上,如果我将此代码与已更正的propertyBag一起使用,我会得到一个serverNotFound错误。有什么帮助吗?也许你的数据库连接有问题。我的数据库连接工作正常。我有其他的课程,这取决于它。这是确切的错误消息:com.crystaldecisions.sdk.occa.report.lib.ReportSDKServerException:未指定服务器。---错误代码:-2147217390错误代码名称:serverNotFound。每当我使用import com.crystaldecisions.sdk.occa.report.application.ReportClientDocument而不是com.crystaldecisions.reports.sdk.ReportClientDocument时,我总是会遇到这个错误。我们的任何计算机上都没有安装crystal reports服务器。我们只有crystal report designer,我们认为这已经足够了,因为在我们的C#和vb代码中,我们能够在几行代码中更改数据库。