【发布时间】:2008-09-02 20:29:40
【问题描述】:
是否有任何方法可以更改报表及其所有子报表的数据源位置,而无需手动打开每个子报表?
【问题讨论】:
标签: crystal-reports
是否有任何方法可以更改报表及其所有子报表的数据源位置,而无需手动打开每个子报表?
【问题讨论】:
标签: crystal-reports
这是我在运行时设置连接的方式。我从配置位置获取连接信息。
#'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
【讨论】:
如果您只是将其作为一次性交易,我的建议可能无济于事。但是,如果您经常更改数据源,它可能会很有用。
免责声明:我从 9.0 版开始就没有与 Crystal 合作过,所以我不知道他们是否对此进行了改进。我一直使用UDL files。基本上,它是指向数据源的指针。将报表设置为指向 UDL,并且 UDL 指向数据源。如果源发生变化,只需更新 UDL。
如果您有多个报告,这将非常有用。当服务器发生变化时,您只需更新一个文件。
【讨论】:
链接的子报表(至少在 CR XI 中)共享主报表的数据源 - 大概您的报表已经配置,所以这不是您的选择?
【讨论】:
@Unsliced 我认为他遇到的问题是,当您使用某人针对另一个数据库开发的水晶报表并在 Crystal Reports XI 中提出它时,您必须为每个字段执行更改数据源,包括子报表。如果您只是在报告的顶层更改源,它通常会出错。 (我认为这是 Crystal Reports 中的一个已知问题)。
【讨论】:
我猜您说的是 Reporting Services 中的 .rdl 文件? (如果不是,我的答案可能是错误的)
它们基本上只是 XML,因此您可以加载它们中的每一个并执行 XPath 查询以获取包含数据源的节点并对其进行更新。
【讨论】: