请帮忙。我正在开发一个可以打开使用水晶报表 xi 制作的报表的摇摆应用程序。我想做的是打开一个报告并将连接信息传递给该报告,以便我可以动态更改报告的数据库。但由于某种原因,它无法正常工作,并且该报告仍会从最初设置的数据库中生成信息。有人可以告诉我我做错了什么吗?顺便说一句,当我尝试使用 com.crystaldecisions.sdk.occa.report.application.ReportClientDocument 时,我得到一个未找到服务器的错误。但是当我尝试使用 import com.crystaldecisions.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);