问题描述
from win32com.client import dispatch
oAccess = dispatch("Access.Application")
oAccess.Visible = False
oAccess.OpenCurrentDatabase(my_db)
oDB = oAccess.CurrentDB
for tbl in oDB.TableDefs:
print(table.Name)
tbl.RefreshLink
我也做过:
for tbl in oAccess.TableDefs:
print(table.Name)
tbl.RefreshLink
错误:'function' 对象没有属性 'TableDefs'
我开始了解如何使用 win32com 操作 Windows,但出于某种原因,似乎无法识别“.TableDefs”。我是不是用错了方法?
我知道这可以在 VBA 中完成。我的任务是将所有内容都切换到 Python。
解决方法
这里的第一个错误是 VBA 知道 CurrentDb
是一个方法,并且无法将方法分配给变量,因此它会调用该方法。
然而,Python 在将方法分配给变量时有 0 个问题,所以就这样做了。这意味着您需要括号来调用该方法:
oDB = oAccess.CurrentDb()
这解决了当前的问题(tbl.RefreshLink
也是如此,这可能应该是 tbl.RefreshLink()
)。
此外,您从不定义 table
,只定义 tbl
,因此您可能需要 print(tbl.Name)
。