Вы можете определить и обработать ошибки в одной строке или множестве строк кода использованием команды ON ERROR и указанием в ней любой допустимой команды или выражения. Однако, обычно для указания процедуры обработки ошибок или программы используется команда DO . Обычно ON ERROR используется как, верхний в иерархии, обработчик ошибок, которые локальные обработчики, такие как события Error и TRY...CATCH...FINALLY не обрабатывают.

Например, предположим, что в вашем программном файле (.prg) имеется недопустимая строка, вроде представленной ниже:

 CopyCode imageСкопировать код
qxy

Когда вы запустите программу, Visual FoxPro отобразит подходящее случаю сообщение об ошибке, "Unrecognized command verb." Однако, вы можете создать процедуру ON ERROR для определения таких недопустимых команд и запустить ее для обработки подобной ошибки. В приведенном ниже фрагменте кода недопустимой команде предществует команда ON ERROR, включащая в себя функцию ERROR(), которая отобразит результат с помощью команды вывода на экран - ?:

 CopyCode imageСкопировать код
ON ERROR ?ERROR()
qxy

Когда будут исполняться эти строки кода, команда ON ERROR определит ошибку и отразит номер ошибки, возвращенный функцией ERROR() в активном окне, вместо вывода диалога, сообщающего об ошибке.

Приведенный ниже код, по существую являющийся базовой формой обработчика, иллюстрируется использование процедуры ON ERROR:

 CopyCode imageСкопировать код
LOCAL lcOldOnError
lcOldOnError = ON("ERROR") && Сохраняет обработчик ошибок, используемый по умолчанию.

* Вызываем ON ERROR с процедуров обработки ошибки. 
ON ERROR DO ErrHandler WITH ERROR(), MESSAGE() 

* Вставьте здесь код, к которому применяется процедура обработки ошибки.

* Восстанавливаем оригинальный обработчик ошибок.
ON ERROR &lcOldOnError

PROCEDURE ErrHandler
   LOCAL aErrInfo[1]
   AERROR(aErrInfo)
   DO CASE
      CASE aErrInfo[1] = ErrorNum && Укажите подходящий номер ошибки.
         * отобразите соответствующее сообщение и вставьте код, фиксирующий ошибку.
      OTHERWISE
         * Отобразите какое-то общее для вашего приложение сообщение об ошибке. 
ENDPROC

Для получения более подробной информации смотрите описание команды ON ERROR. Вы можете, кроме того, включить в процедурном кода другие обработчики ошибок,такие как TRY...CATCH...FINALLY.

Смотрите также