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

时间:2019-05-29 03:34:43

标签: excel vba access

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

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

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

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文件而不是accdb文件时它有权访问MSysObjects? 如何通过编程方式或从访问文件中授予访问权限?

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

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

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

文件。

1 个答案:

答案 0 :(得分:0)

在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;