SysCmd(acSysCmdGetObjectState, acQuery, "QueryName")
возвращает ноль, если QueryName закрыто или не существует.
В противном случае возвращается сумма констант для следующих условий:
acObjStateOpen
(1) открыть в любом состоянии (новый, грязный и т. Д.) Или в виде (Дизайн, таблица данных и т. Д.) acObjStateDirty
(2) открыть, но с несохраненными изменениями дизайна acObjStateNew
(4) новый запрос, который еще не был сохранен в его родительской коллекции (QueryDefs
)
Возможно, большую часть времени проверяет, является ли выражение SysCmd
= acObjStateOpen
будет достаточно.Однако, если вы хотите избежать неожиданности, когда запрос открыт с несохраненными изменениями дизайна, вы можете And acObjStateOpen
, как pianoJames предложил .
Но если вы намерены что-то сделать, когда QueryName открыто, вы можете просто проверить, не закрыто ли оно (ноль):
If SysCmd(acSysCmdGetObjectState, acQuery, "QueryName") <> 0 Then