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

Материал из GedeminWiki
Версия от 06:46, 3 августа 2007; Kaa (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

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

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