替换报表和所有子报表的数据库连接

时间:2020-03-05 18:46:43  来源:igfitidea点击:

有什么方法可以更改报表及其所有子报表的数据源位置,而不必手动打开每个报表?

解决方案

回答

我猜我们是在谈论Reporting Services的.rdl文件吗? (如果没有,我的答案可能是错误的)

它们基本上只是XML,因此我们可以将它们中的每一个都装入其中,并执行XPath查询以获取包含数据源的节点并对其进行更新。

回答

链接的子报表(至少在CR XI中)共享主报表的数据源,大概是报表已经配置好了,所以这不是选择吗?

回答

@Unsliced我认为他要解决的问题是,当我们获取某人针对另一个数据库开发的Crystal报表,并在Crystal Reports XI中提出该报表时,我们必须为每个字段(包括子报表中的字段)创建一个Change Datasource。如果仅在报告的顶层更改源,则它经常会出错。 (我认为这是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文件。基本上,它是指向数据源的指针。设置报告以指向UDL,并且UDL指向数据源。如果源发生更改,只需更新UDL。

如果我们有多个报告,这将非常有用。服务器更改时,我们只需要更新一个文件。