4

如标题中所述:我正在尝试从 Access 2010 数据库中的 MSysObjects 中读取数据,但出现异常,告诉我不允许从该表中读取数据。

我可以读出其他非 MSys 表。

SQL Query I am using: SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0

连接字符串:

Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\mydatabase.accdb;Uid=Admin;Pwd=;

这是在http://www.connectionstrings.com/access/上看到的标准连接字符串

如何获得从 MSysObjects 读取的权限?

4

1 回答 1

5

由于您的数据库是 ACCDB 格式,这意味着数据库引擎将Admin视为运行所有查询的用户。并且管理员没有读取 ( SELECT) 权限MSysObjects

执行 DDLGRANT语句以授予管理员该权限。

GRANT SELECT ON MSysObjects TO Admin;

我不确定该语句是否可以从 ODBC 连接执行。如果失败,请在 Access 应用程序会话中打开数据库并在那里运行它。

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

请注意,必须从 ADO 执行语句。 CurrentProject.Connection是一个 ADO 对象,所以它的Execute方法可以成功运行语句。如果您尝试使用某些基于 DAO 的方法,例如CurrentDb.Execute或在查询设计器中将语句作为查询运行,它将失败并出现错误 3129,“无效的 SQL 语句;预期的 'DELETE', 'INSERT', 'PROCEDURE', “选择”或“更新”。”

或者,如果您从 OleDb 连接到 Access db 运行它,它应该可以在 c# 中运行。

于 2013-08-08T10:47:55.463 回答