Описание ошибок vb


Описание ошибок vb

Автор: Evangelos Petroutsos
Mastering™ Visual Basic® .NET
San Francisco London
Copyright ©2002 SYBEX, Inc., Alameda, CA www.sybex.com
Перевод: Игорь Шувалов aka Ronin

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

Типы ошибок

Ошибки, вызываемые компьютерной программой (не важно на каком языке она написана), могут быть разделены на три основных типа: Design-time (во время проектирования), Runtime (во время выполнения) и Logic (логические).
Design-time ошибки легче всего обнаружить и исправить. Такого рода ошибки возникают при написании кусков кода, которые не удовлетворяют правилам того языка, на котором они пишутся. Их легко найти, потому что Visual Studio .NET не только указывает на область их возникновения, но и на конкретное выражение.
Runtime ошибки обнаружить сложнее, потому что VS не дает никакой помощи в их обнаружении до непосредственного возникновения их в программе. Они возникают при попытке выполнить недопустимое действие, например, получить доступ к данным, которые не существуют, или к ресурсам, к которым приложение не имеет прав доступа. При возникновении такого рода ошибок, если они не будут обработаны должным образом, приложение может либо закончиться крахом, либо зависнуть.
Третий тип ошибки, логические, являются самыми коварными и сложными в обнаружении, т.к. они не оказывают никакого влияния на работоспособность приложения. Наличие в программе логических ошибок означает лишь то, что вы будете получать неверные результаты от работы программы. Это могут быть простейшие ошибки при неверной калькуляции, или пункт меню, который вы забыли установить в положение disabled и т.д.

Исключения

Runtime ошибки в Visual Basic .NET вызывают исключения. Исключение – это реакция на ошибку, сгенерированную приложением. При возникновении исключения появляется диалог, сообщающий об ошибке с дополнительной информацией. Этот диалог дает возможность пользователю продолжить выполнение программы. В редких случаях это может быть полезным, но чаще всего это не желательно. Продолжение выполнения программы может повлечь за собой неисправимые ошибки, например записи в базу данных неверных (ошибочных) данных.
Если мы не хотим, чтобы пользователь мог обрабатывали исключения, то мы можем сами легко обрабатывать их программно. Модель обработки ошибок в Visual Basic .NET позволяет сделать это очень легко. Обработчик ошибок в VB.NET – это блок кода, который может обнаружить исключения и выполнить необходимые действия для исправления этой ошибки. Вот примеры ошибок.

Этот код пытается отобразить одиннадцатый символ строки s. Как вы видете, строка s содержит только 6 символов, что и приведет к ошибке. Давайте посмотрим точное определение исключения:

Первое, что помогает нам убедиться в том, что это runtime ошибка – это слово unhandled. Это значит, что ошибка была в строке, не входящей в блок обработчика исключений. Еще один интересный момент, это тип вызванного исключения System.ArgumentOutOfRangeException. Очень важно знать то, что разные типы ошибок разделяются в группы. Это важно, когда вы реализуете механизм обработки ошибок. Исключения создают объект, наследуемый от класса Exception.
Блок “Additional information” («дополнительная информация»), дает нам некоторую специфическую информацию о природе возникновения ошибки.

Обработка исключений

Давайте приведем пример обработки ошибок на примере предыдущего кода:

Это тот-же код, но теперь выражение, вызывающее ошбку помещено в блок обработки исключений Try…Catch…End Try. Этот блок представляет собой простейший обработчик исключения. Если в блоке Try генерируется исключение, то программа автоматически переходит в блок Catch. Если никаких исключений не генерируется, то программа пропускает блок Catch. При выполнении этого кода, происходит исключение System.ArgumentOutOfRangeException, но программа продолжает выполняться и не показывает никаких сообщений. После выполнения свойство Text кнопки Button2 будет иметь значение «error».

В следующем примере, исключение генерирует обьект ex класса Exception.

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

Этот код пытается получить выбранный элемент из ListBox’a lbStates. Если в lbStates не выбрано ни одного элемента, то генерируется исключение System.NullReferenceException. Это исключение обрабатывается специальным обработчиком, который вызовет MsgBox с соответствующим сообщением («Please select an item first»). Если же произойдет исключение какого-либо другого типа, то оно будет обработано другим обработчиком.
Заметьте, что в предыдущем коде обработчик специфичного типа исключений стоит ранее обработчика общего типа. Это определяет порядок обработки исключений.
Также заметьте, что объект ex присутствует в каждом обработчике. Это становится возможным, потому, что это объявление несет локальный характер, и область видимости этого объекта ограничивается соответствующим блоком Catch.

Блок Finally

При использовании структуры обработки исключений Try…Catch…End Try исключение обрабатывается первым релевантным обработчиком. После этого программа уходит за рамки этой структуры. Иногда требуется выполнить какой-либо код, перед тема как выйти из структуры Try…Catch…End Try. Как, например, в следующем коде.

В этом коде читается файл и построчно загружается в ListBox. Если возникнет исключение в цикле, то мы не сможем закрыть Streamreader (вызвать s.Close()), что может повлеч к ненужной трате ресурсов.
К счастью, для этого существует специальный блок, код которого будет выполнен в любом случае. Этот блок называется Finally. Вот измененный код из предыдущего примера.

Теперь в любом случае Streamreader будет закрыт и ресурсы будут высвобождены.

Вызов исключений

При создании собственных классов, вы, вероятно, встретитесь с необходимостью вызова исключений. Это сделать очень просто – для этого существует ключевое слово Throw. Разработчик, использующий ваш класс, сможет обработать это исключение. Вот пример вызова (срабатывания) исключения.

Здесь вызывается исключение OverflowException с вашими комментариями.

Шаг 12 — Обработка ошибок VBA

Программирование это как хождение по минному полю. Неизвестно где взорвешься. Наверно так. Вы наслышаны о том, что Windows напичкан ошибками, о том, что среда разработки, любая при том — тоже. Мне попадались исследования на эту тему. Типа, что на каждые 1000строк кода одна ошибка, у хорошего программиста естественно :-). В общем, это закон такой. Все равно ошибешься где-нибудь. Проводя аналогию между женщиной и компьютером :-))) В общем понятно.

Для обработки ошибок в VBA и VB есть специальный оператор On Error. Его задача при возникновении ошибки передать управление в то место (процедура или кусок кода), в котором это ждут. Посмотрим пример:

On Error GoTo Errors1

Dim x As Integer

Dim a As Integer

Dim c As Double

MsgBox (» Этого не должно быть»)

MsgBox («Ну ты блин Тикурила Даещь»)

В данном примере при возникновении ошибки управление передается по метке Errors1 и дальше выполняется код. Я понимаю, что прерывать функцию из-за ошибки не всегда надо. И не только я так думаю, создатели VBA тоже так считали, и поэтому есть оператор Resume Next. Этот оператор реализует небезызвестный принцип — Ни шагу назад. Выполнение пойдет дальше, несмотря на ошибку.

On Error GoTo Errors1

Dim x As Integer

Dim a As Integer

Dim c As Double

MsgBox («Ну ты блин Тикурила Даещь»)

А вот, если Вы вообще не хотите ничего говорить по поводу ошибки, то можете поступить очень сурово. Вот так. Я рекомендую применять это для бухгалтерских расчетов. Ни кто и не догадается :-)))

On Error Resume Next

Dim x As Integer

Dim a As Integer

Dim c As Double

Над резюме можно немного поэкспериментировать, вот возможные описания:

Пример ниже будет упорно требовать, чтобы ввели число отличное от 0:

On Error GoTo Error1

Dim x As Integer

Dim a As Integer

Dim c As Double

a = Str(InputBox(«введите число»))

MsgBox («думай о программировании, а не о женщинах»)

a = Str(InputBox(«введите число»))

Шаг 13 — Объект Err

Да, странное совпадение, 13 шаг и зловещий обьект Err, от которого одни неприятности. Этот обьект хранит информацию о последней ошибке в результате выполнения того, что вы запрограммировали. Ну давайте попробуем.

On Error GoTo Error1

MsgBox «Error detected»

Итак, Number — это номер ошибки Source, где она появилась, а Description описание. В данном случае Вам скажут о выходе за гарницу массива. Вот это здорово. Особенно при создании программ. Получить такое сообщение пользователю не очень приятно, а вот программисту :-)) даже думать не надо.

У объекта Err есть метод очистки Clear, он все очишает. Вот в этом случае Вы не получите никаких сообщений. После обработки ошибки неплохо применить этот метод. Так, ради профилактики.

On Error GoTo Error1

MsgBox «Error detected»

Нельзя не сказать, что этот объект автоматически очистится после ..

При отладке или специально в программе вы и сами можете сгенирировать ошибку методом Raise, только надо знать, что ошибки до 1000 зарезервированы VBA, а максимальный код 65535. Любое правило подвержено изменениям и поэтому есть специальная константа, от которой вы можете сложением получать коды ошибок. Она называется vbObjectError.

Описание ошибок vb

Независимо от того, насколько тщательно разработана и отлажена программа, никогда нельзя полностью исключить возможность возникновения ошибок. Поэтому при написании устойчивых программ необходимо обрабатывать возникновение неисправимых ошибок. Команда, которая применяется для их перехвата в конкретной процедуре, выглядит следующим образом:

где три точки означают метку (номер строки), определяющую начало фрагмента обработки ошибки. Данный фрагмент должен размещаться в рамках этой же процедуры. Невозможно при помощи команды On Error GoTo перейти к другой процедуре. С другой стороны, фрагменты для перехвата ошибок часто используются в других процедурах или функциях.
Метка для оператора перехвата ошибки представляет собой любой идентификатор с последним символом в виде двоеточия, удовлетворяющий соглашению об именованиях переменных. Метка обозначает начало фрагмента программы, как показано ниже:

ErrorTrap:
‘программный код следует далее

Поскольку необходимо исключить возможность «вылета» из программы в процедуре обработки ошибок, неплохой идеей является использование оператора Exit в строке, непосредственно перед меткой фрагмента по перехвату ошибок.
Команда On Error GoTo может находиться в любом месте процедуры обработки события, функции или процедуры Sub. Обычно там же размещается и программный код для обработки ошибок. Единственным исключением является тот случаи, когда процедура вызывается в рамках другой процедуры. Тогда Visual Basic сначала проверяет наличие фрагмента по обработке ошибок сначала в текущей процедуре, а затем в «вышестоящей».
После того, как программист начинает пользоваться обработкой ошибок при помощи On Error GoTo, в его приложениях исчезают ошибки во время выполнения. (Но это не защищает от ошибок в операционной системе; в Windows 95 их немного меньше, чем в Windows 3-х.) В любом случае команда On Error GoTo должна передавать управление на участок кода, который идентифицирует проблему и, возможно, решает ее.
Если ошибку можно исправить, то оператор Resume используется для возврата к месту в программе, где она случилась. Однако невозможно исправить ошибку, не зная о вызвавшей ее причине. Это можно сделать, используя функцию Err и объект Err. Он представляет собой целое значение, которое можно присваивать переменной. Например, если написать

то значением переменной ErrorNumber будет номер ошибки.
Visual Basic может идентифицировать более 80 ошибок во время выполнения. (Информацию об этом необходимо искать в электронной документации в разделе «trappable errors»). Ниже приведено два примера.


Код ошибки Объяснение
57 Ошибка ввода вывода (например, попытка печати при выключеном принтере).
68 Устройство недоступно (устройство не существует или недоступно в данный момент).

Способ использования данной информации очень прост. Предположим, процедура обработки события использует принтер. Где-нибудь внутри процедуры перед оператором печати необходимо разместить строку

On Error GoTo PrinterCheck

Теперь перед оператором End Sub необходимо добавить следующий код:

Exit sub
PrinterCheck:
ErrorNumber = Err. Number
Beep
Select Case ErrorNumber
Case 25
MsgBox «Your printer may be off-line.»
Case 27
MsgBox «Is there a printer available?» Case Else
M$ = «Please tell the operator (= program author?) that»
M$ = M$ & vbCrLf ‘= Chr$(10) + Chr$(13) New Line
M$ = M$ & «error number » & ErrorNumber & » occurred.»
MsgBox M$
End
End Select
М$ = «If the error has been corrected click on OK.»
M$ = M$ & vbCrLf
M$ = M$ & «Otherwise click on Cancel.»
Continue = MsgBox(M$, vbOKCancel)
If Continue = vbOK Then Resume Else End

Идея данного обработчика ошибок очень проста, а оператор Select Case подходит в данном случае идеально. В каждом отдельном случае программа проверяет тип ошибки и предлагает возможные рекомендации по ее исправлению. Если достигнут оператор Case Else, то на экране появляется номер ошибки. В любом случае после цикла по обработке ошибок пользователю предлагается возможность выбора при помощи информационной панели с двумя кнопками. Возможно, понадобится написать общую процедуру для анализа ошибок. Тогда фрагмент по обработке ошибок в процедуре будет передавать управление выше. После этого такую процедуру можно использовать для перехвата и обработки ошибок во многих различных проектах.
Перехват ошибок не является панацеей. Например, трудно что-либо сделать, если возникает сбой жесткого диска или в принтере отсутствует бумага.
Вариант команды Resume позволяет пропустить оператор, в котором возникла ошибка. Если использовать

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

Илон Маск рекомендует:  CSS центрирование DIV блоков горизонтальное и вертикальное

On Error Resume Next

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

Обычно в Visual Basic метки применяются только для обозначения фрагментов по обработке ошибок. Несмотря на это, для совместимости с предыдущими версиями BASIC введен оператор безусловного перехода GoTo, но нужда в нем возникает очень редко.
Команды Resume и Resume Next ведут себя по-разному при возврате назад в том случае, когда ошибка произошла в другой процедуре. Вспомним, что такое имеет место, когда одна процедура вызывается из другой и в ней отсутствует фрагмент по обработке ошибок: В обоих случаях Visual Basic не переходит к исходной процедуре. В случае оператора Resume происходит повторный вызов процедуры. В случае Resume Next Visual Basic начинает выполнять программу с первого (после вызова процедуры) оператора. То есть не происходит возврата к исходной процедуре.
Предположим, что цепочка взаимосвязанных процедур удлинилась: Процедура1 вызывает Процедуру2, а та, в свою очередь, ФункциюЗ. Допустим, что ошибка происходит в момент выполнения ФункцииЗ, но обработчик ошибок есть только у Процедуры1. Если в данном фрагменте присутствует оператор Resume, то Visual Basic переходит к оператору, вызывающему Процедуру2. Поскольку такой подход на самом деле очень громоздкий, то лучше всегда полагаться только на обработчики ошибок, находящиеся в текущей процедуре. Если одна процедура вызывает другую, то у нее необходимо отключить фрагмент по обработке ошибок.
Существует еще одна функция для обработки ошибок, Erl (Error Line). Если программист отчаялся найти строку, в которой возникает ошибка, a Visual Basic не останавливается на данной строке, нужно проделать следующее:

  • Добавить номера строк перед каждым оператором в процедуре.
  • Добавить оператор Debug.Print Eri в фрагмент по обработке ошибок.

При разработке программ часто необходимо протестировать функционирование обработчика ошибок. Visual Basic включает в себя оператор

Error (номер кода ошибки)

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

On Error GoTo 0

(хотя значение 0 в общем-то не очень и необходимо). Похожим образом можно изменить ссылку на другой обработчик ошибок, используя другой оператор On Error GoTo. Необходимо убедиться, что между обработчиками ошибок присутствует оператор Exit. Visual Basic использует последний оператор On Error GoTo для того, чтобы решить, куда двигаться далее.

Подробнее о объекте Err

Для того чтобы обеспечить более централизованную обработку ошибок, когда это необходимо, Visual Basic использует специальный объект Err, свойства которого можно анализировать после возникновения ошибки. Ранее мы видели, как работает свойство Number (Err.Number), выдающее номер ошибки.

Примечание: Microsoft рекомендует использовать свойства и методы объекта Err вместо различного рода функций обработки ошибок, за исключением только программ, написанных для более ранних версий языка.

После того как выполняется оператор Resume или On Error, все свойства объекта Err сбрасываются в 0 или сводятся к строке «». Свойства данного объекта инициализируются и после выхода из функции или процедуры. Кроме того, для этого можно использовать оператор

Примечание: Правильным является создание централизованного обработчика ошибок. Однако данной процедуре необходимо передавать текущее значение различных свойств объекта Err. Если вызвать объект Err из новой процедуры, все его значения будут инициализированы.

Если необходимо генерировать ошибку для тестовых целей, можно использовать метод Raise объекта Err. Его синтаксис следующий:

Совет: Можно использовать метод Raise для определения собственных типов ошибок.

Если необходимо вывести описание текущей ошибки, используется оператор

Описание ошибок vb

9. ОБРАБОТКА ОШИБОК

Иногда при работе программы возникают ошибки, при появлении которых, программа заканчивает свою работу с выдачей соответствующего сообщения. При этом все несохраненные данные будут уничтожены. Ошибки возникают не только при неправильном программном коде, но и при временном отсутствии необходимых ресурсов (файлов и т.д.). Это создает неблагоприятную обстановку для работы пользователя. Поэтому было бы очень полезно внести в программный код соответствующие процедуры обработки ошибок, которые позволяют либо исправить ее, либо сохранить все промежуточные вычисления для их повторного использования.

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

· Физические – ошибки в написании операторов, имен процедур и функций. Команды с такими ошибками никогда не смогу выполниться, поэтому они всегда отслеживаются компилятором уже на этапе разработки приложения.

· Логические – ссылки не на те процедуры или функции, неправильные имена файлов, неправильная запись выражений и т.д. Команды с такими ошибками иногда могут быть выполненными, но приводят к неправильному результату. Ошибки в написании переменных также относятся к логическим, поскольку это расценивается как неявное объявление переменных.

В Visual Basic существуют необходимые команды для управления процедурами обработки логических ошибок (поскольку физические отслеживаются компилятором):

On Error GoTo line

On Error Resume Next

On Error GoTo 0

Команда « On Error GoTo line » при возникновении ошибки передаст управление команде, расположенной на строке с меткой « line ». Команда « On Error Resume Next » передает управление следующему оператору, идущему за оператором, вызвавшем ошибку (простое игнорирование ошибки). Третья команда запрещает (выключает) процедуры обработки ошибок.

Команды обработки ошибок распространяют свое действие только в пределах процедуры или функции. Для других блоков необходимо указать их заново.

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

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

  • Resume – попытка повторно выполнить команду, вызвавшую ошибку.
  • Resume Next – передача управления команде следующей за той, которая вызвала ошибку.
  • Resume line – передача управления команде, стоящей на строчке с меткой « line ».

Команда « On Error Resume Next » тоже игнорирует ошибку, но применяется только в том случае, если выдача сообщения об ошибке не требуется.

Пример использования процедур обработки ошибок приведен в следующем синтаксисе:

On Error GoTo Er1

MyString = “Произошла ошибка, выберете действие”

Er1: MyInt = MsgBox(MyString, vbAbortRetryIgnore,” Ошибка ”)

If MyInt = vbAbort Then Exit Sub

If MyInt = vbRetry Then Resume

If MyInt = vbIgnore Then Resume Next

При выборе команды «Прервать» выполнение процедуры завершится, в случае щелчка на кнопке «Повторить» — команда, вызвавшая ошибку, будет повторена, а при щелчке на «Пропустить» — выполнение процедуры продолжится со следующего оператора.

Контрольные вопросы для самопроверки

  1. Какие ошибки встречаются в приложениях?
  2. Какие команды задают обработку ошибок? Приведите примеры.
  3. Как можно обработать возникшую ошибку?
  4. В каких случаях, по-вашему, наиболее часто возникают ошибки, которые требуют соответствующей обработки.

Отладка программ и обработка ошибок в Visual Basic 6

Цель лабораторной работы:

— ознакомиться с возможностями Visual Basic 6 по отладке программ и обработке ошибок;

— приобрести практические навыки по отладке программ.

Основные сведения о средствах отладки и обработки ошибок

Отладка программ является обязательным этапом работы над любым проектом. Суть отладки программ заключается в проверке работы проекта и исправлении ошибок в проекте при разработке приложения.

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

— ошибки компиляции (синтаксические), возникающие при неправильном использовании синтаксиса инструкций, свойств и методов объектов. Эти ошибки выявляются на уровне компиляции и легко исправляются;

— ошибки выполнения, возникающие при выполнении программы. Причиной таких ошибок может быть отсутствие данных, неправильные данные, неготовность устройства и так далее. Для устранения возникновения этих ошибок целесообразно использовать имеющиеся в Visual Basic средства обработки ошибок;

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

Средства обнаружения и предупреждения возникновения синтаксических ошибок

Редактор кода представляет собой инструмент для создания и отладки приложения.

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

Редактор кода содержит набор средств позволяющих не только обнаружить синтаксические ошибки, но и предотвратить их возникновение.

К таким средствам относятся:


ü Auto Syntax Check — автоматическая проверка синтаксиса;

ü Auto Quick Info — контекстная подсказка. Это средство представляет собой небольшое окно, в котором автоматически отображается полный синтаксис вводимого оператора;

ü Auto List Members — автоматическое отображение списка имен, свойств и методов объектов. Содержимое списка зависит от типа объекта. Выбор элемента в списке выполняется мышью, или клавишами управления курсором. Если дважды щелкнуть по выбранному элементу, или нажать клавишу TAB, то выбранный элемент вставляется в текущую строку и курсор остается в той же строке. Если выбрать элемент и нажать Enter, то выбранный элемент вставляется в строку и курсор переходит на следующую строку;

ü цветовое выделение элементов кода для визуального контроля при наборе текста процедур. В окне команды Tools\Options на вкладке Editor Format Visual Basic позволяет задать параметры шрифта и цвета для таких элементов текста, как:

— текст окна кода (Normal Text),

— выделенный текст (Selection Text),

— текст ошибочной строки (Syntax Error Text),

— текст в точке выполнения (Execution Point Text),

— текст в точке останова (Breakpoint Text),

— комментарий (Comment Text),

— ключевое слово Basic (Keyword Text),

— имена процедур и переменных (Identifier Text),

— текст строки с закладкой (Bookmark Text) и текст обратного вызова (Call Return Text);

ü функция дополнения слова. Если введено несколько начальных символов свойства, метода или элемента структуры, достаточных для их однозначной идентификации, то нажатием кнопки (Complete Word) панели инструментов Edit или клавиш Ctrl+Space Visual Basic может автоматически дополнить недостающие символы;

Подключение или отключение средств Auto Syntax Check, Auto Quick Info и Auto List Members выполняется в окне команды Tools\Options на вкладке Editor.

Редактор кода может работать в двух режимах: режиме просмотра всего текста приложения и режиме просмотра процедур по отдельности. Кнопки включения режимов Full Module View (полный просмотр процедур) и Procedure View (просмотр процедур) находятся в левом нижнем угле окна редактора кода.

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

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

Обработка ошибок производится в три этапа:

ü Подготовка перехвата. Выполняется с помощью оператора On Error. Оператор On Error активизирует режим обработки ошибок. Это означает, что при возникновении ошибки выполнения программа не прерывается и стандартное сообщение об ошибке не выводится. Оператор On Errorосуществляет передачу управления на подпрограмму обработки ошибок, которая может выдавать сообщение и продолжать работу программы. Возможны три варианта синтаксиса оператора:

On Error GoTo метка — передача управления на подпрограмму, идентифицирующуюся меткой;
On Error Resume Next — ошибка игнорируется и управление передается следующему оператору за тем, при выполнении которого возникла ошибка;
On Error GoTo 0 — отключает предусмотренную пользователем процедуру обработки ошибок и включает стандартный механизм.

Для перехвата вхех возможных ошибок оператор On Errorдолжен находится в начале процедуры.

ü Проверка и устранение ошибки.Это этап обработки ошибки, на котором возникшая ошибка анализируется, и выполняются соответствующие действия. Установить тип оьибки можно с помощью объекта Err. Свойства объекта Errпозволяют получить следующую информацию о последней ошибке выполнения: свойствоNumber — номер возникшей ошибки;

свойствоSource — имя проекта, в котором возникла ошибка;

свойствоDescription — строка с описанием ошибки;

свойствоHelpFile — полное имя файла справки.

После того как обнаруженная ошибка обработана, в процедуре нужно предусмотреть очистку свойств объекта Err. Очищает значения вхех свойств объекта ErrметодClear.

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

ü Продолжение выполнения программы. Выполняется с помощью оператора Resume. Оператор Resume передает управление из обработчика ошибок в программу. Возможны следующие варианты синтаксиса оператора:

Resume [0] — повторное выполнение оператора, вызвавшего ошибку;
Resume Next — выполнение следующего оператора за тем, при выполнении которого возникла ошибка;
Resume метка — выполнение оператора, помеченного меткой.

Средства обнаружения логических ошибок

В Visual Basic для обнаружения логических кшибок имеются следующие средства отладки программ:

точка останова. Точка останова — это специальная инструкция в процедуре, на которой работа процедуры приостанавливается;

трассировкапроцедур. Трассировка — это пошаговое (пооператорное) выполнение процедуры, позволяющее контролировать правильность выполнения алгоритма процедуры;

отслеживание в диалоговых ккна Locals, Quick Watch и Watches значений переменных, выражений, свойств объектов, возможность изменения этих значений в окне Watches.

В Visual Basic имеется три режима работы с программой:

— режим работы с текстом программы в редакторе кода;

— режим выполнения, в котором текст программы не доступен для изменения, его можно только просматривать в окне редактора кода;

— режим прерывания (режим отладки), когда осуществляется приостановка работы программы. Режим позволяет просматривать значения переменных, продолжать или прекращать работу программы, вносить изменения в текст программы.

Кнопки команд, реализующих средства отладки расположены на панели инструментов Debug(отладка). Команды отладки доступны также из меню Debug. Кроме этого выполнить эти команды можно из контекстного меню вызванного в окне редактора кода.

Панель инструментов Debug:

Start/Ckntinue (Продолжить) Запускает программу или продолжает ее выполнение после прерывания
Break (Прервать) Вызывает прерывание программы в нужном месте
End (Сброс) Завершает выполнение программы
Togge Breakpoint (Точка останова) Устанавливает / удаляет в текущей строке точку останова
Step Into (Шаг с заходом) Осуществляет пошаговое выполнение процедуры с трассировкой вызываемых ею процедур
Step Over (Шаг с обходом) Осуществляет пошаговое выполнение процедуры без трассировки вызываемых ею процедур
Step Out (Шаг с выходом) Выполняет оставшуюся часть процедуры и останавливается на следующим после вызова процедуры операторе
Locals Window (Окно Locals) Открывает окно Locals(локальные) с текущими значениями вхех локальных переменных процедуры
Immediate Window (Окно Immediate) Открывает окноImmediate(непосредственное выполнение), в котором можно выполнить нужные операторы
Watch Window (Окно Watch) Открывает окноWatch(наблюдение), в котором можно просматривать текущие значения переменных, выражений
Quick Watch (Быстрый просмотр) Открывает окно Quick Watch для просмотра текущего значения выражения или переменной, в момент останова работы процедуры
Call Stack (Стек вызова) В режиме прерывания открывает диалоговое окно Call Stack со списком вхех выполняемых процедур

Точка останова.Точки останова устанавливаются в том случае когда:

— требуется остановить выполнения программы в нужном месте и проанализировать значение переменных;

— нужно выполнить трассировку фрагмента процедуры, для проверки работы алгоритма (устанавливается две точки в начало и конец фрагмента процедуры) и т.д.

Установить точку останова можно командой или указателем мыши, щелкнув по полосе индикатора. Полоса индикатора расположена слева от текста процедуры в окне редактора кода и выделена серым цветом. Для отображения полосы индикатора следует установить опцию Margin Indicator Bar на вкладке Editor Formatв окне командыTools\Optikns.

Установленные в среде разработки точки останова не сохраняются вместе с программой и не включаются в exe-файл при его создании.

Удаление точки останова осуществляется повторным выполнением командыTogge Breakpoint.Несколько точек останова модно удалить одновременно командой Clear All Breakpointsменю Debug.

Можно остановить выполнение программы в нужном месте, не используя точку останова. Для этого следует установить курсор в ту строку, до которой должна выполняться программа, и выбрать команду Run To Cursor меню Debug.

Трассировка процедур. Выполняется в режиме отладки программы и позволяет наблюдать за результатами выполнения каждой строки программы. Является важным средством поиска ошибок и отладки программ. Трассировку можно выполнить с помощью командStep Into, Step Over и Step Out. Друг от друга команды отличаются правилами работы с вызываемыми процедурами.

Если трассировка программы выполняется командой Step Into (шаг с заходом), то при выполнении оператора вызова процедуры (функции) осуществляется переход в процедуру (функцию) и последующее выполнение команды Step Into приводит к трассировке процедуры.

В отличие от команды Step Into, команда Step Over(шаг с обходом) выполняет вызов процедуры (функции) как единичный оператор, те есть без захода в процедуру (функцию).

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

Просмотр значений. Выполняется в режиме отладки и позволяет контролировать значения переменных и выражений в процессе выполнения программы. Visual Basic предоставляет для этого следующие средства:

Окно Data Tips. В окне Data Tips отображается значение той переменной, на которую установлен указатель мыши. Установить средство Auto Data Tips можно в окне команды Tools\Optikns на вкладке Editor.

Окно Quick Watch. В окне Quick Watch можно также просмотреть значение одной выбранной переменной (курсор должен находится на имени переменной). Из окна Quick Watch можно выполнить добавление переменной в окно просмотра Watches (кнопка Add). Окно Quick Watch открывается командой Quick Watch меню Debug или кнопкой (Quick Watch) на панели Debug.

Окно Watches. В окне Wanches отображаются контролируемые выражения и их значения. Окно Wanches открывается кнопкой Watch Window панели Debug или командой Watch Window меню View.

Добавить выражение в окно можно:

— из окна команды Quick Watch кнопкой Add;

— командой Add Watch меню Debug;

— перетаскиванием выражения из окна редактора кода в окно Wanches.

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

— Окно Locals. Это окно отображает вхе локальные переменные выполняемой процедуры и их значения в режиме отладки автоматически. Окно Locals открывается кнопкой Locals Window меню View.

Дата добавления: 2020-05-12 ; просмотров: 221 ; ЗАКАЗАТЬ РАБОТУ

Описание ошибок vb

Ошибками пользуются в любой нормально написанной программе,
вне зависимости от объема ее кода.


Это помогает проанализировать, правильно ли работает программа.
И если нет, минимальными усилиями узнать причину проблемы.

Для этого в идеале, в каждой из функций следует использовать обработчик ошибок ( On Error Goto ).
А там, где используются API-функции, каждую из них проверять на предмет возвращаемого значения, а также кода ошибки API-функции ( Err.LastDllError ).
Это позволит минимизировать затраты на отладку программы
и еще на этапе проектирования исключить некоторые наиболее вероятные ошибки в вызове функций.

Внутреннюю ошибку VB можно также симмитировать вручную с помощью вызова процедуры Err.Raise [Номер ошибки]
Это спровоцирует переход к метке обработчика ошибок, указанной в директиве On Error Goto Имя_Метки
Это иногда полезно, если Вы хотите ввести в программу собственные ошибки (выход из функции при возникновении, на Ваш взгляд, критической ситуации).

Номер внутренней ошибки также можно очистить методом Err.Clear
Обработчик ошибок в любой момент можно отключить, вернув стандартное поведение программы, с помощью директивы On Error Goto 0
В этом случае, если произойдет ошибка, программа прекратит свое выполнение и выведет ошибку и краткое описание в стандартном диалоговом окне (msgbox)*
* Кроме случаев, когда обработчик ошибок установлен в родительской функции (вниз по стеку вызовов), т.е. функции, которая вызвала эту функцию. В этом случае будет вызван именно её обработчик, а программа продолжит свое выполнение.

При возникновении внутренней ошибки, ее номер и описание можно получить через свойства Number и Description объекта Err .
Стандартный обработчик ошибок VB имеет такой вид:

Function foo ()
On Error Goto ErrorHandler

if < что - то можем проверить >then
‘ здесь, если нам нужно, можем вызвать ошибку самостоятельно
err .Raise 51 ‘Internal error
end if

Exit function
ErrorHandler:
‘обработчик
‘выводим номер внутренней ошибки, краткое описание, номер ошибки API-функции
Debug .? «Error: » & Err .Number & «. » & Err .Description & «. LastDllErr: » & Err .LastDllError
End function

Описание ошибки API-функции (или COM-объекта) можем получить с помощью такой функции:

Private Declare Function FormatMessage Lib «kernel32.dll» Alias «FormatMessageA» ( ByVal dwFlags As Long , lpSource As Long , ByVal dwMessage >As Long , ByVal dwLanguage >As Long , ByVal lpBuffer As String , ByVal nSize As Long , Arguments As Any ) As Long

Const MAX_PATH As Long = 260 &

Public Function MessageText ( lCode As Long ) As String
On Error goto ErrorHandler
Const FORMAT_MESSAGE_FROM_SYSTEM As Long = & H1000 &
Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = & H200

Dim sRtrnCode As String
Dim lRet As Long

sRtrnCode = Space$ ( MAX_PATH )
lRet = FormatMessage ( FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, ByVal 0 & , lCode, ByVal 0 & , sRtrnCode, MAX_PATH, ByVal 0 &)
If lRet > 0 Then
MessageText = Left$ ( sRtrnCode, lRet )
MessageText = Replace$ ( MessageText, vbCrLf, vbNullString )
End If
Exit function
ErrorHandler:
Debug .? «Error: » & Err .Number & «. » & Err .Description & «. LastDllErr: » & Err .LastDllError
End Function

Коды ошибок в Visual Basic

1. Ошибки, перехватываемые Visual Basic

Return without GoSub

Оператор Return без GoSub

Invalid procedure call

Неверный вызов процедуры

Subscript out of range

Индекс вне заданного диапазона

This array is fixed or temporarily locked

Этот массив имеет фиксированную длину или он временно заблокирован

Division by zero

Деление на ноль

Out of string space

Не хватает памяти для строки

Expression too complex

Выражение слишком сложное

Can’t perform requested operation

Невозможно выполнить требуемую операцию

User interrupt occurred

Произошло прерывание по команде пользователя

Resume without error

Оператор Resume применен за пределами кода, отвечающего за обработку ошибки

Out of stack space

В стеке не хватает памяти

Sub, Function or Property not defined

Процедура Sub, Function или Property не определена

Too many DLL application clients

Слишком много приложений обращаются к DLL

Error in loading DLL

Ошибка при загрузке DLL

Bad DLL calling convention

Неверный вызов DLL

Bad file name or number

Неверное имя или номер файла

Неверный тип доступа

File already open

Файл уже открыт

Device I/O error

Ошибка устройства ввода/вывода

File already exists

Файл уже существует

Bad record length

Неверный размер записи

Input past end of file

Чтение файла невозможно, т.к. достигнут его конец

Bad record number

Неверный номер записи

Слишком много файлов

Can’t rename with different drive

Нельзя переименовать файл со сменой носителя

Path/File access error

Ошибка доступа к каталогу/файлу


Каталог не найден

Object variable or With block variable not set

Переменная объекта или переменная блока With не задана

For loop not initialized

Цикл For не инициализирован

Invalid pattern string

Invalid use or Null

Неверное использование Null

Can’t call Friend procedure on an object that is not an instance of the defining class

Нельзя вызвать процедуру Friend , т.к. она не является экземпляром класса

A property or method call cannot include a reference to a private object, either as an argument or as a return value

Обращение к свойству или методу не может включать ссылку на локальный объект. Этот объект также не может быть аргументом или возвращаемым значением

No timer available

Ни один таймер не доступен

No foreign application responded to a DDE initiate

Ни одно внешнее приложение не ответило на инициативу DDE

Destination is busy

Data is wrong format

Неправильный формат данных

Invalid DDE Link format

Неверный формат данных в DDE-диалоге

PasteLink already performed on this control

PasteLink для этого элемента управления уже выполнен

Can’t set LinkMode; invalid LinkTopic

Нельзя установить LinkMode; неправильный LinkTopic

System DLL could not be loaded

Системная DLL (библиотека) не может быть загружена

Can’t use character device names in specified file names

Нельзя использовать имя устройства в определении имени файла

Invalid file format

Неверный формат файла

Can’t create necessary temporary file

Не могу создать необходимый временный файл

Invalid format in resource file

Неверный формат файла ресурсов

Data value named not found

Значение не найдено

Illegal parameter; can’t write arrays

Неверный параметр; не могу записать массив

Could not access system registry

Доступ к системному реестру невозможен

ActiveX component not correctly registered

Компонент ActiveX зарегистрирован неправильно

ActiveX component not found

Компонент ActiveX не найден

ActiveX component did not run correctly

Компонент ActiveX не может быть корректно выполнен

Control array element ‘item’ doesn’t exist

Элемент управления ‘имя’ не найден

Invalid control array index

Неверный индекс массива элементов управления

Not enough room to allocate control array ‘item’

Недостаточно памяти для создания элемента управления ‘имя’

Object not an array

Объект не является массивом

Must specify index for object array

Необходимо указать индекс массива

Reached limit: cannot create any more controls on this form

Достигнута верхняя граница: нельзя создать больше ни одного элемента управления в этой форме

Object already loaded

Объект уже загружен

Can’t load or unload this object

Невозможно загрузить или выгрузить данный объект

ActiveX control specified not found

Элемент управления ActiveX не найден

Object was unload


Объект был выгружен

Unable to unload within this context

Нет возможности в данном контексте произвести выгрузку

No MDI form available to load

Форма, не определенная как MDI, не может быть загружена

The specified file is out of date. This program requires a later version

Данный файл устарел. Эта программа требует более новой версии

The specified object can’t be used as an owner form for Show

Данный объект не может быть использован как родитель формы для ее показа

Invalid property value

Неверное значение свойства

Invalid property-array index

Неверный индекс массива свойств

Property Set can’t be executed at run time

Процедура установки свойства ( Property Set ) не может быть запущена во время выполнения программы

Property Set can’t be used with а read-only property

Процедура установки свойства (Property Set) не может быть использована для свойств, доступных только для чтения

Need property-array index

Для массива свойств надо указать индекс

Property Set not permitted

Процедура установки свойства (Property Set) не разрешена

Нажата неверная клавиша

Property Get can’t be executed at run time

Процедура чтения свойства (Property Get) не поддерживается во время выполнения программы

Property Get can’t be executed on write-only property

Процедура чтения свойства (Property Get) не может быть использована для свойств, доступных только для записи

‘Item’ property cannot be set within a page

Свойство ‘имя’ нельзя установить для страницы (объект Printer)

Form already displayed; can’t show modally

Форма уже отображена, ее нельзя отобразить как модальную

Can’t show non-modal form when modal form is displayed

Немодальную форму нельзя отобразить одновременно с модальной

Must close or hide topmost modal form first

Сначала необходимо закрыть верхнюю модальную форму

HDI forms cannot be shown modally

MDI-формы не могут быть отображены как модальные

MDI child forms cannot be shown modally

Дочерние MDI-формы не могут быть отображены модальными

Permission to use object denied

Использование объекта запрещено

Property not found

Свойство не найдено

Property or method not found

Свойство или метод не найдены

Invalid object use

Неверное использование объекта

Invalid object type; Menu control required

Неверный тип объекта; требуется элемент управления типа Menu

ActiveX component can’t create object or return reference to this object

Компонент ActiveX не может создать объект или возвратить ссылку на этот объект

Class doesn’t support Automation

Класс не поддерживает программирование объектов (Automation)

File name or class name not found during Automation operation

Имя файла или класса не найдено в процессе операции программирования объектов (Automation)

Object doesn’t support this property or method

Объект не поддерживает данное свойство или метод

Ошибка программирования объектов (Automation)

Connection to type library or object library for remote process has been lost

Связь с библиотекой типов или объектов для удаленного процесса была утеряна

Automation object doesn’t have a default value

Объект Automation не имеет значения по умолчанию

Method not applicable in this context

Метод в этом контексте недоступен

Object doesn’t support this action

Объект не поддерживает эту команду

Object doesn’t support named arguments


Объект не поддерживает указанные аргументы

Object doesn’t support current locale setting

Объект не поддерживает текущие национальные стандарты

Name argument not found

Именованный аргумент не найден

Argument not optional or invalid property assignment

Аргумент обязателен или неверное назначение свойства

Wrong number of arguments

Неправильное количество аргументов

Object not a collection

Объект не является коллекцией

Неверный порядковый номер

Specified DLL function not found

Указанная функция DLL не найдена

Code resource not found

Код ресурса не найден

This key is already associated with an element of this collection

Этот ключ уже ассоциирован с элементом этой коллекции

Variable uses a type not supported in Visual Basic

Переменная использует тип, не поддерживаемый Visual Basic

This component doesn’t support the set of events

Этот компонент не поддерживает установку событий

Invalid Clipboard format

Неверный формат Буфера обмена

Specified format doesn’t match format of data

Данный формат не совпадает с форматом данных

The remote server machine does not exist or is unavailable

Удаленная машина сервера не существует или недоступна

Class not registered on local machine

Класс не зарегистрирован на локальной машине

Can’t create AutoRedraw image

Нельзя создать автоматически восстанавливаемое изображение

Printer driver does not support specified property

Драйвер принтера не поддерживает указанное свойство

Problem getting printer information from the system. Make sure the printer is set up correctly

Проблема при чтении информации принтером из системы. Убедитесь, что принтер установлен правильно

Invalid picture type

Неверный тип рисунка

Can’t print form image to this type of printer

Нельзя распечатать изображение формы на принтере такого типа

Can’t empty Clipboard

Нельзя очистить буфер обмена

Can’t open Clipboard

Нельзя открыть буфер обмена

Can’t save file to TEMP directory

Нельзя сохранить файл в каталоге TEMP

Search text not found

Исходный текст не найден

Replacements too long

Слишком длинная замена

2. Ошибки использования элементов управления OLE

Не хватает памяти

Can’t open Clipboard

Нельзя открыть буфер обмена

Unable to close object

Невозможно закрыть объект

Invalid property value

Неверное значение свойства

Class is not set

Source Document is not set

Исходный документ не задан

Unable to create link

Нельзя создать связь

Source name is too long

Слишком длинное имя источника

Unable to activate object


Невозможно активизировать объект

Object not running

Объект не активизирован

Unable to create embedded object

Невозможно создать внедренный объект

Invalid Verb index

Неверный индекс Verb

Incorrect Clipboard format

Содержимое буфера обмена имеет неверный формат

Error saving to file

Ошибка при сохранении (записи) в файл

Error loading from file

Ошибка при загрузке (чтения) из файла

Unable to access source document

Доступ к исходному документу невозможен

3. Ошибки использования элементов управления
Windows (API)

This item’s control has been deleted

Элемент управления этого элемента удален

Control’s collection has been modified

Коллекция элемента управления изменена

This would introduce a cycle

Это действие ведет к зацикливанию

Maximum Panels Exceeded

Число панелей больше максимально допустимого значения

Maximum Buttons Exceeded

Число кнопок больше максимально допустимого значения

Circular object referencing is not allowed

Циклическая ссылка объектов недопустима

Internal state of the control has become corrupted

Ошибочное внутреннее состояние элемента управления

Error trying to stop playing video file

Ошибка при попытке прервать воспроизведение видеофайла

Error closing open video file

Ошибка при закрытии открытого AVI-файла

BuddyControl must be a separate control within the same container

Элемент управления, связанный со счетчиком, должен находиться в том же контейнере

An UpDown control cannot be bud died with another UpDown control

Счетчик не может быть связан ни с одним другим счетчиком

4. Ошибки ядра Microsoft Jet и Jet-выражений

Syntax error in number

Число содержит синтаксическую ошибку

Syntax error in date

Дата содержит синтаксическую ошибку

Syntax error in string

Строка содержит синтаксическую ошибку

Invalid use of ‘.’, ‘!’ or ‘( )’

Неверное использование ‘.’, ‘!’ или ‘( )’

Unknown function name

Неизвестное имя функции

Object has no value

Объект не имеет значения

Invalid arguments used with domain function

Неверные аргументы статистической функции по подмножеству

Syntax error(missing operator)

Синтаксическая ошибка (отсутствует оператор)

Wrong number of arguments used with function

Неверное число аргументов функции

Invalid use of parentheses

Неверное использование скобок

Invalid use of Is operator

Неверное использование оператора Is

Expression too complex

Слишком сложное выражение

Out of memory during calculation

Недостаточно памяти при вычислениях

Не удается задать значение


isn’t a valid database name

Имя базы данных не является допустимым именем базы данных

Database is exclusively locked

Для базы данных установлен монопольный доступ

Can’t open library database

Не удается открыть библиотечную базу данных

The Microsoft Jet database engine could not find the object . Make sure the object exists and that you spell its name and the path name correctly

Объект не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути

Object already exists

Объект уже существует

The size of a field is too long

Слишком большая длина поля

No current record

Текущая запись отсутствует

Couldn’t find file

Не удается найти файл

Can’t open any moor

Открытие дополнительных файлов невозможно

Can’t update. Database or object is read-only

Обновление невозможно. База данных или объект доступны только для чтения

Database has reached maximum size

Достигнут максимальный размер базы данных

Can’t open any more tables or queries

Открытие дополнительных таблиц или запросов невозможно

Out of MS-DOS file handles

Не хватает дескрипторов файлов MS-DOS

Disk or network error

Дисковая или сетевая ошибка

Couldn’t save; currently locked by another user

Сохранение невозможно; блокировка другим пользователем

Couldn’t repair this database

Не удается восстановить эту базу данных

Record(s) can’t be added; no insert permission or

Записи не могут быть добавлены; отсутствует разрешение на вставку данных для объекта

Record(s) can’t be edited; no update permission or

Записи не могут быть изменены; отсутствует разрешение на обновление данных для объекта

Record(s) can’t be deleted; no delete permission or

Записи не могут быть удалены; отсутствует разрешение на удаление данных для объекта

Couldn’t create; no modify design permission for table or query

Создание невозможно; отсутствует разрешение на изменение макета для таблицы или запроса

Can’t sort on Memo or OLE Object

Невозможна сортировка по полю Memo или объекта ActiveX в

Can’t join on Memo or OLE Object

Невозможно объединение с полем Memo или объекта ActiveX

ODBC – call failed

ODBC – ошибка вызова

ODBC – couldn’t find DLL

ODBC – не удается найти DLL

The Microsoft Jet database engine stopped the process because you and another user are attempting to change the same data at the same time

Процесс остановлен ядром базы данных Microsoft Jet, так как другой пользователь пытается одновременно изменить те же данные

Out-of-date Paradox lock file

Устаревший файл блокировок Paradox

ODBC – field would be too long; data truncated

ODBC – слишком большое поле; произошло усечение данных

ODBC – couldn’t create table

ODBC – создание таблицы невозможно

ODBC – data type not supported on server

ODBC – тип данных не поддерживается сервером

ODBC – data out of range

ODBC – данные выходят за пределы допустимого диапазона

Invalid database object reference

Неверная ссылка на объект Database

Crosstab query contains one or more invalid fixed column headings

Перекрестный запрос содержит один или несколько неверных заголовков столбцов

Invalid Memo or OLE Object in sub-query

Ошибочное поле Memo или поле объекта ActiveX в подчиненном запросе


Query is too complex

Слишком сложный запрос

Invalid field name in definition of index or relationship

Неверное имя поля при определении индекса или связи

Invalid entry. Can’t perform cascading operation in table because the value entered is too large for field

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

You cannot use ODBC to import from, export to, or link an external Microsoft Jet or ISAM database table to your database

Не допускается использование ODBC для импорта, экспорта или присоединения таблицы из внешней базы данных Microsoft Jet или базы данных ISAM

Can’t create database because the locale is invalid

Создание базы данных невозможно; неверная национальная настройка

Failure creating file

Ошибка при создании, файла

Failure to load DLL

Сбой при загрузке библиотеки

The Synchronizer is unable to open the Synchronizer log

Синхронизатору не удается открыть журнал

Failure writing to the Synchronizer log

Сбой при записи в журнал синхронизатора

Synchronizer could not find any messages to process

Синхронизатор не может найти сообщение для обработки

Failed to send a message

Сбой при отправке сообщения

Disk I/O error at destination dropbox folder

Ошибка ввода/вывода на диске для результирующего банка данных

Can’t open replication system table because the table is already in use

Невозможно открыть системную таблицу репликации , так как она уже используется

Insufficient memory to complete operation

Не хватает памяти для завершения операции

Syntax error in partial filter expression

Ошибка синтаксиса в выражении фильтра для таблицы в частичной реплике

Can’t create a relationship on linked ODBC tables

Не допускается создание связи между присоединенными таблицами ODBC

GUID not allowed in Find method criteria expression

Не допускается использование типа GUID в выражениях для условия поиска в методах Find

Can’t change password on a shared open database

Невозможно изменение пароля базы данных, открытой для общего доступа

Couldn’t read the record; currently locked by another user

Чтение невозможно. Блокировка другим сеансом на данной машине

Cannot use the crosstab of as a non-fixed column a subquery

Нельзя использовать составной или нефиксированный столбец в качестве вторичного запроса

Описание ошибок vb

Идёт загрузка страницы.

Навигатор
На форум
Софт
Программирование
Delphi
Visual Basic
Borland C++
Вебмастеру
HTML
PHP
Perl
ОС
Windows XP
Windows 98
Windows 2000

На главную страничку учебника Visual Basic

Описание ошибок VB5

Ниже представлена таблица всех ошибок VB5 (только без SQL и Jet ошибок) из раздела trappable errors, т.е. отлавливаемые ошибки.

Описание ошибок vb

Программирование это как хождение по минному полю. Неизвестно где взорвешься. Наверно так. Вы наслышаны о том, что Windows напичкан ошибками, о том что среда разработки любая при том — тоже. Мне попадались исследования на эту тему. Типа, что на каждые 1000 строк кода одна ошибка, у хорошего программиста естественно :-). В общем это закон такой. Все равно ошибешься где-нибудь. Проводя аналогию между женщиной и компьютером :-))) вообщем понятно.

Для обработки ошибок в VBA и VB есть специальный оператор On Error. Его задача при возникновении ошибки передать управление в то место( процедура или кусок кода), в котором это ждут. Посмотрим пример:

В данном примере при возникновении ошибки управление передается по метке Errors1 и дальше выполняется код. Я понимаю, что прерывать функцию из-за ошибки не всегда надо. И не только я так думаю, создатели VBA тоже так считали, и поэтому есть оператор Resume Next. Этот оператор реализует небезызвестный принцип — Ни шагу назад. Выполнение пойдет дальше, несмотря на ошибку.

А вот, если Вы вообще не хотите ничего говорить по поводу ошибки, то можете поступить очень сурово. Вот так. Я рекомендую применять это для бухгалтерских расчетов. Ни кто и не догадается :-)))

Над резюме можно немного поэкспериментировать, вот возможные описания:

Пример ниже будет упорно требовать, чтобы ввели число отличное от 0:

Иллюстрированный самоучитель по Visual Basic .NET

Проверка ошибок и обработка исключений

До настоящего момента мы делали вид, что в наших программах ошибок не бывает. Но даже в самой надежной программе иногда возникают непредвиденные ситуации – например, такие, как потеря сетевого соединения или отсутствие бумаги в принтере. Конечно, программист в этом не виноват, но винить пользователя в разрыве связи тоже было бы несправедливо. По крайней мере, в таких ситуациях программа не должна завершаться аварийно. Она должна:

  • сохранить информацию об ошибке или иным способом известить о ней пользователя;
  • предоставить пользователю возможность сохранить текущие результаты;
  • корректно завершить работу, если это возможно.

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

Примечание
Непредвиденные ситуации возникают и в хорошо написанных программах, но в плохо написанных программах они возникают чаще. Например, если данные не проверяются перед использованием, может возникнуть ошибка деления на 0 или переполнение контейнера, не рассчитанного на такой объем данных. Вы как программист обязаны проследить за тем, чтобы этого не случилось. Какую бы форму обработки ошибок вы ни избрали, она все равно не заменит проверки данных перед использованием!

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

Итак, в отличие от прежних версий VB в VB.NET поддерживается механизм структурной обработки исключений (или просто обработки исключений). В этой главе вы не только познакомитесь с синтаксисом обработки исключений в приложениях VB.NET, но и узнаете, какими преимуществами обладает этот механизм. В частности, при обработке исключений отпадает необходимость даже в более или менее оправданном применении GoTo, описанном в главе 3. Однако ничто хорошее не дается бесплатно, поэтому вы также должны помнить о некоторых тонкостях, связанных со структурной обработкой исключений.

Примечание
Читатели, привыкшие к синтаксису прежних версий VB, могут продолжать использовать старую конструкцию On Error. Но в новых программах это выглядит довольно глупо. Давно пора отказаться от архаичного способа обработки ошибок, появившегося на заре развития вычислительной техники! (Одновременное использование двух способов в одной процедуре не разрешается.)

Традиционный механизм обработки ошибок, использовавшийся в прежних версиях VB, а также в программировании СОМ и Windows, основан на проверке возвращаемого значения функции и выборе действий. Обычно для проверки возвращаемого значения в программе создается аналог конструкции Select Case, причем значения интерпретируются абсолютно произвольно. Например, в одном случае 0 означает успех, а в другом – неудачу.

А в приведенном ниже фрагменте кода VB6 коды выглядят и вовсе странно:

Подобные конструкции работают, но их трудно читать и еще труднее изменять в процессе сопровождения программы. Можно уверенно сказать, что эта схема таит в себе широкие возможности для ошибок программирования. Например, вы можете перепутать коды ошибок или забыть проверить некоторые из возвращаемых значений. Кроме того, писать один и тот же код проверки при каждом вызове функции Windows API, по крайней мере, утомительно. Хотя в некоторых ситуациях возвращаемое значение приходится проверять независимо от выбранной схемы обработки ошибок, не стоит превращать это в постоянную практику. Также следует учитывать фактор эффективности: структурная обработка исключений быстрее программируется, отнимает меньше времени при сопровождении, а нередко и выполняется быстрее!

Илон Маск рекомендует:  Всплывающее окно
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL