Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические работы по РЭУБД.doc
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

1.9 Тема: Перехват исключительных ситуаций и обработка ошибок

1.9.1 Пр15 Использование процедур для обработки исключений

Цель: изучить процедуры для обработки исключений.

Обработчик исключений в приложении можно переопределить через Application.OnException. Этот обработчик вызывается приложением при исключении и имеет следующий тип:

type TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;

После установки обработчика Application.OnException обработку всех исключений можно представить диаграммой последовательности, приведенной на рис. 1.

Обработчик процедуры Assert. Обработка вызовов Assert производится переопределением указателя System.AssertErrorProc. Процедура обработчика должна иметь следующий синтаксис:

procedure AssertErrorHandler

(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);

Назначив этим обработчикам наши процедуры обработки, мы получим контроль над потоком исключений и вызовов Assert.

Использование компонента (назовем его TglExceptionHandler) можно проиллюстрировать несколькими примерами:

Пример 1 Вызов Assert будет обработан и сохранен в протокол,

т.к. TglExceptionHandler перехватывает вызовы Assert:

{$ASSERTIONS ON}

procedure LoadSettings(FileStream: TFileStream);

begin

assert(Assigned(FileStream), 'Потоковый объект должен быть создан ранее');

end;

Пример 2 Вызов Assert будет обработан и сохранен в протокол с текстом исключения и GUID:

try

x := StrToInt(sSomeStringParameter);

except

on E: Exception do Assert(Assigned(E), E.Message +

'{1CC90D41-B651-11D4-AAE3-000000000000}');

end;

Пример 3 Возобновление исключения напрямую через компонент.

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

eh: TglExceptionHandler;

...

try

ConvertDataToXML(); // некий вызов

except

on E: Exception do eh.Raise_(E, 'Ошибка вызова конвертера XML',

'{1CC90D41-B651-11D4-AAE3-000000000000}');

end;

end;

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

Пример использования:

... some code ...

EH: TglExceptionHandler;

... some code ...

try

Database.Connected := true; //...критический участок кода

except

on E:Exception do EH.Raise_(E, 'Не удается соединиться с сервером' + Database.DatabaseName,

'{013D4094-D745-11D4-BBFB-0080C86E0E20}')

end;

... some code ...

procedure YForm1.sbOkButton_Click(Sender: TObject);

try

... some code ...

Edit.Text := spSomeStoredProc.FlieldByName('поля с этим именем может и не быть!').AsString;

... some code ...

except

on E:Exception do EH.Raise_(E, '{013D4094-D745-11D4-BBFB-0080C86E0E67}')

end;

1.10 Тема: Формирование и вывод отчетов

1.10.1 Пр16 Создание и использование составляющих отчета

Цель: научиться создавать и использовать составляющие отчета.

Способы создания отчета

В Microsoft Access можно создавать отчеты различными способами:

1. Конструктор

2. Мастер отчетов

3. Автоотчет: в столбец

4. Автоотчет: ленточный

5. Мастер диаграмм

6. Почтовые наклейки

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

Для создания Автоотчета необходимо выполнить следующие действия:

1. В окне базы данных щелкнуть на вкладке Отчеты и затем щелкнуть на кнопке Создать. Появится диалоговое окно Новый отчет. 

2. Выделить в списке пункт Автоотчет: в столбец или Автоотчет: ленточный. 

3. В поле источника данных щелкнуть на стрелке и выбрать в качестве источника данных таблицу или запрос.

4. Щелкнуть на кнопке ОК. 

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

6. В меню Файл щелкнуть на команде Сохранить. В окне Сохранение в поле Имя отчета указать название отчета и щелкнуть на кнопке ОК. 

Изменение масштаба отображения отчета

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

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

Печать отчета

Для печати отчета необходимо выполнить следующее:

1. В меню Файл щелкнуть на команде Печать.

2. В области Печатать щелкнуть на варианте Страницы.

3. Чтобы напечатать только первую страницу отчета, введите 1 в поле «с» и 1 в поле «по».

4. Щелкнуть на кнопке ОК.

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

Если при печати в конце отчета появляется пустая страница, убедитесь, что параметр Высота для примечаний отчета имеет значение 0. Если при печати пусты промежуточные страницы отчета, убедитесь, что сумма значений ширины формы или отчета и ширины левого и правого полей не превышает ширину листа бумаги, указанную в диалоговом окне Параметры страницы (меню Файл).

При разработке макетов отчета руководствуйтесь следующей формулой: ширина отчета + левое поле + правое поле <= ширина бумаги.

Для того чтобы подогнать размер отчета, необходимо использовать следующие приемы:

1. изменить значение ширины отчета;

2. уменьшить ширину полей или изменить ориентацию страницы.