如何用Python点击MS Access上的按钮?

问题描述 投票:1回答:1

我试图从MS Access数据库(.accdb)查询中自动提取一些数据。

我正在使用win32com打开Access数据库,我检索到了所有关于我想与之交互的小组件的信息,我可以修改小组件的值和打开表格,读取和创建查询,尽管我不知道如何点击按钮(Command)。我可以修改widget的值和打开表格,读取和创建查询,尽管我不知道如何点击一个按钮(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,我想通过它来进行交互。

widget = app.Forms(formname).Controls(widgetname)

当我引用了一个CommandButton之后,我怎么能点击它呢?我查看了MS Access的Command Object文档,但没有点击方法。我正在使用的变通方法是。

widget.SetFocus()
shell.SendKeys('{Enter}') #it refers to WScript.Shells

但我不想使用SendKeys,因为它很容易产生错误,例如,如果用户正在处理其他事情。我也考虑过读取按钮点击背后涉及的SQL查询,以研究另一个变通方法,尽管我把它作为最后一个选项。

python ms-access win32com
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.