【问题标题】:List reports along with their description列出报告及其描述
【发布时间】:2011-04-10 07:54:00
【问题描述】:

获取报告名称列表的多种方法: 查询

SELECT [Name] FROM MsysObjects
    WHERE ([Type] = -32764)

或 VBA

Dim rpt As AccessObject
Dim dB As Object

On Error GoTo Error_Handler

Set dB = Application.CurrentProject
For Each rpt In dB.AllReports

   Debug.Print rpt.Name
Next rpt

报告可以在属性下有描述(右键单击报告对象),但我无法使用代码访问。

我想让一个列表框显示与实际报告名称相关联的用户友好的报告名称。在这一点上,我试图避免创建一个单独的表来管理它。

【问题讨论】:

    标签: ms-access ms-access-2007 vba


    【解决方案1】:

    CurrentProject 是一个 ADO 对象,我不知道如何从 ADO 做你想要的。您可以使用 DAO 来检索 Description 属性。

    ? CurrentDb.Containers("Reports").Documents("rptFoo").Properties("Description")
    Foo Report
    

    由于 描述 是用户定义的属性,因此在您为其分配值之前它不存在。因此,下一行触发 rptLinks 的错误 3270(找不到属性),因为它没有分配 描述

    ? CurrentDb.Containers("Reports").Documents("rptLinks").Properties("Description")
    

    您可以捕获该错误。或者看看你是否可以使用 Allen Browne 的HasProperty function

    一种完全不同的方法是创建带有report_name 和friendly_name 字段的tblReports。您必须维护该表,但工作量应该大致相当于维护报表对象的描述属性。然后,您可以在表上使用一个简单的 SELECT 作为列表框的 RowSource。

    更新:您还可以使用自定义函数从 MSysObjects 中选择以返回每个报告的描述。

    Public Function ReportDescription(ByVal pName As String) As String
        Dim strReturn As String
        Dim strMsg As String
    
    On Error GoTo ErrorHandler
    
        strReturn = _
            CurrentDb.Containers("Reports").Documents(pName).Properties("Description")
    
    ExitHere:
        On Error GoTo 0
        ReportDescription = strReturn
        Exit Function
    
    ErrorHandler:
        Select Case Err.Number
        Case 3270 'Property not found.'
            'strReturn = "(no Description)"'
            '* no Description -> just echo report name *'
            strReturn = pName
        Case Else
            strMsg = "Error " & Err.Number & " (" & Err.description _
                & ") in procedure ReportDescription"
            MsgBox strMsg
            strReturn = vbNullString
        End Select
        GoTo ExitHere
    End Function
    

    修改您的原始查询以使用该函数。

    SELECT
        [Name] AS report_name,
        ReportDescription([Name]) AS friendly_name
    FROM MsysObjects
    WHERE ([Type] = -32764);
    

    【讨论】:

    • 从长远来看,我可能会维护一个报告表,但现在大约有 3 个报告,所以除非这个应用程序增长,否则我会推迟。
    • 带有描述函数的select语句使得它更容易用作控制源。
    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 2011-11-10
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多