Процедуры, возбуждающие исключения в Delphi


Возбуждение исключений

При создании приложений часто приходится проектировать блоки кода, которые могли бы возбуждать исключения. В Delphi для этих целей предусмотрены оператор Raise и несколько специальных процедур.

Оператор Raise

Для возбуждения исключений обычно используется оператор Raise. Синтаксис его использования следующий:

Raise [<объект>] [At <адрес>]

Возможны следующие варианты использования оператора Raise:
а) Для повторного возбуждения (reraising) текущего исключения.
Внутри нескольких вложенных обработчиков Raise захватывает конкретный экземпляр исключения и передает его вверх первой встречной конструкции Try. Если такой конструкцией будет Try..Finally, то выполняться операторы раздела Finally. Если это конструкция Try..Except, то исключение будет помечено, как обрабатываемое и начнется выполнение операторов раздела Except. Чаще всего оператор Raise без параметров включают внутрь раздела Try..Except.

Если других уровней обработки исключения нет, то оно будет перехвачено имеющимся в Delphi обработчиком по умолчанию, который выведет соответствующее сообщение и уничтожит объект исключения.

б) Для возбуждения исключения, включая собственные. Если создаются собственные компоненты, то может возникнуть необходимость в создании специальных исключений, которые могут возбуждаться, например, при присвоении недопустимого значению свойству компонента. Для этого необходимо, как минимум, объявить класс исключения. Когда код в компоненте должен возбудить исключение необходимо создать представителя этого класса.

Raise возбуждает исключительную ситуацию, создавая экземпляр исключения. Обычно эту операцию выполняют по условию If..Then Raise … В этом заключается второе назначение Raise — инициировать различные ситуации, включая пользовательские. Класс исключения может быть и уже известным. Очистка ошибки также выполняется.

If Length(Editl.Text)=O Then Raise Exception.Create(‘He указана длина строки!’);

Процедуры, возбуждающие исключения

а) Для возбуждения исключений, связанных с отсутствием оперативной памяти предусмотрена следующая процедура:
OutOfMemoryError; — Возбуждает исключение класса EOutOfMemory.

Использовать процедуру OutOfMemoryError для возбуждения исключения гораздо проще, чем базовое исключение Exception. Так стандартное возбуждение исключения с помощью базового исключения должно выглядеть примерно так:

Raise Exception.Create(‘Out of memory.’);

Для возбуждения исключения с помощью процедуры OutOfMemoryError и вывода аналогичного сообщения достаточно записать:
OutOfMemoryError;

б) Для повторного возбуждения исключений, связанных с ошибками функций Win32 API можно использовать следующую процедуру.
RaiseLastWin32Error — Возбуждает заново исключение EWin32Error.

Возбуждение исключений в базах данных

Для возбуждения исключительных ситуаций класса EDatabaseError может использоваться несколько следующих процедур:

DatabaseError(Const Message: String; Component: TComponent=Nil);

Возбуждает исключение класса EDatabaseError, передавая сообщение с помощью параметра Message. Второй параметр позволяет уточнить источник ошибки.

Использовать процедуру DatabaseError для возбуждения исключения гораздо проще, чем базовое исключение Exception. Так стандартное возбуждение исключения с помощью базового исключения должно выглядеть примерно так:

Raise Exception.Create(‘ошибка!’);

Для возбуждения исключения с помощью процедуры DatabaseError достаточно записать:

DatabaseError(‘ ошибка!’);
DBError(Ident: Word);

Возбуждает исключение класса EDatabaseError, передавая сообщение из строкового ресурса с номером Ident.

DBErrorFmt(Ident: Word; Const Args: Array Of Const);

Возбуждает исключение класса EDatabaseError, передавая сообщение из строкового ресурса с номером Ident, которое может быть отформатировано с помощью констант Args.

Для возбуждения исключительных ситуаций класса EDBEngineError может использоваться несколько следующих процедур:

DBIError(ErrorCode: DBIResult);

Возбуждает исключение класса EDBEngineError для BDE, с передаваемым номером кода ошибки ErrorCode.

Воспользоваться вышеприведенными процедурами для возбуждения исключительных ситуаций можно при прямых вызовах BDE, при попытках динамического создания объектов базы данных с помощью соответствующих команд SQL и т.п.


Комментарии запрещены.




Статистика