Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все лабы по рубд на ibexpert.doc
Скачиваний:
13
Добавлен:
13.08.2019
Размер:
905.22 Кб
Скачать

Лабораторная №10 Обеспечение достоверности данных, исключительные ситуации.

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

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

Исключение создают командой Database->New Exception:

Примечание Длина сообщения не должна превышать 78 символов.

Для генерации исключения в процедуре или триггере используют команду: EXCEPTION ИмяИсключения, например:

В данном примере, при запуске процедуры с неположительным числом будет выведено исключение:

Когда исключение сгенерировано:

  • завершается процедура (триггер), в которой оно было возбуждено, и отменяются все действия, которые были ею выполнены непосредственно или косвенно;

  • возвращается сообщение об ошибке в вызывающее приложение;

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

При использовании процедур на обновление данных одной записи таблицы требуется знать код этой записи (для задания условия поиска в update … set … = … where [условие]), который можно передавать как параметр этой процедуры, например:

create procedure UPDATE_RN (sel_id char(20), n_rn numeric(6,2))

as

begin

if (:n_rn <= 0) then

exception impossible_rn;

else

update rent

set rn = :n_rn

where TYP = :sel_id;

end

где sel_id – это код изменяемой записи, а n_rn – новое значение для записи.

В Delphi-приложении запустить процедуру и задать эти параметры можно следующим способом (используя компонент TIBStoredProc):

try

IBStoredProc1.StoredProcName := 'UPDATE_RN'; // имя процедуры

IBStoredProc1.ParamByName('SEL_ID').AsString :=

TRENT.Fields.Fields[0].AsString; // ключевое поле (индекс может быть другим)

IBStoredProc1.ParamByName('N_RN').AsInteger :=

StrToInt(Edit1.Text); // новое значение (например, вводится через TEdit)

IBStoredProc1.Prepare; // подготовка процедуры к запуску

IBStoredProc1.ExecProc; // запуск процедуры

finally

// здесь можно прописать код для неудачного запуска процедуры или возникновения исключения

end;

TRENT.Refresh;

Для перехвата исключительной ситуации код следует поместить в блок try..finally.

Лабораторная №11 Работа с отчетами.

Цель работы: научится форматировать отчеты.

Для создания простого отчета в формате txt можно использовать класс TStringList для формирования и сохранения отчета в файл. Для работы с этим классом сначала его нужно создать, а при завершении работы с ним - удалить из памяти, далее пример:

var

S : TStringList;

begin

S := TStringList.Create; // создание экземпляра класса

S.Free; // уничтожение экземпляра класса

end;

Для формирования отчета будем проходить по всем записям таблиц и выводить их в удобочитаемом формате в отчет (сначала в S : TStringList, затем из него в файл report.txt).

procedure TForm1.Button4Click(Sender: TObject);

var

s : TStringList;

begin

s := TStringList.Create;

// таблица OWNER

TOWNER.First;

while not TOWNER.Eof do

begin

s.Add(TOWNER.Fields.Fields[0].AsString + ' ' +

TOWNER.Fields.Fields[1].AsString + ' ' +

TOWNER.Fields.Fields[2].AsString);

// таблица LEASE

TLEASE.First;

while not TLEASE.Eof do

begin

s.Add (#9+TLEASE.Fields.Fields[0].AsString + ' ' +

TLEASE.Fields.Fields[1].AsString + ' ' +

TLEASE.Fields.Fields[2].AsString + ' ' +

TLEASE.Fields.Fields[4].AsString + ' ' +

TLEASE.Fields.Fields[5].AsString );

// таблица REALTY

TREALTY.First;

while not TREALTY.Eof do

begin

s.Add (#9#9+TREALTY.Fields.Fields[1].AsString);

// таблица RENT

TRENT.First;

while not TRENT.Eof do

begin

s.Add(#9#9#9+TRENT.Fields.Fields[1].AsString);

TRENT.Next;

end;

s.Add(#13#10);

TREALTY.Next;

end;

s.Add(#13#10);

TLEASE.Next;

end;

s.Add('----------------------------------------------------');

TOWNER.Next;

end;

// сохранение сформированного отчета в файл

s.SaveToFile('report.txt');

s.Free;

end;