Создание Master-Detail формы
Kaa (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
Рассмотрим процесс создания Master-Detail формы. | Рассмотрим процесс создания Master-Detail формы. | ||
| − | Есть две пользовательские таблицы | + | Есть две пользовательские таблицы: USR$MASTER и USR$DETAIL. Поле USR$MASTER_KEY таблицы USR$DETAIL является ссылкой на уникальный ID таблицы USR$MASTER. Ниже приведены два запроса для извлечения данных из указанных таблиц: |
| − | + | ||
| − | + | ||
SELECT | SELECT | ||
| Строка 23: | Строка 21: | ||
Z_USR$MASTER_KEY.ID = Z.USR$MASTER_KEY | Z_USR$MASTER_KEY.ID = Z.USR$MASTER_KEY | ||
| + | === Создание экранной формы === | ||
| − | Создаем Master-Detail форму | + | Создаем 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 нашей формы пишем следующий обработчик: | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | ( | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | ( | + | |
| − | + | ||
| − | В свойстве SubType первого компонента | + | |
| − | + | ||
| − | второго USR$DETAIL соответственно. | + | |
| − | + | ||
| − | + | ||
| − | На верхнюю и нижнюю панель добавляем | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | c dsMain и dsDetail соответственно. | + | |
| − | + | ||
| − | + | ||
| − | В компоненте usrg_gdcAttrUserDefined2 | + | |
| − | + | ||
| − | MasterSource | + | |
| − | + | ||
| − | MasterField | + | |
| − | + | ||
| − | DetailField | + | |
| − | + | ||
| − | + | ||
| − | В событии OnCreate нашей формы | + | |
| − | + | ||
| − | пишем следующий обработчик: | + | |
option explicit | option explicit | ||
| Строка 89: | Строка 56: | ||
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.gdcObject.Open | ||
Sender.gdcDetailObject.Open | Sender.gdcDetailObject.Open | ||
end sub | end sub | ||
| − | Сохраняем и выходим из редактирования формы (F2). | + | Сохраняем и выходим из режима редактирования формы (F2). |
| − | + | ||
| − | + | ||
| − | + | Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц. | |
Версия 14:51, 3 августа 2007
Рассмотрим процесс создания 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)) '*** конец кода поддержки встроенного обработчика ***
Sender.gdcObject.Open Sender.gdcDetailObject.Open end sub
Сохраняем и выходим из режима редактирования формы (F2).
Открываем нашу "Master-Detail форма" в "Исследователе". Видим Master-Detail связку таблиц.