Visual Basic |
---|
Public Event QueryBeforeExecute( _ ByVal pQuery As TDMSQuery, _ ByVal pObject As TDMSObject, _ ByRef bCancel As Boolean _ ) |
- pQuery
- Запрос, который должен быть выполнен.
- pObject
- Объект, в состав которого входит выборка. Nothing, если выборка выполняется в окне свойств или методом ExecuteQuery.
- bCancel
- TRUE - отменить выполнение запроса.
Использование обработки события может быть полезным, когда для выполнения запроса необходимо получить внешнюю информацию (на которую которую невозможно сослаться с помощью конструктора выборок).
1. Событие является отменяемым: присвоением параметру bCancel значения TRUE можно отменить выполнение запроса. Соответственно, поскольку последующие события QueryAfterExecute, ListBeforeShow не наступают, на Панели состава ничего не отображается.
2. Обработчик может быть размещен в скриптах выборки, профиля и/или общесистемном (см. рисунок). Если обработчики определены на всех уровнях, то последовательность их вызова такова:
- скрипт выборки;
- скрипт профиля пользователя;
- общесистемный скрипт.
Если на каком-либо уровне событие было отменено (параметру bCancel присвоено значение TRUE), то обработчики события, размещенные на последующих уровнях, вызваны не будут.
3. Схему последовательности генерации событий при установке фокуса на выборке см. на рисунке.
Предупреждение: при обращении к свойству Objects параметра pQuery выполняется запрос, и, как следствие, наступают события QueryBeforeExecute и QueryAfterExecute. Таким образом, обработчик события Query_BeforeExecute() начинает вызываться в бесконечном цикле и приложение "зависает". Подобных ситуаций необходимо избегать (см. пример).
4. Событие генерируется при выполнении запроса любыми средствами пользовательского интерфейса (в том числе и в окне свойств выборки). Для того, чтобы событие генерировалось при работе через API (напр., при вызове ExecuteQuery), должен быть включен вызов объектных событий в Окне свойств базы данных (см. рисунок).