Access 2002

Тип объекта


В качестве параметра ваша функция должна будет получать тип объекта (константу типа AcObjectType), а с помощью длинного оператора Select Case выбирать нужную коллекцию All. Можно, конечно, написать и отдельную функцию для каждого типа объектов.

Если объекта, который вы проверяете, не существует вовсе, попытка обратиться к его свойству IsLoaded (в коллекции All.) вызовет ошибку времени выполнения. Так что не забывайте обрабатывать эту ошибку, если все же вы осуществляете проверку таким способом.

Если вам нужно определить, в каком именно режиме открыт объект (эксплуатации или конструктора), либо узнать, не изменилась ли его структура, в этом деле свойство IsLoaded вам не помощник.

При условии, что форма открыта в качестве подчиненной (неважно, в каком режиме), свойство IsLoaded ее объекта в коллекции AllForms вернет значение False.

Альтернативным способом получения информации об объекте является применение функции SysCmd. Эта функция возвращает данные о любом объекте любого типа. Если передать ей константу acSysCmdGetObjectState вместе с именем объекта и константой, определяющей его тип (acForm, acReport и т. п.), функция вернет значение, указывающее текущее состояние объекта. Возвращаемое функцией значение представляет собой комбинацию следующих констант (или 0, если объект не открыт).

Функция SysCmd возвращает либо значение 0, которое означает, что объект не открыт, либо одну или несколько перечисленных выше констант, объединенных оператором Ог. Если сравнить возвращенное функцией значение с нулем, вы узнаете, открыт ли объект. Если же сравнить это значение с одной из констант, воспользовавшись оператором And, можно определить, находится ли объект в соответствующем ей состоянии. Возвращенное значение может представлять собой сумму значений из приведенной таблицы. Так, для новой формы, в структуру которой не вносились изменения, возвращенное значение будет равно 5 (форма является открытой и новой).

Комментарии закрыты