Создание Master-Detail формы
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (→Создание экранной формы) |
SYSDBA (обсуждение | вклад) |
||
| (не показаны 2 промежуточные версии 1 участника) | |||
| Строка 1: | Строка 1: | ||
Рассмотрим процесс создания Master-Detail формы. | Рассмотрим процесс создания Master-Detail формы. | ||
| − | Есть две пользовательские таблицы: USR$MASTER и USR$DETAIL. Поле USR$MASTER_KEY таблицы USR$DETAIL является ссылкой на уникальный ID таблицы USR$MASTER. Ниже приведены два запроса для извлечения данных из указанных таблиц: | + | Есть две пользовательские таблицы: USR$MASTER и USR$DETAIL. Поле USR$MASTER_KEY таблицы USR$DETAIL является ссылкой (внешним ключем) на уникальный ID таблицы USR$MASTER. Ниже приведены два запроса, автоматически формируемых Гедымином, для извлечения данных из указанных таблиц: |
| − | + | <syntaxhighlight lang="SQL"> | |
SELECT | SELECT | ||
Z.ID, | Z.ID, | ||
| Строка 20: | Строка 20: | ||
ON | ON | ||
Z_USR$MASTER_KEY.ID = Z.USR$MASTER_KEY | Z_USR$MASTER_KEY.ID = Z.USR$MASTER_KEY | ||
| + | </syntaxhighlight> | ||
=== Создание экранной формы === | === Создание экранной формы === | ||
| Строка 45: | Строка 46: | ||
## MasterSource = dsMain; | ## MasterSource = dsMain; | ||
## MasterField = ID; | ## MasterField = ID; | ||
| − | ## DetailField = | + | ## DetailField = MASTER_KEY; |
# В событии OnCreate нашей формы пишем следующий обработчик: | # В событии OnCreate нашей формы пишем следующий обработчик: | ||
<syntaxhighlight lang="vbnet"> | <syntaxhighlight lang="vbnet"> | ||
| Строка 61: | Строка 62: | ||
call Inherited(Sender, "OnCreate", Array(Sender)) | call Inherited(Sender, "OnCreate", Array(Sender)) | ||
'*** конец кода поддержки встроенного обработчика *** | '*** конец кода поддержки встроенного обработчика *** | ||
| − | |||
| − | |||
| − | |||
end sub | end sub | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Текущая версия на 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 форму. Для этого зайдем в меню "Сервис" и вызовем команду "Редактор форм". Далее укажем следующие параметры:
- Тип формы: "Наследуемая форма";
- Имя формы: usrf_MASTER_DETAIL;
- Родительский класс формы: "Master-detail форма (гориз.)(Tgdc_frmMDH);
- Класс объекта формы: TgdcAttrUserDefined;
- Подтип класса: MASTER (пользовательская таблица USR$MASTER).
Добавляем в "Исследователь" команду вызова формы:
- Исследователь - "Добавить";
- Наименование: "Master-Detail форма", Форма: usrf_MASTER_DETAIL.
Вызываем форму и входим в режим редактирования (Ctrl+Alt+E). На палитре компонентов выбираем вкладку "GDC" и добавляем на форму следующие компоненты:
- 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 нашей формы пишем следующий обработчик:
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 связку таблиц.