如何使用Python单击MS Access上的按钮

时间:2020-04-30 19:55:20

标签: python ms-access win32com

我正在尝试自动从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查询,以研究另一种解决方法,尽管我将其保留为最后选择。

1 个答案:

答案 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