使用Python连接到Access .accdb数据库的DAO

时间:2013-04-23 21:32:23

标签: python

我的一个Python应用程序出现了问题,该应用程序在较旧的.mdb Access数据库中运行良好。转换为Access 2010并将文件转换为新的.accdb格式后,似乎没有任何工作。我确实在新的64位Win 7操作系统上加载了32位Access版本。我相信我的问题在于我的代码的前两行。我相信我需要更新它们以引用“Microsoft Office 14.0 Access数据库引擎对象”,但我不清楚如何执行此操作。我可以帮忙解决这个问题吗?我已经搜索了关于这种情况的DAO信息的高低,但是有用。

 import win32com.client
 engine = win32com.client.Dispatch("DAO.DBEngine.36")

 db=engine.OpenDatabase(r"c:\temp\Tracker.accdb")

 table = db.OpenRecordset("select * from Event_Log")
 print table.RecordCount

1 个答案:

答案 0 :(得分:2)

OP的答案可能为时已晚,但万一其他人偶然发现在这里寻找DAO领域的答案:

OP是正确的,直接问题在于Dispatch方法中使用的字符串。 Office 2010(Office 14?)安装了“DAO.DBEngine.120”,我认为这是最早使用.accdb文件的版本。通常,可以通过使用RegEdit在注册表中搜索子字符串“DAO.DBEngine”来研究此问题,并查看已注册的组件,以便为该字符串添加版本号。

还应该注意,要使用的python版本的32/64位数需要匹配DAO版本的32/64位数,而DAO版本又匹配安装它的Office的32/64位数。

进一步说明:如果您使用IDE并使用自动完成功能,则生成和导入与DAO API对应的模块非常有用。这可以通过在相关库上运行MakePy实用程序(在PythonWin程序中)来完成,这里是“Microsoft Office 14.0 Access数据库引擎对象库”。这会在site-packages \ win32com \ gen_py \中生成一个模块文件,其中包含一个长GUID名称...您可以将其重命名为“DAO_120-64.py”或其他类似文件。然后将gen_py目录添加到Python路径(或在sitepackages中添加.pth文件),以便导入可以找到新模块。

导入后,您可以执行IDE识别的任何操作,将类型与DAO.Database,DAO.Recordset等变量相关联。

此外,生成的DAO模块是可用的对象,方法,属性和常量的有用参考。可能更有用的参考是简单地打开Excel / Word / Access VBA项目,引用(导入)同一个库,并在其上使用VBA对象浏览器。

通常,任何关于在Access中使用DAO的教程或文章(在VBA或VB中)都将描述常见操作中涉及的对象,方法和属性,这些对象,方法和属性几乎可以逐字转录到python中。主要的区别在于,在python版本中,一些COM“默认方法”机制不起作用。所以,例如,VBA

MyRecordset(“SomeColumn”)=“NewValue”

...在python中对应:

MyRecordset.Fields(“SomeColumn”)。Value =“NewValue”

希望有所帮助。