使用 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宏的东西? [关闭]