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

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Создание экранной формы)
(Создание экранной формы)
Строка 47: Строка 47:
 
## DetailField = USR$MASTER_KEY;
 
## DetailField = USR$MASTER_KEY;
 
# В событии OnCreate нашей формы пишем следующий обработчик:
 
# В событии OnCreate нашей формы пишем следующий обработчик:
 
+
<syntaxhighlight lang="vbnet">
 
   option explicit
 
   option explicit
 
   sub usrf_MASTER_DETAILOnCreate(ByVal Sender)
 
   sub usrf_MASTER_DETAILOnCreate(ByVal Sender)
Строка 65: Строка 65:
 
     Sender.gdcDetailObject.Open
 
     Sender.gdcDetailObject.Open
 
   end sub
 
   end sub
 
+
</syntaxhighlight>
Сохраняем и выходим из режима редактирования формы (F2).
+
  
 
Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц.
 
Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц.

Версия 13:16, 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

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

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

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