Создание Master-Detail формы

Материал из GedeminWiki
Перейти к: навигация, поиск

Рассмотрим процесс создания Master-Detail формы.

Есть две пользовательские таблицы: USR$MASTER и USR$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. Для источника данных (TDataSource) dsMain указываем его как DataSet.
  2. usrg_gdcAttrUserDefined2: TgdcAttrUserDefined. Для источника данных (TDataSource) dsDetail указывем его как DataSet.
  3. В свойстве SubType первого компонента прописываем USR$MASTER, второго -- USR$DETAIL, соответственно.
  4. На верхнюю и нижнюю панель добавляем по компоненту типа TgsIBGrid, находятся на вкладке "БД компоненты", связываем их свойства DataSource c источниками dsMain и dsDetail соответственно.
  5. В компоненте usrg_gdcAttrUserDefined2 указываем свойства:
    1. MasterSource = dsMain;
    2. MasterField = ID;
    3. DetailField = MASTER_KEY;
  6. В событии OnCreate нашей формы пишем следующий обработчик:
  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))
    '*** конец кода поддержки встроенного обработчика            ***
  end sub

Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты