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

问题描述 投票:5回答:3

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

我正在打开这样的查询:

    stDocName = "Meeting_Reasons_Frequency"
  DoCmd.OpenQuery stDocName

是否可以检测它是否开放?

sql vba ms-access access-vba
3个回答
8
投票

怎么样:

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

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


1
投票

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

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

显然,表单可以同时具有多个“状态”。使用And挑出你想要的那个;它在此上下文中充当按位运算符。


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
© www.soinside.com 2019 - 2024. All rights reserved.