Access 2002

Свойство On Error и событие Error


В функции FunctionA обработчик ошибок предусмотрен, поэтому он и обрабатывает ошибку. Если бы он там отсутствовал, то управление было бы передано в процедуру (если таковая имеется), вызвавшую FunctionA. Если VBA доходит до вершины стека вызовов и не обнаруживает обработчика ошибок, он выдает собственное сообщение об ошибке и прекращает выполнение программы.

VBA действует так, как если бы оператор вызова процедуры (Call) сам генерировал ошибку. Оператор Resume ExitHere в FunctionA возвращает управление оператору с меткой ExitHere, то есть оператору выхода из функции; управление не передается назад в процедуру SubB. Если в функции FunctionA вместо оператора Resume ExitHere применить оператор Resume, он передаст управление оператору Cal 1. Тот, в свою очередь, снова вызовет процедуру SubB, что приведет к зацикливанию ошибки.

Когда вы работаете со связанными формами или отчетами, доступ ко всем их данным осуществляется посредством ядра базы данных Jet или MSDE. Access вызывает функции ядра базы данных всякий раз, когда необходимо заполнить поле или список в связанной форме. Любой из этих вызовов может закончиться аварийно из-за того, например, что кто-то открыл базу данных в монопольном режиме или таблица была удалена. Описанные в этой главе операторы On Error действуют только во время выполнения вашего программного кода. А как быть с ошибками, которые происходят во время работы самой Access с формой или отчетом? К счастью, Access дает нам возможность перехватывать такие ошибки с помощью свойства OnError и связанной с ним процедуры обработки события Error. Это свойство позволяет задать процедуру, которая будет выполняться при возникновении любой ошибки.

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