Шаг 17.
Средства отладки в Microsoft Access 97. Программная обработка ошибок

    На этом шаге мы рассмотрим организацию прграммной обработки ошибок.

    Все ошибки можно разделить на три большие группы:

    Мы остановимся сейчас на обработке ошибок периода выполнения. Например, большинство программ работает с файлами. Однако может оказаться, что на диске не хватает места для размещения файла, или файл с заданным именем отсутствует и т.п. Обработку таких ошибок может взять на себя Visual Basic. Для этого нужно написать обработчик ошибок.

    Обработчик ошибок (Error Handler) - подпрограмма, предназначенная для перехвата ошибок и их обработки. Такие обработчики целесообразно добавлять к любой процедуре, где существует вероятность возникновения ошибки. Создание обработчика ошибок состоит из трех этапов.

    1. Включение перехвата ошибок. Нужно указать точку кода, куда передать управление при возникновении ошибки. Для этой цели используется оператор On Error:

    On Error GoTo <метка>   .

    Этот оператор включает перехват ошибок и указывает метку, с которой начинается подпрограмма обработки ошибок. Переход на эту метку происходит только тогда, когда возникает ошибка!

    Несмотря на то, что можно создать несколько обработчиков ошибок, но в любой момент времени может быть активен лишь один из обработчиков ошибок. Отключение программной обработки ошибок осуществляется оператором On Error GoTo 0:

.   .   .   .   .
On Error GoTo <метка1>'1-й обработчик ошибок.
.   .   .   .   . 
<Если ошибка возникнет в этом блоке,>
<то управление будет передано на метку1.>
.   .   .   .   .
On Error GoTo <метка2>'2-й обработчик ошибок.
.   .   .   .   . 
<Если ошибка возникнет в этом блоке,>
<то управление будет передано на метку2.>
.   .   .   .   .
On Error GoTo 0'Отключение обработчика ошибок. 
.   .   .   .   . 
<Если ошибка возникнет в этом блоке,>
<то программа прекратит свою работу.>
.   .   .   .   .

    2. Создание подпрограммы обработки ошибок. Первое, что нужно сделать при написании подпрограммы обработки ошибок, - добавить метку строки, указывающую начало этой подпрограммы. Метка должна заканчиваться двоеточием.

    Код обработки ошибок принято размещать в конце процедуры, а операторы Exit Sub, Exit Function, осуществляющие выход из процедуры или функции, - непосредственно перед меткой обработчика ошибок. Это позволит избежать выполнения его кода, если никаких ошибок не было.

    Тело подпрограммы содержит код, обрабатывающий ошибку. Для этих целей, как правило, используются конструкции Select Case и If…Then…Else.

    В теле подпрограммы можно использовать следующие свойства объекта Err:

    3. Выход из подпрограммы обработки ошибок. Оператор Resume завершает подпрограмму обработки ошибок. Существует три формы этого оператора:

    Приведем общий вид функции, содержащей обработчик ошибок:

Function <имя функции> (<список параметров>) As <тип возвращаемого значения>
   On Error GoTo <метка> 'Включили обработчик ошибок.
   <Тело функции.>
   Exit Function 'Выход из функции.
<метка>: 'Начало обработчика ошибок.
   <Тело обработчика ошибок.>
   <Одна из форм оператора Resume.>
End Function 'Конец описания функции.


    Пример: составить функцию, вычисляющую частное двух аргументов.

    На рисунке 1 приведена форма с результатом деления на нуль, а ниже - обработчик события нажатия на кнопку, содержащий программную обработку ошибок:


Рис.1. Внешний вид приложения

Private Sub Кнопка6_Click()
   Dim Str As String
   On Error GoTo Metka
   divide = chisl / znam
   Exit Sub
Metka:
   divide = Null
   ' Возникла ошибка "деление на 0", "переполнение" или
   '"недопустимый вызов или аргумент процедуры".
   If Err.Number = 11 Or _
      Err.Number = 6 Or _
      Err.Number = 5 Then
                        
      Str = "Ошибка №" & Err.Number & ". " & Err.Description
     
   Else
      Str = "Непредвиденная ошибка. Код " & Err.Number
   End If
   MsgBox Str 'Вывод сообщения на экран
   Resume Next 'Переход на  Exit Function.

End Sub

    Объект Err можно использовать для обработки ошибок, определяемых пользователем, так называемых нестандартных ошибок. Для обработки ошибочной ситуации можно эмулировать (искусственно создать) ошибочную ситуацию, установив свойства Number и Description объекта Err, которые описывают ошибку, и установить состояние ошибки, используя метод Raise объекта Err. В результате управление переходит к процедуре обработки ошибок. Например:

  If i>nRateLimit Then
     Err.Raise Number:=2074, Description:="Выход индекса за границы массива"
  End If

    Информация об объекте Err удаляется при каждом выполнении оператора On Error или Resume, а также при выходе из текущей процедуры. Можно принудительно очистить содержимое объекта Err, используя метод Clear:

    Err.Clear           .

    При обработке нестандартной ошибки ей нужно поставить в соответствие определенное число (код ошибки). Предопределенные ошибки имеют коды в диапазоне от vbObjectError до vbObjectError+512. Оперируя с кодами, превышающими последнее значение, можно быть уверенным, что они не вызовут конфликтов в будущих версиях Visual Basic. С учетом сказанного последний пример можно переписать так:

  If i>nRateLimit Then
     Err.Raise Number:=1+vbObjectError+512,_
     Description:="Выход индекса за границы массива"
  End If 

    На следующем шаге мы начнем рассматривать средства отладки в Borland Pascal.




Предыдущий шаг Содержание Следующий шаг