Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

7. Обработка ошибок исполнения

7.1. Перечень команд и функций

Приведен в табл. 7.1.

Таблица 7.1

Список команд и функций

Команды / функции

Описание

Команды

CANCEL, RESUME, RETRY, RETURN, SUSPEND

Описание команд см. в табл. 7.4

CLEAR ERROR

Восстанавливает структуры VFP, употребляемые описания ошибки, в состояние, характерное для безошибочного функционирования приложения

ERROR

Генерирует ошибку VFP

ON ERROR

Задает команду, выполняемую при возникновении ошибки VFP

THROW

Создает новый объект-исключение, обрабатываемый оператором CATCH внешней TRY-конструкции

TRY...CATCH...FINALLY

Конструкция. Употребляется для обработки ошибок исполнения (исключений)

Функции

AERROR( )

Создает массив, содержащий сведения о последней ошибке VFP, OLE или ODBC

COMRETURNERROR( )

Заполняет структуру COM-исключения информацией, которую клиент Автоматизации может использовать для определения источника ошибки автоматизации

Error

Обработчик события

ERROR( ), LINENO( ), MESSAGE( ), PROGRAM( ), SYS(16), SYS(2018)

Описание см. в табл. 7.3

SYS(2410)

Возвращает вид обработчика, которому передается обнаруженная ошибка

7.2. Виды обработчиков ошибок

Ошибки исполнения можно обрабатывать:

  • стандартным, встроенным в VFP обработчиком;

  • пользовательским обработчиком, заданным командой ON ERROR;

  • при помощи конструкции TRY ... CATCH ... FINALLY;

  • обработчиком события Error объекта.

Функция

SYS(2410))

возвращает вид обработчика (табл. 7.2), которому передается обнаруженная ошибка.

Таблица 7.2

Значения, возвращаемые функцией sys(2410)

Значение

Вид обработчика

0

Стандартный (системный)

1

TRY...CATCH...FINALLY

2

Обработчик события Error

3

ON ERROR-обработчик

Тип возвращаемого функцией SYS(2410) результата – Character.

Замечание. Если TRY-конструкция не содержит оператора CATCH или опция WHEN lExpression имеющегося CATCH-оператора вычисляется со значением .F., то SYS(2410) может возвращать неверное значение.

Пример. Имеются 3 вида обработчиков. При вызове обработчика заполняется соответствующая строка массива errHandlerType; данные, помещенные в массив, выводятся на печать.

public errHandlerType(3, 3)

store .F. to errHandlerType

&& Имеются обработчики ON ERROR, Error и TRY

&&

on error do ErrorHandler with Error( ), Message( )

ob = NewObject("SomeClass")

x = –9.0^(2 / 3) && Ошибка

try

ob.SomeMethod && При вызове метода возникнет ошибка

x = Sqrt(–5.0) && Ошибка

catch to oErr

FillInErrHandlerType(Val(Sys(2410)), oErr.ErrorNo, oErr.Message)

endTry

&&

&& Определяем, какие ошибки имели место

if errHandlerType(1, 1) then

? "Ошибка обнаружена TRY-конструкцией:"

? "№ ", errHandlerType(1, 2), "; ", errHandlerType(1, 3)

endif

if errHandlerType(2, 1) then

? "Вызван обработчик события Error:"

? "№ ", errHandlerType(2, 2), "; ", errHandlerType(2, 3)

endif

if errHandlerType(3, 1) then

? "Выполнен ON ERROR-обработчик:"

? "№ ", errHandlerType(3, 2), "; ", errHandlerType(3, 3)

endif

define class SomeClass as Custom

procedure SomeMethod

x = 1 + "A" && Ошибка: смешение типов данных

endProc

&&

&& Обработчик события Error

procedure Error(nError, cMethod, nLine)

FillInErrHandlerType(Val(Sys(2410)), nError, cMethod)

endProc

endDefine

&& ON ERROR-обработчик

procedure ErrorHandler(errCode, errMessage)

FillInErrHandlerType(Val(Sys(2410)), errCode, errMessage)

endProc

&& Формирует строку массива errHandlerType

procedure FillInErrHandlerType(iErrType, errorNo, erMessage)

errHandlerType(iErrType, 1) = .T.

errHandlerType(iErrType, 2) = errorNo

errHandlerType(iErrType, 3) = erMessage

endProc

Сообщения программы:

Ошибка обнаружена TRY-конструкцией:

№ 61; SQRT( ) argument cannot be negative

Вызван обработчик события Error:

№ 107; SomeMethod

Выполнен ON ERROR-обработчик:

№ 78; ** or ^ domain error

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]