2013-04-23 118 views
2

我的一个Python应用程序一直在使用旧的.mdb Access数据库正常工作时遇到问题。转换为Access 2010并且文件被转换为新的.accdb格式后,似乎没有任何工作。我有一个新的64位Win 7操作系统加载的32位Access版本。我相信我的问题是我的代码的前两行。我相信我需要更新它们以引用“Microsoft Office 14.0 Access数据库引擎对象”,但我不清楚如何执行此操作。我可以得到这个帮助吗?我已经搜索了关于这种情况的DAO信息的高和低,但利用。使用Python访问.accdb数据库的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

的回答可能为时已晚了OP,但万一别人绊倒在这里DAO的使用Python的区域寻找一个答案:

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

还应该注意的是,要使用的python版本的32/64位需要与DAO版本的32/64位相匹配,后者又匹配安装它的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(VBA或VB)中使用DAO的任何教程或文章将描述常见操作中涉及的对象,方法和属性,这些对象,方法和属性几乎可逐字逐句地转录为python。主要区别在于在Python版本中,某些COM“默认方法”机制不起作用。因此,举例来说,所述VBA

MyRecordset( “SomeColumn”)= “的NewValue”

...在python对应于:

MyRecordset.Fields( “SomeColumn”)值=“的NewValue。 “

希望有帮助。