【发布时间】:2010-10-21 21:42:47
【问题描述】:
是否可以在 access-2007 中检测是否存在使用 VBA 的打开查询?
我正在打开这样的查询:
stDocName = "Meeting_Reasons_Frequency"
DoCmd.OpenQuery stDocName
是否可以检测是否打开?
【问题讨论】:
是否可以在 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 选择你想要的;它在此上下文中充当按位运算符。
【讨论】:
acSysCmdGetObjectState 问题适用于查询和表单。感谢您提请我们注意。
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
【讨论】:
acObjStateOpen (1) open in any state (new, dirty, etc.),因为其他两个常量代表脏和新
acObjStateOpen --- 既不适用acObjStateDirty 也不适用acObjStateNew。