我正在尝试使用Excel VBA从Access 2007 ACCDB格式数据库中获取所有表的列表。

我已经关注了这篇文章:

How can I get table names from an MS Access Database?

使用:

SELECT MSysObjects.Name AS table_name
FROM MSysObjects
WHERE
        (((Left([Name],1))<>"~")
    AND ((Left([Name],4))<>"MSys")
    AND ((MSysObjects.Type) In (1,4,6)))
order by MSysObjects.Name

但我收到此错误。



我希望能够仅使用SQL语句而不是OpenSchema方法来获取表名。

我认为问题出在Access上。我不确定。

有人有什么主意吗?

最佳答案

由于您的数据库是ACCDB格式,因此您将以Admin用户身份工作。您可以在立即窗口中确认该点。 (使用Ctrl + g转到那里)

? CurrentUser()
Admin

由于Admin没有对SELECT的读取(MSysObjects)权限,请执行DDL语句以向Admin授予该权限。

strDdl = "GRANT SELECT ON MSysObjects TO Admin;"
CurrentProject.Connection.Execute strDdl

10-07 17:14