Python 如何执行';在';使用pyodbc的语句

Python 如何执行';在';使用pyodbc的语句,python,ms-access,pyodbc,grant,Python,Ms Access,Pyodbc,Grant,我正在处理数百个msaccess数据库。我正在尝试构建数据库、表和其他对象的摘要。为了找出给定数据库中的所有表和对象,我使用查询 select * from MSysObjects 但是,我得到了pyodbc错误消息 [Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission on 'MSysObjects' [Microsoft][ODBC Microsoft Acce

我正在处理数百个msaccess数据库。我正在尝试构建数据库、表和其他对象的摘要。为了找出给定数据库中的所有表和对象,我使用查询

select * from MSysObjects
但是,我得到了pyodbc错误消息

[Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission     on 'MSysObjects'
[Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE',     'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'
如何以编程方式更改所有msaccess数据库的权限。我尝试使用“GRANT SELECT ON”语句,但收到错误消息

[Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission     on 'MSysObjects'
[Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE',     'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'
我使用的连接字符串如下所示

Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\sample.mdb;
非常感谢您的帮助。

尝试使用光标的和方法。我无法针对Access 2003或2007进行测试,但以下内容适用于Access 2010:

import pyodbc
connection = pyodbc.connect('Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Username\Desktop\Database.accdb;')
cursor = connection.cursor()
for row in cursor.tables():
    print row.table_name
for row in cursor.columns():
    print row.column_name

tables方法具有按表、目录、架构和表类型筛选的选项。Columns方法具有按表、目录、架构和列名进行筛选的选项。

MSysObjects是一个系统表,获取读取权限可能有点不方便。使用VBA和DAO获取摘要绝非难事。你可能会想读一本很棒的书!非常感谢。