使用 Microsoft Excel VBA 仅查询访问 accdb 文件时,“MSysObjects”没有读取权限(错误编号:-2147217911) - mdb 工作正常

Posted

技术标签:

【中文标题】使用 Microsoft Excel VBA 仅查询访问 accdb 文件时,“MSysObjects”没有读取权限(错误编号:-2147217911) - mdb 工作正常【英文标题】:No read permission on 'MSysObjects' (Error No: -2147217911) when Using Microsoft Excel VBA to Query Access accdb files only - mdb works fine 【发布时间】:2019-05-29 03:34:42 【问题描述】:

在使用 Microsoft Excel VBA 仅查询访问 accdb 文件时对“MSysObjects”没有读取权限(错误编号:-2147217911) - mdb 工作正常

使用 Microsoft Excel VBA 查询访问权限。

对于 mdb 文件,此连接字符串可以很好地打开 mdb 文件,并且 SQL 字符串会返回我想要的表。

Connection String: Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\My Files\Word\ADA II Text\Chapters\9 -



8\Access\ADAIICH9TEST.mdb";User Id=admin;Password=;
SQL String: SELECT MSysObjects.Name From MSysObjects WHERE MSysObjects.Name Not Like "MSyS*" And Type=1 AND 

Flags=0 ORDER BY MSysObjects.Name;

对于 accdb 文件,此连接字符串可以正常打开 accdb 文件,但 SQL 会引发以下错误:

错误编号:-2147217911 错误描述:无法读取记录; 'MSysObjects' 没有读取权限。

为什么它在读取mdb文件时可以访问MSysObjects而不是accdb文件? 如何以编程方式或从访问文件中授予访问权限?

我已经尝试在运行 SQL 之前执行以下语句:

'cn.Execute "GRANT SELECT ON MSysObjects TO Admin;"
'cn.Execute "GRANT SELECT ON TABLE MSysObjects TO PUBLIC;"

他们抛出错误: 错误号:-2147467259 错误描述:无法打开 Microsoft Access 数据库引擎工作组信息

文件。

【问题讨论】:

【参考方案1】:

在 Access 中,您需要授予默认用户访问表的权限。

在带有 Access 的即时窗口中执行

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

然后你的 SQL 就可以工作了。

您可能想要更改连接字符串。 IIRC Jet 在 Access 2003 之后将无法工作,因此请尝试

Provider=Microsoft.ACE.OLEDB.12.0;Data Source="C:\...ADAIICH9TEST.accdb;

【讨论】:

谢谢。我在 Excel 中运行 SQL 到 Access,而不是在 Access 中。那是我的问题。你为我节省了大量时间。

以上是关于使用 Microsoft Excel VBA 仅查询访问 accdb 文件时,“MSysObjects”没有读取权限(错误编号:-2147217911) - mdb 工作正常的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft ODBC for Oracle 在 excel vba 中不起作用

Microsoft 的强制隐式交集运算符是不是在 Excel VBA 中消除了我的公式?

使用 Microsoft Excel VBA 仅查询访问 accdb 文件时,“MSysObjects”没有读取权限(错误编号:-2147217911) - mdb 工作正常

将 Microsoft Project 对象库导入 Excel VBA 项目

Ubuntu中的LibreOffice是不是有类似于Microsoft office(word,excel等)的vba宏的东西? [关闭]

excel编程问题