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

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
 
 
(не показаны 6 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
Рассмотрим процесс создания Master-Detail формы.
 
Рассмотрим процесс создания Master-Detail формы.
  
Есть две пользовательские таблицы, поле USR$MASTER_KEY таблицы USR$DETAIL
+
Есть две пользовательские таблицы: USR$MASTER и USR$DETAIL. Поле USR$MASTER_KEY таблицы USR$DETAIL является ссылкой (внешним ключем) на уникальный ID таблицы USR$MASTER. Ниже приведены два запроса, автоматически формируемых Гедымином, для извлечения данных из указанных таблиц:
 
+
<syntaxhighlight lang="SQL">
ссылка на уникальный ID таблицы USR$MASTER.
+
 
+
 
   SELECT  
 
   SELECT  
 
     Z.ID,  
 
     Z.ID,  
Строка 22: Строка 20:
 
       ON  
 
       ON  
 
         Z_USR$MASTER_KEY.ID  =  Z.USR$MASTER_KEY
 
         Z_USR$MASTER_KEY.ID  =  Z.USR$MASTER_KEY
 +
</syntaxhighlight>
  
 +
=== Создание экранной формы ===
  
Создаем Master-Detail форму: Меню "Сервис" - "Редактор форм":
+
Создаем Master-Detail форму. Для этого зайдем в меню "Сервис" и вызовем команду "Редактор форм". Далее укажем следующие параметры:
  
1. Тип формы: "Наследуемая форма";
+
# Тип формы: "Наследуемая форма";
 +
# Имя формы: usrf_MASTER_DETAIL;
 +
# Родительский класс формы: "Master-detail форма (гориз.)(Tgdc_frmMDH);
 +
# Класс объекта формы: TgdcAttrUserDefined;
 +
# Подтип класса: MASTER (пользовательская таблица USR$MASTER).
  
2. Имя формы: usrf_MASTER_DETAIL;
+
Добавляем в "Исследователь" команду вызова формы:
  
3. Родительский класс формы: "Master-detail форма (гориз.)(Tgdc_frmMDH);
+
# Исследователь - "Добавить";
 +
# Наименование: "Master-Detail форма", Форма: usrf_MASTER_DETAIL.
  
4. Класс объекта формы: TgdcAttrUserDefined;
+
Вызываем форму и входим в режим редактирования (Ctrl+Alt+E). На палитре компонентов выбираем вкладку "GDC" и добавляем на форму следующие компоненты:
 
+
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)
+
 
+
пишем следующий обработчик:
+
  
 +
# usrg_gdcAttrUserDefined1: [[TgdcAttrUserDefined]]. Для источника данных ([[TDataSource]]) dsMain указываем его как DataSet.
 +
# usrg_gdcAttrUserDefined2: TgdcAttrUserDefined. Для источника данных ([[TDataSource]]) dsDetail указывем его как DataSet.
 +
# В свойстве SubType первого компонента прописываем USR$MASTER, второго -- USR$DETAIL, соответственно.
 +
# На верхнюю и нижнюю панель добавляем по компоненту типа [[TgsIBGrid]], находятся на вкладке "БД компоненты", связываем их свойства DataSource c источниками dsMain и dsDetail соответственно.
 +
# В компоненте usrg_gdcAttrUserDefined2 указываем свойства:
 +
## MasterSource = dsMain;
 +
## MasterField = ID;
 +
## DetailField = MASTER_KEY;
 +
# В событии OnCreate нашей формы пишем следующий обработчик:
 +
<syntaxhighlight lang="vbnet">
 
   option explicit
 
   option explicit
 
   sub usrf_MASTER_DETAILOnCreate(ByVal Sender)
 
   sub usrf_MASTER_DETAILOnCreate(ByVal Sender)
Строка 89: Строка 57:
 
     Sender.gdcObject = _
 
     Sender.gdcObject = _
 
       Sender.GetComponent("usrg_gdcAttrUserDefined1")
 
       Sender.GetComponent("usrg_gdcAttrUserDefined1")
  '*** Данный код необходим для вызова встроенного обработчика ***
+
 
  '*** В случае его удаления возможно нарушение работы системы ***
+
    '*** Данный код необходим для вызова встроенного обработчика ***
 +
    '*** В случае его удаления возможно нарушение работы системы ***
 
     call  Inherited(Sender, "OnCreate", Array(Sender))
 
     call  Inherited(Sender, "OnCreate", Array(Sender))
  '*** конец кода поддержки встроенного обработчика            ***
+
    '*** конец кода поддержки встроенного обработчика            ***
    Sender.gdcObject.Open
+
    Sender.gdcDetailObject.Open
+
 
   end sub
 
   end sub
 +
</syntaxhighlight>
  
Сохраняем и выходим из редактирования формы (F2).
+
Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц.
 
+
Открываем нашу "Master-Detail форма" в "Исследователе",
+
  
видим Master-Detail связку таблиц.
+
[[Category:Учебный курс]]
 +
[[Category:Документация]]

Текущая версия на 18:28, 1 июля 2016

Рассмотрим процесс создания 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 связку таблиц.

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

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