【问题标题】:Replace a database connection for report and all subreports替换报表和所有子报表的数据库连接
【发布时间】:2008-09-02 20:29:40
【问题描述】:

是否有任何方法可以更改报表及其所有子报表的数据源位置,而无需手动打开每个子报表?

【问题讨论】:

    标签: crystal-reports


    【解决方案1】:

    这是我在运行时设置连接的方式。我从配置位置获取连接信息。

            #'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
    

    【讨论】:

    • 我发现这对于在运行时设置连接最有帮助。
    【解决方案2】:

    如果您只是将其作为一次性交易,我的建议可能无济于事。但是,如果您经常更改数据源,它可能会很有用。

    免责声明:我从 9.0 版开始就没有与 Crystal 合作过,所以我不知道他们是否对此进行了改进。我一直使用UDL files。基本上,它是指向数据源的指针。将报表设置为指向 UDL,并且 UDL 指向数据源。如果源发生变化,只需更新 UDL。

    如果您有多个报告,这将非常有用。当服务器发生变化时,您只需更新一个文件。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        @Unsliced 我认为他遇到的问题是,当您使用某人针对另一个数据库开发的水晶报表并在 Crystal Reports XI 中提出它时,您必须为每个字段执行更改数据源,包括子报表。如果您只是在报告的顶层更改源,它通常会出错。 (我认为这是 Crystal Reports 中的一个已知问题)。

        【讨论】:

          【解决方案5】:

          我猜您说的是 Reporting Services 中的 .rdl 文件? (如果不是,我的答案可能是错误的)

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多