|
Вопрос # 4 592/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
ответьте пожалуйста на такой вопрос! как в delphi связать две таблицы используя компоненты доступа к данным FIB. Знаю точно как это в ADO делается "masterKey", "masterfields", в FIB таких свойств почему то нет. кто знает прошу помочь. Ответы типа "ничего сложного", "посмотри еще где нибудь" не принимаются. всем заранее огромное спасибо!
 |
Вопрос задал: 6ruse (статус: 1-ый класс)
Вопрос отправлен: 20 сентября 2010, 13:58
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 21 сентября 2010, 08:49; участников в обсуждении: 2.
|
6ruse (статус: 1-ый класс), 20 сентября 2010, 15:32 [#2]:
Вот спасибо!, еще бы ссылку рабочею дали вообще прекрасно было б
|
|
Тов. Женька (статус: 3-ий класс), 20 сентября 2010, 15:39 [#4]:
Master-detail
Реализация мастер-деталь связей в FIBPlus делается точно так же, как в BDE на
компонентах TQuery. Т.е. у детального датасета, должно быть заполнено свойство
DataSource, причем сам DataSource должен быть ассоциирован с мастер-датасетом.
Поясним на примере:
Допустим в базе есть 2 таблицы - клиенты и заказы. Нам нужно создать два набора
данных которые должны быть соединены в связь мастер-деталь. Клиенты - master, заказы -
detail.
Мастер-датасет назовем MDS, деталь-датасет назовем DDS. И пусть с мастер-датасетом
связан DataSource по имени MasterSrc, а с детальным - DataSource по имени DetailSrc.
1) Прописываем у MDS в SelectSQL запрос
select id, name from clients
2) Прописываем у DDS в SelectSQL запрос
select * from orders where client_id = :mas_id.
3) У детального датасета DDS присваиваем в свойство DataSource ссылку на MasterSrc.
Собственно все. Связь мастер-деталь создана. Теперь при изменении текущей записи в
датасете MDS, подчиненный датасет DDS будет автоматически переоткрываться, причем
значение параметра ‘mas_id’, он будет брать из поля ‘id’ главного датасета. Вообще
следует заметить, что при переоткрытии Select запроса детального датасета, FIBPlus
заполняет его параметры, значениями соответствующих полей главного датасета. При этом
руководствуясь принципом совпадения имени параметра детального датасета с именем поля
главного. Либо если параметр имеет необязательный префикс «mas_», то этот префикс
сначала отсекается, а затем ищется совпадение по усеченному имени. Если же у детального
датасета выполняется не Select запрос, а Update,Delete или Refresh, то параметры этих
запросов заполняются из полей детального датасета, кроме параметров начинающихся с
префикса «mas_». Параметры, начинающиеся с этого префикса, всегда заполняются
значениями полей главного датасета.
Для более тонкой настройки поведения детального датасета существует свойство
TDetailConditions. Рассмотрим возможные значения опций этого свойства по отдельности.
1) dcForceOpen – если включено, то детальный датасет автоматически откроется
при первом открытии главного.
2) dcIgnoreMasterClose – если включено, то детальный датасет не будет
автоматически закрываться, даже если главный датасет уже закрылся
3) dcForceMasterRefresh – форсирует автоматический рефреш главного датасета,
в случае если записи детального подверглись модификации.
4) dcWaitEndMasterScroll – если включено, то по мере перемещения по главному
датасету, детальный датасет будет переоткрываться с задержкой. Если за
время этой задержки, опять произошло перемещение по главному датасету, то
детальный отреагирует, только на последнее перемещение. Само время
задержки регулируется через свойство датасета
WaitEndMasterInterval:integer и по умолчанию равно 300 тиков. Этот режим
позволяет уменьшить количество запросов к серверу, за счет уменьшения
переоткрытий детального датасета.
|
|
6ruse (статус: 1-ый класс), 21 сентября 2010, 08:49 [#5]:
Спасибо, огромное!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|