Создание Master-Detail формы
Рассмотрим процесс создания Master-Detail формы.
Есть две пользовательские таблицы, поле USR$MASTER_KEY таблицы USR$DETAIL
ссылка на уникальный ID таблицы USR$MASTER.
SELECT Z.ID, Z.USR$NAME FROM USR$MASTER Z
SELECT
Z.ID,
Z.USR$NAME,
Z.USR$MASTER_KEY,
Z_USR$MASTER_KEY.USR$NAME AS Z_USR$MASTER_KEY_USR$NAME
FROM
USR$DETAIL Z
LEFT JOIN
USR$MASTER Z_USR$MASTER_KEY
ON
Z_USR$MASTER_KEY.ID = Z.USR$MASTER_KEY
Создаем Master-Detail форму: Меню "Сервис" - "Редактор форм":
1. Тип формы: "Наследуемая форма";
2. Имя формы: usrf_MASTER_DETAIL;
3. Родительский класс формы: "Master-detail форма (гориз.)(Tgdc_frmMDH);
4. Класс объекта формы: TgdcAttrUserDefined;
5. Подтип класса: MASTER (пользовательская таблица USR$MASTER).
Делаем вызов формы в "Исследователе":
1. Исследователь - "Добавить";
2. Наименование: "Master-Detail форма", Форма: usrf_MASTER_DETAIL.
Вызываем форму, входим в режим редактирования: Ctrl+Alt+E.
Палитра компонентов, закладка "GDC", добавляем на форму:
1. usrg_gdcAttrUserDefined1: TgdcAttrUserDefined
(для dsMain: TDataSource - указываем его как DataSet);
2. usrg_gdcAttrUserDefined2: TgdcAttrUserDefined
(для dsDetail: TDataSource - указывем его как DataSet);
В свойстве SubType первого компонента указываем USR$MASTER,
второго USR$DETAIL соответственно.
На верхнюю и нижнюю панель добавляем 2 компонента TgsIBGrid,
закладка "БД компоненты", связываем их свойства DataSource
c dsMain и dsDetail соответственно.
В компоненте usrg_gdcAttrUserDefined2: TgdcAttrUserDefined указываем свойства:
MasterSource: dsMain;
MasterField: ID;
DetailField: MASTER_KEY;
В событии OnCreate нашей формы (usrf_MASTER_DETAIL: Tgdc_frmMDH)
пишем следующий обработчик:
option explicit
sub usrf_MASTER_DETAILOnCreate(ByVal Sender)
Sender.gdcDetailObject = _
Sender.GetComponent("usrg_gdcAttrUserDefined2")
Sender.gdcDetailObject.ExtraConditions.Add(_
"z.USR$MASTER_KEY = :MASTER_KEY")
Sender.gdcObject = _
Sender.GetComponent("usrg_gdcAttrUserDefined1")
'*** Данный код необходим для вызова встроенного обработчика ***
'*** В случае его удаления возможно нарушение работы системы ***
call Inherited(Sender, "OnCreate", Array(Sender))
'*** конец кода поддержки встроенного обработчика ***
Sender.gdcObject.Open
Sender.gdcDetailObject.Open
end sub
Сохраняем и выходим из редактирования формы (F2).
Открываем нашу "Master-Detail форма" в "Исследователе",
видим Master-Detail связку таблиц.