对于 OP 来说答案可能为时已晚,但万一其他人在这里偶然发现使用 Python 在 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 对应的模块很有用。这可以通过在相关库(此处为“Microsoft Office 14.0 Access Database Engine Object Library”)上运行 MakePy 实用程序(在 PythonWin 程序中)来完成。这会在 site-packages\win32com\gen_py\ 中生成一个模块文件,其 GUID 名称很长……您可以将其重命名为“DAO_120-64.py”或类似名称。然后将 gen_py 目录添加到 Python 路径中(或在 sitepackages 中添加一个 .pth 文件),以便 import 可以找到新模块。
导入后,您可以执行 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").Value = "NewValue"
希望有帮助。