我正在尝试自动从MS Access数据库(.accdb)查询中提取一些数据。
我正在使用win32com打开Access数据库,并检索了有关要与之交互的小部件的所有信息。尽管我不知道如何单击按钮(CommandButton),但是我可以修改窗口小部件值和打开表单,阅读和创建查询。
我的代码很简单,就像这样:
import win32com.client as win
access = win.Dispatch('Access.Application')
access.Visible = True
db = access.OpenCurrentDatabase(r'databasepath.accdb')
app.DoCmd.OpenForms(formname)
然后我可以通过以下方式引用要与之交互的所有小部件:
widget = app.Forms(formname).Controls(widgetname)
引用命令后如何单击命令按钮?我检查了MS Access文档中的Command Object,但是没有单击方法。我正在使用的解决方法是:
widget.SetFocus()
shell.SendKeys('{Enter}') #it refers to WScript.Shells
但是我不想使用SendKeys,因为它很容易产生错误,例如,如果用户正在处理其他事情。我还考虑阅读按钮单击后所涉及的SQL查询,以研究另一种解决方法,尽管我将其保留为最后选择。
答案 0 :(得分:1)
就像窗体的属性一样,只需调用触发事件即可。但是,请确保在MS Access中将按钮定义为Public
,而不是Private
,如下所示:Public Sub myButton_Click()
。当然,对于任何API集成,请务必使用try/except
包装,以确保资源的干净释放,无论是否出错:
import win32com.client as win
try:
access = win.Dispatch('Access.Application')
db = access.OpenCurrentDatabase(r'C:\Full\Path\To\myDatabase.accdb')
access.DoCmd.OpenForms(formname)
# RUN BUTTON CLICK EVENT (OPEN PARENTHESES REQUIRED)
access.Forms(formname).myButton_Click()
access.Visible = True
except Exception as e:
print(e)
access.DoCmd.CloseDatabase()
access.Quit()
finally:
db = None; access = None
del db; del access