记录无法读取; 没有"MSysObjects"的读取权限

VBG*_*GKM 9 excel ms-access vba ms-access-2007 excel-vba

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

我关注过这篇文章:

如何从MS Access数据库获取表名?

使用:

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)

  • +1 优秀!这也允许 ACE/OLEDB 从 Access 外部访问 .accdb 文件中的 MSysObjects。 (2认同)

zzz*_*eek 5

这对我有用,因为这是为此提出的第一个问题:

  1. 这是一个 MDB 文件。不知道其他人的情况。 我明白这不是问题所要求的。然而,StackOverflow 问题/答案也被许多其他通过 google 到达这里的人使用,就像我一样,并且我正在使用 MDB。我希望这个答案对其他人有用。

  2. 打开 MS Access GUI。抱歉,不知道如何在没有它的情况下做到这一点,尽管这可能是可能的。

  3. 转到工具...选项...

  4. 单击“查看”选项卡

  5. 选择“隐藏对象”、“系统对象”

  6. 关闭选项卡

  7. 转到工具...安全..用户和组权限

  8. 选择所有表名,包括 MSysObjects

  9. 单击所有“权限”复选框,以便将所有条目设置为“已选中”

  10. 根据需要应用/确定


Kev*_*oss 0

看起来像是权限问题。尝试打开数据库并转到安全权限(在“工具”->“安全”->“用户和组权限”下)确保您拥有数据库的管理员访问权限。

\n\n

如果您不这样做\xe2\x80\x99t,您可能必须以这样做的用户身份登录到数据库并授予自己权限

\n

  • -1 Access 2007 中不存在工具-&gt;安全-&gt;用户和组权限 (2认同)
  • @jaywon:如果您正在查看 MDB 文件,则该菜单选项确实存在。如果您正在查看 ACCDB 文件,则该文件不会显示,因为该文件不支持 Jet 用户级安全性。所以,你的评论是错误的。 (2认同)