5

我一直在到处寻找一种通过 SELECT 查询访问表描述的方法(与右键单击表>表属性时出现的描述相同)。

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

是否可以通过查询来做到这一点,还是需要 VBA?

4

3 回答 3

4

正如 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

OnError Resume Next是必需的,因为在对象具有描述之前,该属性为空。

于 2012-05-15T22:49:22.797 回答
3

您可以从表架构或 TableDef 属性中获取描述,但我认为标准查询不会起作用。

Set rs = CurrentProject.Connection.OpenSchema(adSchemaTables, _
     Array(Empty, Empty, "Rules", Empty))
Debug.Print rs!Description
于 2012-05-15T20:42:02.487 回答
0

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

SELECT MSysObjects.Name, GetQueryDescr([Name]) AS Properties, MSysObjects.DateCreate, MSysObjects.DateUpdate FROM MSysObjects WHERE (((MSysObjects.Name) Not Like "~sq_*") AND ((MSysObjects.Type)=5)) ;

类型 5 用于查询

于 2014-01-23T02:44:40.143 回答