如标题所述:
我试图从 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 读取的权限?
由于您的数据库是 ACCDB 格式,这意味着数据库引擎看到Admin作为运行所有查询的用户。和Admin没有读过(SELECT
)的许可MSysObjects
.
执行 DDLGRANT
给予的声明Admin该许可。
GRANT SELECT ON MSysObjects TO Admin;
我不确定该语句是否可以从 ODBC 连接执行。如果失败,请在 Access 应用程序会话中打开数据库并在其中运行。
CurrentProject.Connection.Execute "GRANT SELECT ON MSysObjects TO Admin;"
请注意该声明must从 ADO 执行。CurrentProject.Connection
是一个 ADO 对象,所以它的Execute
方法可以成功运行该语句。如果您尝试使用一些基于 DAO 的方法,例如CurrentDb.Execute
或者在查询设计器中将语句作为查询运行,它将失败并显示错误 3129,“无效的 SQL 语句;需要‘DELETE’、‘INSERT’、‘PROCEDURE’、‘SELECT’或‘UPDATE’。”
或者,如果您从 OleDb 连接到 Access db 运行它,它应该可以在 C# 中运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)