python连接oledb_Python与MS-Access-VBA对OLEDB/ODBC工作的启示

各位更高级的程序员:

如果这看起来像是python32位/64位ODBC/OLEDB Windows问题,请原谅,但我尝试搜索论坛,并没有找到我的问题的原因。在

基本上,我尝试首先使用pypyodbc模块通过ODBC连接一个非常简单的Python脚本,然后使用adodbapi模块通过OLEDB连接第二个脚本,这两个脚本都试图访问msaccess2010.accdb数据库。但是,对于OLEDB,我总是找不到提供程序。它可能没有正确安装“错误。对于ODBC,我总是收到“找不到数据源名,也没有指定默认驱动程序”。在

深入挖掘之后,发生了一些不同寻常的事情。在Python中,喷气式OLEDB.4.0适用于.mdb文件,但不适用ACE.OLEDB.12.0用于.accdb文件。然而,当我运行accessvba ADODB连接时,恰恰相反!在

我的环境包括:Python3.4-32位

pywin32-219(安装后安装)

Microsoft Office 2010 64位

Windows 7系统

是的,我下载并成功安装了AccessDatabaseEngine_x64.exe。是的,我将ODBC数据源指向%Win%/SysWOW64。是的,我在上述文件夹的odbcad32.exe中看到mdb和accdb的访问驱动程序和数据源。是的,我在regedit中看到Access(*mdb)和Access(*mdb,*accdb)数据源和访问驱动程序的注册表项。是的,我都重新启动并关闭了我的机器。在

OLEDB

以下是我的连接字符串,它返回Provider not found error…':import adodbapi

databasename = 'D:\directorypath\DatabaseName.accdb'

constr = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s' % databasename

db = adodbapi.connect(constr)

但值得注意的是,以下连接字符串可以完美地工作,但当然只能用于.mdb文件:

^{pr2}$

ODBC

以下是我的连接字符串,它返回“找不到数据源名称…”。。。':import pypyodbc

databasename = 'D:\directorypath\DatabaseName.accdb'

constr = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % databasename

db = pypyodbc.connect(constr)

与上面一样,以下方法最理想,但仅适用于.mdb文件:import pypyodbc

databasename = 'D:\otherdirectorypath\OtherDatabaseName.mdb'

constr = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;' % databasename

db = pypyodbc.connect(constr)

访问VBA

有趣的是,在accessvba模块(当然有ActiveX数据对象库引用)中,使用相同的连接字符串(驱动程序和提供程序)恰恰相反。在

代码可以完美地用于.mdb和.accdb文件:Dim constr As String

Dim CN As ADODB.Connection

Dim RS As ADODB.Recordset

constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\databasedirectory\DatabaseName.accdb;Persist Security Info=False"

' OR constr = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\databasedirectory\DatabaseName.accdb;Persist Security Info=False"

Set CN = New ADODB.Connection

CN.Open (constr)

代码返回错误-“找不到提供程序”或“无法加载指定的驱动程序”:Dim constr As String

Dim CN As ADODB.Connection

Dim RS As ADODB.Recordset

constr = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=D:\otherdatabasedirectory\OtherDatabaseName.mdb;Persist Security Info=False"

' OR constr = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D:\otherdatabasedirectory\OtherDatabaseName.mdb;Persist Security Info=False"

Set CN = New ADODB.Connection

CN.Open (constr)

ACE.OLEDB.12.0与ACE.OLEDB.14.0

最后,仍然在Access VBA中,只有提供程序:Microsoft.ACE.OLEDB.12.0的作品,我认为与msaccess2007相对应。但是,提供商:Microsoft.ACE.OLEDB.14.0不适用于我安装的MS Access 2010。有什么原因吗?

结论

我知道ActiveX库与Python的模块库是不同的技术,而且微软不允许同时使用x32位和x64位的组件,但是为什么我不能得到预期的结果呢。我考虑过AccessDatabaseEngine_x64.exe/passive,但我听到奇怪的Office结果是这样的。我需要为64位安装Python3.4吗?请帮忙或建议!谢谢。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值