如标题所述: 我试图从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读取的权限?
答案 0 :(得分:4)
由于您的数据库是ACCDB格式,这意味着数据库引擎将 Admin 视为运行所有查询的用户。并且管理员没有SELECT
的读取权限(MSysObjects
)。
执行DDL GRANT
语句以向 Admin 授予该权限。
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','SELECT'或'UPDATE'。“
或者,如果从OleDb连接到Access数据库运行,它应该从c#开始工作。