Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Горев “Эффективная работа с СУБД”.pdf
Скачиваний:
208
Добавлен:
28.06.2014
Размер:
4.71 Mб
Скачать

converted to PDF by HupBaH9I

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

Счетчик строк в программе учитывает все строки, включая комментарии и пустые строки. Вы всегда можете задать приостановку выполнения программы, если откроете окно Debug на время выполнения программы и в его левой части запишете, например, LINENO(1) = 100. После этого не забудьте на разделительной линии окна Debug поставить точку останова.

MESSAGE([1])

Возвpащает сообщение об ошибке, с помощью опции 1 можно вывести последнюю пpогpаммную стpоку, пpи выполнении котоpой пpоизошла ошибка. Для pаботы функции необходимо установить ON ERROR.

PROGRAM([nLevel])

Возвpащает название пpогpаммы, во вpемя pаботы котоpой пpоизошла ошибка. Численный аpгумент опpеделяет уpовень вложенности пpогpамм, чьи имена необходимо запомнить, если nLevel = 1, то возвpащается имя только пеpвой исполнявшейся пpогpаммы (главной), если аpгумент не указан, возвpащается имя текущей пpогpаммы.

Работу описанных выше функций можно пpоиллюстpиpовать следующим пpостым пpимеpом:

ON ERROR DO proc_error WITH; ERROR(),MESSAGE(),MESSAGE(1),PROGRAM(),LINENO()

. . .

RETURN

PROCEDURE proc_error

LPARAMETER nError, cMess, cMess1, cProg, nLineno

?"Hомер ошибки: " + LTRIM(STR(nError))

?"Сообщение об ошибке: " + cMess

?"Текст строки, вызвавшей ошибку: " + cMess1

?"Hомер строки с ошибкой: " + LTRIM(STR(nLineno))

?"Ошибка пpоизошла в пpогpамме: " + cProg

RETURN

Отладка программы в Access

Четыре из наиболее часто используемых функций отладки доступны через панель инструментов Access. Их описание приведено в табл. 12.1. На рис. 12.4 представлена панель инструментов для выполнения отладки и приведено описание ее кнопок.

Рис. 12.4. Наиболее часто используемые функции отладки в Access Таблица 12.1. Инструментальные функции отладки в Access

Кнопка

Выполняемое

Соответствующая

отладки

действие

горячая клавиша

 

 

converted to PDF by HupBaH9I

Установка

Создает или

F9

точки

уничтожает точку

 

останова

останова. Точка

 

 

останова

 

Шаг с

В окне просмотра

F8

заходом в

кода при вызове

 

процедуру

другой процедуры

 

 

вы видите ее код

 

Шаг без

В окне просмотра

Shift+8

захода в

кода при вызове

 

процедуру

другой процедуры

 

 

вы не видите ее

 

 

кода

 

Сброс

Прекращает работу

-

 

процедуры

 

Состояние прерывания приостанавливает работу программы и дает вам картину состояния на текущий момент исполнения программы.

СУБД Access попадает в состояние прерывания, когда происходит одно из следующих событий:

Программа достигает строчки с точкой останова.

Исполняемый код достигает строчки с выражением Stop.

Выражение в строке кода генерирует неперехватываемую ошибку.

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

Всостоянии прерывания значения переменных и свойств сохраняются, таким образом, вы можете:

просматривать значения переменных, свойств и выражений;

изменять значения переменных и свойств.

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

повлияют на работу вашего кода.

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

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

converted to PDF by HupBaH9I

Рис. 12.5.

Внутри вашего кода вы можете использовать метод Print объекта Debug, для того чтобы послать вывод в окно отладки. Этот способ позволяет вам создать историю значений переменной или свойства в процессе выполнения в окне отладки. Когда приложение приостановится или закончит свою работу, вы сможете увидеть напечатанные значения. Например, следующее значение выведет в окно отладки значение переменной myvar:

Debug.Print "Значение переменной равно =" & myvar

Эта техника хорошо помогает, когда имеется место в программе, где переменная (в нашем случае myvar) изменяется. Например, вы можете использовать выражение, которое меняет значение переменной vyvar, в цикле.

Вы можете работать с диалоговым окном Вызовы (Calls), приведенном на рис. 12.6, для исследования последовательности действий приложения в случаях, если оно состоит из цепочки вложенных вызовов процедур.

Рис. 12.6. Диалоговое окно Вызовы

Для того чтобы вызвать диалоговое окно Вызовы, необходимо:

Приостановить выполнения кода. Вы можете вывести диалоговое окно Вызовы, только когда выполнение кода приостановлено.

Щелкнуть на кнопке Вызовы в панели инструментов.

Например, процедура события может вызвать вторую процедуру, которая, в свою очередь, вызывает третью - и все это до того, как процедура события, вызвавшая эту цепочку, завершилась.

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

converted to PDF by HupBaH9I

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

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

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

Вэто время вы можете:

Остановить выполнение программы.

Продолжить выполнение, если вы разрешите проблемы в окне отладки.

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

Перейти прямо к строчке, которая вызвала ошибку.

Вызвать Справку по данной ошибке.

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

При этом:

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

Если приложению все же не удается обработать сложившуюся ошибочную ситуацию,

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

Большая часть обработчиков ошибок имеет общую схему. Когда Access сталкивается с ошибкой времени выполнения, он ищет выражение On Error Goto <<выражение>>. Если он его находит, ошибка обрабатывается и выполнение продолжается либо с того же выражения, на котором оно остановилось, либо с какого-нибудь другого.

Если Access не может найти выражение On Error Goto, выполнение процедуры приостанавливается и Access выводит сообщение об ошибке времени выполнения, которое может в какой-то степени удивить ваших пользователей.

Существует восемь стандартных функций и выражений для перехвата ошибок. Их описание приведено в табл. 12.2.

Таблица 12.2. Основные программные функции отладки в Access

Выражение

Описание

или функция

 

On Error Goto

Подключает обработчик ошибок и

 

указывает расположение обработчика

 

внутри процедуры. Может также

 

использоваться для отключения

 

обработчика ошибок

Err

Устанавливает свойство Err в

(Выражение)

указанное значение

Err (Функция)

Возвращает статус ошибки

Error

Воспроизводит ошибку

(Выражение)

 

Error

Возвращает сообщение об ошибке,

(Функция)

соответствующее указанному номеру

Resume

Продолжает выполнение с

 

выражения, которое вызвало ошибку,

 

после того как обработчик ошибок

Соседние файлы в предмете Программирование на Delphi