首页 文章

MS ACCESS通过查询检索“表描述”

提问于
浏览
4

我一直在寻找一种方法来访问表的描述(当你右键单击表>表属性时出现的那个)通过SELECT查询 .

我尝试使用MSysObjects,但我只能使用它来检索表的名称 .

是否可以通过查询执行此操作或需要VBA?

4 回答

  • 4

    使用上面的GetQueryDescr(),您可以对隐藏的sys表运行此查询

    SELECT MSysObjects.Name,GetQueryDescr([Name])AS Properties,MSysObjects.DateCreate,MSysObjects.DateUpdate FROM MSysObjects WHERE(((MSysObjects.Name)不喜欢“~sq_ *”)AND((MSysObjects.Type)= 5)) ;

    类型5用于查询

  • 2

    您可以从表模式或TableDef属性中获取描述,但我认为标准查询不起作用 .

    Set rs = CurrentProject.Connection.OpenSchema(adSchemaTables, _
         Array(Empty, Empty, "Rules", Empty))
    Debug.Print rs!Description
    
  • 0

    正如Remou所说,你不能从查询中获取它(但你可以包含一个在查询中返回它的函数) . 这是另一个功能:

    Public Function GetTableDescr(stTableName As String) As String
    On Error Resume Next
    GetTableDescr = CurrentDb.TableDefs(stTableName).Properties("Description").Value
    End Function
    

    这是一个返回所有非系统表及其日期和描述的查询(使用上面的函数):

    SELECT MSysObjects.Name, msysobjects.datecreate, msysobjects.dateupdate, GetTableDescr([Name]) AS Description
    FROM MSysObjects
    WHERE (((MSysObjects.Name) Not Like "~*") AND((MSysObjects.Name) Not Like "MSys*") and ((MSysObjects.Type)=1));
    

    最后,您可以为查询执行几乎相同的功能 . 我发现的技巧是你只返回非继承的描述,否则如果查询没有描述,你会得到被查询对象的描述:

    Public Function GetQueryDescr(stQryName As String) As String
    On Error Resume Next
    If CurrentDb.QueryDefs(stQryName).Properties("Description").Inherited = False Then
        GetQueryDescr = CurrentDb.QueryDefs(stQryName).Properties("Description").Value
    End If
    End Function
    

    On Error Resume Next 是必需的,因为在对象具有描述之前,属性为null .

  • 0

    始终在VBA中重置错误捕获器:

    Public Function DoSomething()
      On Error Resume Next
      **potential error-throwing code**
      On Error Goto 0
    End Function
    

    否则,可能会在代码中的其他位置跳过错误 .

相关问题