是否有办法更改报表的数据源位置及其所有子报表,而无需手动打开每个报表?
答案 0 :(得分:6)
以下是我在运行时设置连接的方法。我从配置位置获取连接信息。
#'SET REPORT CONNECTION INFO
For i = 0 To rsource.ReportDocument.DataSourceConnections.Count - 1
rsource.ReportDocument.DataSourceConnections(i).SetConnection(crystalServer, crystalDB, crystalUser, crystalPassword)
Next
For i = 0 To rsource.ReportDocument.Subreports.Count - 1
For x = 0 To rsource.ReportDocument.Subreports(i).DataSourceConnections.Count - 1
rsource.ReportDocument.OpenSubreport(rsource.ReportDocument.Subreports(i).Name).DataSourceConnections(x).SetConnection(crystalServer, crystalDB, crystalUser, crystalPassword)
Next
Next
答案 1 :(得分:2)
如果你只是一次性做这件事,我的建议可能无济于事。但是,如果您经常更改数据源,它可能会有用。
免责声明:我从9.0版开始就没有使用Crystal,所以我不知道他们是否已经改进了。我总是使用UDL files。基本上,它是指向数据源的指针。将报表设置为指向UDL,UDL指向数据源。如果源更改,只需更新UDL。
如果您有多个报告,这非常有用。您只需在服务器更改时更新一个文件。
答案 2 :(得分:1)
链接的子报告(至少在CR XI中)共享主报告的数据源 - 可能是您的报告已经配置,因此不适合您?
答案 3 :(得分:1)
@Unsliced我认为他遇到的问题是当你拿一个针对另一个数据库开发的水晶报告,并且你在Crystal Reports XI中提出它时,你必须为每个字段做一个更改数据源,包括那些子报表。如果您只是更改报告顶层的源,则通常会出错。 (我认为这是Crystal Reports中的一个已知问题)。
答案 4 :(得分:-1)
我猜你在谈论Reporting Services中的.rdl文件? (如果没有,我的回答可能是错的)
它们基本上只是XML,因此您可以加载它们中的每一个并执行XPath查询以获取包含数据源的节点并更新它。