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

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Создание экранной формы)
Строка 69: Строка 69:
  
 
Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц.
 
Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц.
 +
 +
[[Category:Учебный курс]]
 +
[[Category:Документация]]

Версия 13:00, 19 августа 2011

Рассмотрим процесс создания 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 = USR$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))
   '*** конец кода поддержки встроенного обработчика            ***
   Sender.gdcObject.Open
   Sender.gdcDetailObject.Open
 end sub

Сохраняем и выходим из режима редактирования формы (F2).

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

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

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