如何使用 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 vba中单击命令按钮单击以更改代码以更改控件属性
如何在 Ms Access 的组合框中单击按钮并打开与值相关的表单?
如何确保 MS Access 中的有界表单和子表单仅在单击按钮后提交到数据库?