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

Механизм master-detail

Для нашего примера механизм master-detail используется следующим образом: в сетке DBGridMovie отображаются записи только того продюсера, запись которого является текущей в таблице Prod.

Свойство IBDataSetMovie.DataSource задается равным DataSourceProd, а свойство IBDataSetMovie.SelectSQL — 'SELECT * FROM MOVIE WHERE ID_PR = :ID_PR'. Значение параметра :ID_PR будет автоматически браться из одноименного поля ID_PR IBDatasetProd.

Кроме того, необходимо открывать IBDataSetMovie и IBDataSetProd в режиме rum-time, например:

procedure TForm1.FormCreate(Sender: TObject); begin IBDatasetProd.Open; // IBDatasetProd.Active:=True; IBDatasetMovie.Open; // IBDatasetMovie.Active:=True; end;

Эта процедура приведет к ошибке, если в design-time не установить предварительно свойства Active в False, либо открывать компоненты способом, приведенным в комментарии.

Чтобы включать/выключать режим master-detail в режиме run-time можно организовать CheckBox. По которому надо IBDataSetMovie.SelectSQL присвоить соответствующий текст и переоткрыть IBDataSetMovie.

Ведение журнала

С точки зрения безопасности небесполезной может оказаться информация о действиях пользователей над данными: кто и когда совершил то или иное действие над каким-либо объектом. Такого рода информацию приходится записывать в специальные таблицы при помощи трех триггеров AFTER INSERT, AFTER UPDATE и AFTER DELETE, используя системные переменные current_timestamp и current_user.

В нашем примере будет фиксироваться только время, пользователь и выполняемое им действие:

CREATE TABLE LOG ( "WHEN" TIMESTAMP, "USER" VARCHAR(20), "ACTION" CHAR(3) );

Триггеры для таблицы MOVIE:

CREATE TRIGGER TR_FOR_MOVIE_AI ACTIVE AFTER INSERT POSITION 0 AS BEGIN INSERT INTO "Log" VALUES (current_timestamp, current_user, 'INS'); END;

CREATE TRIGGER TR_FOR_MOVIE_AU ACTIVE AFTER UPDATE POSITION 0 AS BEGIN INSERT INTO "Log" VALUES (current_timestamp, current_user, 'UPD'); END;

CREATE TRIGGER TR_FOR_MOVIE_AD ACTIVE AFTER DELETE POSITION 0 AS BEGIN INSERT INTO "Log" VALUES (current_timestamp, current_user, 'DEL'); END;

Указания по выполнению:

  1. Создать инфологическую модель выбранной предметной области.

  2. Создать базу данных

  3. Создать таблицы . Требования:

  • таблицы должны содержать ограничения /CONSTRAINT/ и значения по умолчанию);

  • продемонстрировать использование доменов, даже если это и нецелесообразно;

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

  • создать необходимые индексы.

  1. Создать генераторы и триггеры для реализации автоинкремента и триггеры для обеспечения бизнес-правил.

  2. Создать хранимые процедуры действия и выборки.

  3. Написать исключения и их обработчики.

  4. Создать User Defined Functions.

  5. Организовать журнал (log-таблицу) для одной любой таблицы БД. Помимо произведенного действия, времени и пользователя, журнал должен содержать сведения о подробностях изменений: какой столбец изменился, старое и новое значение столбца.

  6. Создать приложение-клиент используя технологию Interbase Express. Требования:

  • приложение должно отражать работу со всеми созданными объектами БД;

  • продемонстрировать динамический режим включения механизма master-detail;

  1. Подключиться к БД как к находящейся на сервере.

  2. Оформить отчет по лабораторной работе.

  • скрипты по созданию всех используемых в БД объектов.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]