如何以编程方式从链接的 table 的 属性 sheet 中检索值?

How do I programmatically retrieve the values from a linked table's property sheet?

我在 MS Access 中工作。所有 table 和视图都链接到 SQL 服务器数据库。我想编写一个程序来检索和存储有关这些对象的所有格式信息。 属性 sheet(我在设计视图中打开 table,然后点击 F4 以获得 属性 sheet)。例如:

如何以编程方式检索这些属性?我只看到它们在报告中列出。

请注意,我需要检索 值,而不仅仅是设置它们。我知道 SetFilter 方法,但这不是我需要的。

链接的 table 作为 DAO.TableDef 存在于数据库的 TableDefs 集合中。因此,您可以检查 TableDef.Properties 集合中的这 5 个属性。

但是请注意 FilterOrderBy 都是用户创建的而不是默认属性,这意味着它们不包含在 Properties 集合,除非你给它们赋值。试图检索一个不存在的触发错误 3270,"Property not found"。您可以捕获该错误,根据需要对其作出响应,然后继续处理您感兴趣的其他属性。或者您可以先确定 属性 是否存在,并且只在它存在时才尝试检索它的值.

此代码示例使用第一种方法(捕获错误):

    Const cstrTable As String = "YourLinkedTableNameHere"
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim strMsg As String
    Dim varProp As Variant
    Dim varProperties As Variant

On Error GoTo ErrorHandler

    varProperties = Array("Filter", "FilterOnLoad", "OrderBy", _
        "OrderByOn", "OrderByOnLoad")

    Set db = CurrentDb
    Set tdf = db.TableDefs(cstrTable)
    For Each varProp In varProperties
        Debug.Print varProp, tdf.Properties(varProp).Value
    Next

ExitHere:
    Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 3270 ' Property not found.
        strMsg = "Property '" & varProp & "' not found."
        'MsgBox strMsg
        Debug.Print strMsg
        Resume Next
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description & ")"
        MsgBox strMsg
        Resume ExitHere
    End Select

这样的事情怎么样? (我定义 "table2" 有两个字段,"PropertyName" 和 "PropertyValue"..."table1" 是任何现有表的占位符)

Dim i As Integer
Dim j As Integer
Dim RS As DAO.Recordset

On Error Resume Next

Set RS = CurrentDb.OpenRecordset("select * from table2")

j = CurrentDb.TableDefs("table1").Properties.Count


For i = 0 To j - 1


RS.AddNew
RS!PropertyName = CurrentDb.TableDefs("table1").Properties(i).Name
RS!PropertyValue = Nz(CurrentDb.TableDefs("table1").Properties(i).Value, "-")
RS.Update

Next i