我正在尝试使用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