Вход


Главная страница >> Учебный процесс >> Конспекты >> MS Office. Руководство программиста по Visual Basic для MS Office 97 >> Отладка и обработка ошибок >> Как обрабатывать ошибки

Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Как обрабатывать ошибки


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

Например, следующая процедура возвращает True, если указанный файл существует, и False, если его нет, и при этом не содержит никакого кода обработки ошибок:

Function FileExists(filename) As Boolean
═════FileExists = (Dir(filename) <> "")
End Function

Функция Dir возвращает первый файл, соответствующий заданной строке (она может содержать знаки подстановки, имя диска и путь), или строку нулевой длины, если такого файла не найдено.

На первый взгляд кажется, что в функции предусмотрена обработка любого результата вызова Dir. Однако, если функции передано имя несуществующего диска, возникнет ошибка ?устройство не доступно?. Если указанный диск является дисководом (приводом для гибких дисков), функция будет работать правильно, только когда в дисковод вставлена дискета. Если ее там нет, Visual Basic выдаст сообщение об ошибке ?диск не готов? и прекратит выполнение Вашей программы.

Чтобы избежать этой ситуации, используйте средства обработки ошибок, предусмотренные в Visual Basic; это позволит перехватить ошибку и должным образом обработать ее. Когда возникает ошибка, Visual Basic устанавливает ряд свойств объекта Err ? код ошибки, ее описание и т. п. Вы можете задействовать этот объект и его свойства в подпрограмме обработки ошибок, с тем чтобы Ваше приложение ?разумно? реагировало на их появление.

Например, аппаратные проблемы (недопустимое имя диска или пустой дисковод) можно было бы обрабатывать так:

Function FileExists(tilename) As Boolean
═════Dim Msg As String
═════?
включаем перехват ошибок, чтобы обработчик
═════?
реагировал на их появление
═════On Error GoTo CheckError
═════FileExists = (Dir(filename) <> "")
═════?
если все благополучно, выполнение кода обработки ошибок излишне
═════Exit Function

CheckError: ' переходим сюда, если возникла ошибка
═════?
определяем константы, соответствующие встроенным
═════?
кодам ошибок Visual Basic
═════Const mnErrDiskNotReady = 71, mnErrDeviceUnavailable = 68
═════'
константы vbExclamation, vbOK, vbCancel, vbCritical и vbOKCancel
═════?
определены в библиотеке типов VBA
═════If (Err. Number = mnErrDiskNotReady) Then
══════════Msg = "Put a floppy disk in the drive and close the door."
══════════?
открываем окно с восклицательным знаком, сообщением
══════════?
и кнопками ОК и Cancel
══════════If MsgBox(Msg, vbExclamation & vbOKCancel) = vbOK Then
═══════════════Resume
══════════Else
═══════════════Resume Next
══════════End If
═════Elself Err. Number = mnErrDeviceUnavailable Then
══════════Msg = "This drive or path does not exist: " & filename
══════════MsgBox Msg, vbExclamation
══════════Resume Next
═════Else
══════════Msg = "Unexpected error #" & Str(Err. Number) & " occurred: "_
═══════════════& Err. Description
══════════?
открываем окно со знаком "Stop", сообщением и кнопкой ОК
══════════MsgBox Msg, vbCritical
══════════Stop
═════End If
═════Resume
End Function

Свойство Number объекта Err содержит код ошибки периода выполнения, а свойство Description ? ее краткое описание.

Когда Visual Basic генерирует ошибку ?диск не готов?, программа выводит сообщение, позволяющее выбрать одну из двух кнопок - OK или Cancel.

Если пользователь выберет ОК, оператор Resume передаст управление команде, вызвавшей ошибку, и попытается выполнить ее повторно. Если пользователь исправил ситуацию, нормальное выполнение программы продолжится; в ином случае управление вернется обработчику ошибок.

Если же пользователь выберет Cancel, оператор Resume Next передаст управление команде, следующей за той, что вызвала ошибку (в нашем случае - оператору Exit Function).

При появлении ошибки ?устройство не доступно?, программа выведет сообщение о возникшей проблеме. После этого оператор Resume Next передаст управление команде, следующей за той, что вызвала ошибку.

Если же произойдет некая непредвиденная ошибка, программа выведет краткое описание ошибки, после чего прекратит свою работу оператором Stop.

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



[Назад]    [Содержание ]    [Вперед]

  



Текст пособия подготовлен на основе материалов книги
Microsoft Corporation. Руководство программиста по Visual Basic для Microsoft Office 97 / Пер. с англ. - М.: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd.", 1997. - 544 с.: илл.
c Оригинальное издание на английском языке,
Microsoft Corporation, 1997
c Русский перевод,
Microsoft Corporation, 1997

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017