【问题标题】:How do I programmatically retrieve the values from a linked table's property sheet?如何以编程方式从链接表的属性表中检索值?
【发布时间】:2015-12-15 05:30:41
【问题描述】:

我在 MS Access 工作。所有表和视图都链接到 SQL Server 数据库。我想编写一个程序来检索和存储有关这些对象的所有格式信息。很多此类信息都可以从属性表中获得(我在设计视图中打开一个表,然后按 F4 以获取属性表)。例如:

  • 过滤器
  • 订购人
  • 加载过滤器
  • 按负载排序
  • 按 On 订购

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

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

【问题讨论】:

    标签: ms-access vba ms-access-2010


    【解决方案1】:

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

    但请注意,Filter 和 OrderBy 都是用户创建的,而不是默认属性,这意味着它们不包含在 Properties 集合中,除非您已分配他们的价值观。尝试检索一个不存在的会触发错误 3270,“找不到属性”。您可以捕获该错误,根据需要对其进行响应,然后继续处理您感兴趣的其他属性。或者您可以首先确定该属性是否存在,并且仅在它存在时才尝试检索其值。

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

        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
    

    【讨论】:

    • 这正是我需要的,谢谢!我只是试图找到一个资源来确定哪些属性是用户创建的还是默认的,我没有看到任何明显的东西。有没有简单的方法来确定这一点?
    • 在保存任何自定义并打印属性名称之前,您可以在链接的TableDef 上循环遍历整个Properties 集合。这些应该是默认属性。任何其他都应该是用户创建的属性。抱歉,我希望这不是你的意思……但这是我能提供的最好的。 ;-)
    【解决方案2】:

    这样的事情怎么样? (我已将“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
    

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2018-03-14
      • 2013-01-18
      • 2011-06-23
      相关资源
      最近更新 更多