win7 64位,anaconda x86-x64位,64位python3.7.4及32bit的office2007情况下pywin32无法操作access的解决方法
起初考虑pywin32位数问题,查询下来本来包名就是pywin32,conda list 查询下来没有安装,然后conda install pywin32 安装
还是不行
考虑是win32com.client问题,果然发现连接数据库需要专门的驱动,微软官方提供的,需要单独安装,不过只有office2010的,看说明office2007也可以用,但是具体安装时
发现不是64位office不能安装,但是升级office也不现实,固定环境的。然后想在odbc上动脑筋结果也是没效果,怀疑ADODB.Connection对象,结果查询时发现有个帖子专门提到
AccessDatabaseEngine_x64 文件是可以在32位office系统中使用的。
AccessDatabaseEngine_X64.exe /passive
搞定
附件图示等
#先要安装与Python和操作系统匹配的pywin32
#利用win32com.client模块的COM组件访问功能,通过ADODB访问Access的mdb文件
#建立数据库连接
import win32com.client
conn = win32com.client.Dispatch(r"ADODB.Connection")
#DSN = 'PROVIDER = Microsoft.Jet.OLEDB.4.0;DATA SOURCE = 旅行小助手.mdb' #Access2003以前
DSN = 'PROVIDER = Microsoft.ACE.OLEDB.12.0;DATA SOURCE = 1.mdb ;' #Access2007及以后
conn.Open(DSN)
#打开一个记录集Recordset
rs = win32com.client.Dispatch(r'ADODB.Recordset')
tablename = '旅行线路表'
rs.Open('[' + tablename + ']', conn, 1, 3)
#遍历记录,读取数据
#rs.MoveFirst() #光标移到首条记录
while not rs.EOF:
for i in range(rs.Fields.Count):
print(rs.Fields[i].Name, ":", rs.Fields[i].Value) #字段名:字段内容
print(end='\n')
rs.MoveNext() #光标移到下条记录
print('该表有'+str(rs.Fields.Count)+'个字段')
print('该表有'+str(rs.RecordCount)+'条记录')
#关闭连接
conn.Close()
com_error: (-2147352567, 'Exception occurred.', (0, u'ADODB.Connection', u'Provider canno t be found. It may not be properly installed.', u'C:\\Windows\\HELP\\ADO270.CHM', 1240655, -21468245 82), None)