Описание ошибок 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 начинает обрабатывать оператор, находящийся непосредственно после текущего. Можно даже использовать
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
При выборе команды «Прервать» выполнение процедуры завершится, в случае щелчка на кнопке «Повторить» — команда, вызвавшая ошибку, будет повторена, а при щелчке на «Пропустить» — выполнение процедуры продолжится со следующего оператора.
Контрольные вопросы для самопроверки
- Какие ошибки встречаются в приложениях?
- Какие команды задают обработку ошибок? Приведите примеры.
- Как можно обработать возникшую ошибку?
- В каких случаях, по-вашему, наиболее часто возникают ошибки, которые требуют соответствующей обработки.
Отладка программ и обработка ошибок в 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++ |
1С |
Вебмастеру |
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, по крайней мере, утомительно. Хотя в некоторых ситуациях возвращаемое значение приходится проверять независимо от выбранной схемы обработки ошибок, не стоит превращать это в постоянную практику. Также следует учитывать фактор эффективности: структурная обработка исключений быстрее программируется, отнимает меньше времени при сопровождении, а нередко и выполняется быстрее!