如何使用Python单击MS Access上的按钮
我正在尝试从MS Access数据库(.accdb)查询中自动提取一些数据 我正在使用win32com打开Access数据库,我检索了所有关于我想要与之交互的小部件的信息。我可以修改小部件值和打开表单,读取和创建查询,尽管我不知道如何单击按钮(CommandButton) 我的代码很简单,如下所示:如何使用Python单击MS Access上的按钮,python,ms-access,win32com,Python,Ms Access,Win32com,我正在尝试从MS Access数据库(.accdb)查询中自动提取一些数据 我正在使用win32com打开Access数据库,我检索了所有关于我想要与之交互的小部件的信息。我可以修改小部件值和打开表单,读取和创建查询,尽管我不知道如何单击按钮(CommandButton) 我的代码很简单,如下所示: import win32com.client as win access = win.Dispatch('Access.Application') access.Visible = True db
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查询,以研究另一种解决方法,尽管我将其作为最后一个选项。只需调用触发器事件,就像调用表单属性一样。但是,请确保在MS Access中,按钮定义为
Public
,而不是Private
,如:Public Sub-myButton\u 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
谢谢你的回复。不幸的是,它被定义为私有而非公共。如果您无法更改它,则上述方法将不起作用。只有在访问表单范围内定义的函数才能使用
Private
运行按钮单击事件。像Python这样的所有外部处理,甚至其他访问模块都不能调用它。