VBG*_*GKM 9 excel ms-access vba ms-access-2007 excel-vba
我正在尝试使用Excel VBA从Access 2007 ACCDB格式数据库中获取所有表的列表.
我关注过这篇文章:
使用:
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
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误.
记录无法读取; 没有"MSysObjects"的读取权限
我希望能够仅使用SQL语句而不是OpenSchema方法来获取表名.
我认为问题出在Access上.我不确定.
有人有任何想法吗?
Han*_*sUp 12
由于您的数据库是ACCDB格式,因此您将以用户Admin身份运行.您可以在立即窗口中确认该点.(去那里Ctrl+ g)
? CurrentUser()
Admin
Run Code Online (Sandbox Code Playgroud)
由于Admin没有read(SELECT)权限MSysObjects,因此请执行DDL语句以向Admin授予权限.
strDdl = "GRANT SELECT ON MSysObjects TO Admin;"
CurrentProject.Connection.Execute strDdl
Run Code Online (Sandbox Code Playgroud)
这对我有用,因为这是为此提出的第一个问题:
这是一个 MDB 文件。不知道其他人的情况。 我明白这不是问题所要求的。然而,StackOverflow 问题/答案也被许多其他通过 google 到达这里的人使用,就像我一样,并且我正在使用 MDB。我希望这个答案对其他人有用。
打开 MS Access GUI。抱歉,不知道如何在没有它的情况下做到这一点,尽管这可能是可能的。
转到工具...选项...
单击“查看”选项卡
选择“隐藏对象”、“系统对象”
关闭选项卡
转到工具...安全..用户和组权限
选择所有表名,包括 MSysObjects
单击所有“权限”复选框,以便将所有条目设置为“已选中”
根据需要应用/确定
看起来像是权限问题。尝试打开数据库并转到安全权限(在“工具”->“安全”->“用户和组权限”下)确保您拥有数据库的管理员访问权限。
\n\n如果您不这样做\xe2\x80\x99t,您可能必须以这样做的用户身份登录到数据库并授予自己权限
\n