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

Posted

技术标签:

【中文标题】如何使用 Python 单击 MS Access 上的按钮【英文标题】:How to click a button on MS Access with Python 【发布时间】:2020-04-30 19:55:20 【问题描述】:

我正在尝试从 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 文档,但没有单击方法。我正在使用的解决方法是:

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

但我不想使用 SendKeys,因为它很容易产生错误,例如,如果用户正在处理其他事情。我还考虑阅读按钮单击背后涉及的 SQL 查询,以研究另一种解决方法,尽管我将其保留为最后一个选项。

【问题讨论】:

【参考方案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

【讨论】:

感谢您的回复。不幸的是,它被定义为私有而不是公共的。 如果无法更改,则上述方法无效。只有在 Access 表单范围内定义的函数才能运行带有Private 的按钮单击事件。像 Python 这样的所有外部处理,甚至其他 Access 模块都无法调用它。

以上是关于如何使用 Python 单击 MS Access 上的按钮的主要内容,如果未能解决你的问题,请参考以下文章

MS ACcess 使文本框在按钮单击时可见

如何在ms-access vba中单击命令按钮单击以更改代码以更改控件属性

如何在 Ms Access 的组合框中单击按钮并打开与值相关的表单?

如何确保 MS Access 中的有界表单和子表单仅在单击按钮后提交到数据库?

如何在运行时使用 VBA 将按钮添加到 MS Access 表单并将代码添加到 _Click() 事件

单击列表框时,如何在文本框中以另一种形式从ms access 2010中的列表框中移动所选项目