2011-11-23 98 views
1

我正在使用数百个msaccess数据库。我正在尝试构建数据库,表和其他对象的摘要。要找出所有的表和对象在给定的数据库,我使用查询如何使用pyodbc执行'GRANT SELECT ON'语句

select * from MSysObjects 

但是,我得到的pyodbc错误信息

[Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission  on 'MSysObjects' 

如何编程改变所有的MSACCESS的许可数据库。我尝试使用“GRANT SELECT ON”语句,但我得到了错误信息

[Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE',  'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE' 

我使用的连接字符串是在这种形式

Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\sample.mdb; 

非常感谢您的帮助。

+0

MSysObjects是一个系统表,获取读取权限可能有点不方便。获得VBA和DAO的摘要绝非易事。你不妨阅读http://www.tek-tips.com/viewthread.cfm?qid=1045679 – Fionnuala

回答

2

尝试使用游标的tablescolumns方法。我无法测试针对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 

的表格方法的选择由表,目录,架构和TABLETYPE过滤。列方法有按照表,目录,模式和列名称过滤的选项。

+1

太棒了!非常感谢。 – Jeremy