Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python单击MS Access上的按钮_Python_Ms Access_Win32com - Fatal编程技术网

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

如何使用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

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

只需调用触发器事件,就像调用表单属性一样。但是,请确保在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这样的所有外部处理,甚至其他访问模块都不能调用它。