是否可以在access-2007中检测是否存在使用VBA的打开查询?
我正在打开这样的查询:
stDocName = "Meeting_Reasons_Frequency"
DoCmd.OpenQuery stDocName
是否可以检测它是否开放?
怎么样:
If SysCmd(acSysCmdGetObjectState, acQuery, "QueryName") = acObjStateOpen Then
更多信息:http://msdn.microsoft.com/en-us/library/aa205281(office.10).aspx
不确定这是否适用于查询,但我注意到对于表单,您应该使用And
而不是=
。
If SysCmd(acSysCmdGetObjectState, acForm, "FormName") And acObjStateOpen Then
显然,表单可以同时具有多个“状态”。使用And
挑出你想要的那个;它在此上下文中充当按位运算符。
如果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