【问题标题】:List all database fields in use within my Crystal Reports programmatically以编程方式列出我的 Crystal Reports 中使用的所有数据库字段
【发布时间】:2015-05-13 13:23:29
【问题描述】:

如果我手动打开 Crystal Report (v. XI),我可以在字段资源管理器中看到正在使用的数据库字段(它们已被选中)。我怎样才能以编程方式找到它?我尝试使用 API 在 Table 对象中找到的字段(参见下面的代码)循环,但随后我得到了相关表中的 all 数据库字段的列表,即使它们没有在其中使用我的报告!

For Each t As Table In rptDoc.Database.Tables
            For Each fld As DatabaseFieldDefinition In t.Fields
                debug.print(fld.name)
            Next
        Next

我也尝试了以下代码,但仍然没有得到我期望看到的所有字段:

For Each RO As ReportObject In rptDoc.ReportDefinition.ReportObjects
        If RO.Kind = ReportObjectKind.FieldObject Then
            fo = DirectCast(RO, FieldObject)
            Debug.Print(fo.DataSource.Name.ToString)
        End If
    Next

求助!!!

【问题讨论】:

  • 我决定使用 DataDefinition 和 ReportDefinition 类搜索 Crystal Report,并扫描每个公式、总计、组等,并使用这些对象检查每个文本公式,以剖析哪些数据库字段被利用(非常乏味)。但是,我似乎找不到在 CrossTab 对象或 Suppress Formulas 中使用的数据库字段,例如线条和框。非常令人沮丧!为什么 Crystal 不能让“UseCount”正常工作!!!

标签: database sdk crystal-reports crystal-reports-xi


【解决方案1】:

你快到了:)

使用UseCount 属性表示该字段在报告中使用的次数。

For Each t As Table In rptDoc.Database.Tables
    For Each fld As DatabaseFieldDefinition In t.Fields
        If fld.UseCount > 0 Then
            Debug.Print(fld.Name)
        End If
    Next
Next

For Each RO As ReportObject In rptDoc.ReportDefinition.ReportObjects
    If RO.Kind = ReportObjectKind.FieldObject Then
        Dim fo As FieldObject = DirectCast(RO, FieldObject)

        If fo.DataSource.UseCount > 0 Then
            Debug.Print(fo.DataSource.Name.ToString)
        End If
    End If
Next

【讨论】:

  • 不错的尝试,但 UseCount 已过时。它甚至不起作用(即使报告中未使用该字段,我也会得到 UseCount = 1)
  • 很抱歉你是absolutely right。尽管如此,它在某些版本中确实有效。我在CR Runtime 13.0.9试了一下,没问题。
  • 感谢@David,UseCount 非常适合我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多