我一直在到处寻找一种通过 SELECT 查询访问表描述的方法(与右键单击表>表属性时出现的描述相同)。
我尝试使用 MSysObjects 但只能使用它检索表的名称。
是否可以通过查询来完成此操作,或者是否需要 VBA?
正如 Remou 所说,您无法从查询中获取它(但您可以在查询中包含一个返回它的函数)。这是另一个函数:
Public Function GetTableDescr(stTableName As String) As String
On Error Resume Next
GetTableDescr = CurrentDb.TableDefs(stTableName).Properties("Description").Value
End Function
Run Code Online (Sandbox Code Playgroud)
这是一个返回所有非系统表及其日期和描述的查询(使用上面的函数):
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));
Run Code Online (Sandbox Code Playgroud)
最后,您可以为查询执行几乎相同的功能。我发现的技巧是,您只返回非继承的描述,否则如果查询没有描述,您将获得查询对象的描述:
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
Run Code Online (Sandbox Code Playgroud)
OnError Resume Next
是必要的,因为在对象有描述之前,属性为 null。