ШАГ 5. Настройка механизма master-detail.

FIBPlus позволяет также настраивать некоторые особенности работы механизма master-detail. В частности, как вы уже обратили внимание, в нашем примере мы открывали detail-dataset (pFIBDataSet2) "вручную". В случае с простой связкой это не трудно, однако если мы используем несколько цепочек master-detail или более длинные цепочки: master-detail-subdetail, то ручное открытие всех запросов может даже привести к ошибке. Вы всегда должны открывать подчиненный запрос после основного. Чтобы избежать ненужного и совершенно очевидного кодирования, TpFIBDataSet содержит специальное свойство DetailOptions:

Рис. 15.

Задав ключ dcForceOpen мы можем быть совершенно уверены, что detail-запрос будет автоматически открыт после открытия master-запроса. Теперь мы можем удалить строку pFIBDataSet2.Open из нашей программы. Какова бы ни была глубина связок master-detail, все запросы будут открыты в нужном порядке.

Вторая важная опция - это ключ dcWaitEndMasterScroll. Представьте, что пользователь передвигается по DBGrid1, пытаясь найти нужный отдел. При каждом движении, когда меняется текущая запись в DBGrid1, pFIBDataSet2 автоматически переоткрывает запрос. Очевидно, движение по master-таблице может вызвать серию довольно "тяжелых" запросов, которые значительно увеличат совершенно бесполезный сетевой трафик. На практике было нужно переоткрыть detail-запрос только один раз, когда пользователь все-таки нашел нужный ему отдел в DBGrid1. FIBPlus позволяет избежать ненужных запросов. Если ключ dcWaitEndMasterScroll добавлен в DetailConditions, то detail-запрос переоткрывается только после некоторой паузы (величину паузы можно регулировать, задавая значение свойства WaitEndMasterInterval).

Таким образом, когда пользователь просто передвигается по DBGrid1, изменение текущей записи "включает" таймер detail-запроса. Если за время паузы пользователь успевает перейти на другую запись, то таймер сбрасывается. И так до тех пор, пока пользователь не остановится на нужной записи. Только после этого detail-запрос переоткрывается, а значит, pFIBDataSet2 выполняет только один запрос вместо целой серии.

Заключение

Вы увидели, каким образом построена работа со связями master-detail в FIBPlus: как подключаться к базе данных, как выполнять выбирающий запрос и генерировать модифицирующие, как работать с данными в контексте двух транзакций, и связывать между собой master и detail датасеты. Несмотря на простоту описываемых подходов, все-таки рекомендуется внимательно изучить примеры для статьи.


Описание для анонса: Пятая и последняя часть статьи об особенностях работы с master-detail в FIBPlus. В этой части описывается настройка механизма при помощи опций DetailConditions.
Специальные цены для ex-USSR (кроме стран ЕС):

235 Euro
1500 руб. для физ. лиц
3600 руб. для юр. лиц

Скидки при покупке нескольких копий!

Навигация



...сейчас пытаюсь понять как насчет устойчивости и предсказуемости работы - это гораздо важнее. пока претензий нет - даже подозрительно 8-)... >>

Andrey V. Sorokin
Раздел для покупателей
Получение полных версий и обновлений. Перейти в Личный кабинет
Сайт по Delphi: ежедневные ИТ-новости, статьи, документация, компоненты, конкурсы, юмор...