access:如何使用VBA检测是否打开了查询?

时间:2010-10-21 21:42:48

标签: sql vba ms-access access-vba

是否可以在access-2007中检测是否存在使用VBA的打开查询?

我正在打开这样的查询:

    stDocName = "Meeting_Reasons_Frequency"
  DoCmd.OpenQuery stDocName

是否可以检测它是否已打开?

3 个答案:

答案 0 :(得分:8)

怎么样:

 If SysCmd(acSysCmdGetObjectState, acQuery, "QueryName") = acObjStateOpen Then

更多信息:http://msdn.microsoft.com/en-us/library/aa205281(office.10).aspx

答案 1 :(得分:1)

不确定这是否适用于查询,但我注意到对于表单,您应该使用And而不是=

If SysCmd(acSysCmdGetObjectState, acForm, "FormName") And acObjStateOpen Then

显然,表单可以有多个"状态"同时。使用And选择你想要的那个;它在这种情况下充当了一个按位运算符。

答案 2 :(得分:1)

如果 QueryName 已关闭或不存在,则

SysCmd(acSysCmdGetObjectState, acQuery, "QueryName")返回零。

否则,它将返回以下任何一种适用的常数之和:

  • acObjStateOpen(1)在任何状态(新的,脏的等)或视图(设计,数据表等)下打开
  • acObjStateDirty(2)打开,但未保存设计更改
  • acObjStateNew(4)一个尚未保存到其父集合(QueryDefs)的新查询

也许大多数时候都会检查SysCmd表达式= acObjStateOpen是否足够。但是,如果要避免在未保存设计更改的情况下打开查询时感到意外,可以将And acObjStateOpen设置为pianoJames suggested

但是,如果您打算在 QueryName 打开时执行某些操作,则可以简单地检查它是否未关闭(零):

If SysCmd(acSysCmdGetObjectState, acQuery, "QueryName") <> 0 Then