-
Использую FIB+ (СУБД Firebird 2.0)
На форме лежит датасет Man (люди), с привязаным датасорсом, к которому привязан грид. Все запросы прописаны, люди добавляются, убираются, редактируются и т.д.
Далее на форме лежит связка Датасет-Провайдер-КлиентДатасет-Датасорс-Грид, которые открывают таблицу, связанную внешним ключем с таблицей Man (внешний ключ прописан в БД)
В клиентдатасете настроен Мастерсорс, Мастерфилд и ИндексФиелдНейм таким образом, что при смене текущего человека (если двигаем курсор по Man) меняется содержимое связного датасета.
Все замечательно работает, если для каждого человека есть связные записи. Но если у какого-то человека связных записей нет - идут ошибки "Key Violation" и разнообразные глюки. Так, записи в detail таблице могут множится, если двигаться курсором по master таблице.
1) Как это лечится? 2) Есть ли ссылка популярно объясняющаяя как на FIB-х сделать master-detail (найденные яндексом документы не помогли)?
p.s. после 5-ти часовых попыток исправить мысли могут выражены мутновато.
-
Можно поинтересоваться, зачем здесь клиентдатасет?
-
> Можно поинтересоваться, зачем здесь клиентдатасет?
Он является Detail - датасетом. А в чем крамола?
-
Так почему же именно клиентдатасет???
-
> Так почему же именно клиентдатасет???
1) С целью исключения блокировок (схема, подобная описаной тут http://ibase.ru/devinfo/dbexpress.htm) 2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета не найдено (если есть -ткните пальцем плз.)
-
> Девушка (19.09.08 06:01) [4] > > 2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета > не найдено (если есть -ткните пальцем плз.) >
Механизм найден путем гугления... однако, исходная проблема осталась. Если использовать клиентдатасет имеем "Key Violation"
-
> [4] Девушка (19.09.08 06:01) > 1) С целью исключения блокировок
Каких?
> 2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета не найдено (если есть -ткните пальцем плз.) Даже если нет "пропертисов" есть всегда событие onAfterScroll у мастер-датасета, в котором можно переоткрыть детайл с нужным параметром.
-
> > 1) С целью исключения блокировок > Каких?
Если запускается два клиента и связка Датасет-Провайдер-КлиентДатасет-Датасорс-Грид то оба могут редактировать запись одновременно. Кто последний закоммитил, тот и прав. Да и вообще так как то шустрее работает что ли... Это субъективное впечатление. > Даже если нет "пропертисов" есть всегда событие onAfterScroll > у мастер-датасета, в котором можно переоткрыть детайл с > нужным параметром.
Подробное описание "как это сделать" тут http://klog.h17.ru/interbase/chapter2/1.html#29
-
> [7] Девушка (19.09.08 08:37) > Кто последний закоммитил, тот и прав. Это проблема более организационная нежели программная. Если уж надо заблокировать записи, то вполне можно написать for update в запросе (вроде это работает в ФБ). Хотя я бы не советовал этим злоупотреблять. > Подробное описание "как это сделать" тут http://klog.h17.ru/interbase/chapter2/1.html#29Да я в общем то догадываюсь как это делать, т.к. уже лет 10 пользуюсь "своим" методом из [6] и практически не пользуюсь "пропертисами" М-Д.
-
> Девушка (19.09.08 06:01) [4] > 1) С целью исключения блокировок (схема, подобная описаной тут http://ibase.ru/devinfo/dbexpress.htm) 2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета не найдено (если есть -ткните пальцем плз.)
1. рекомендуется к прочтению http://www.ibase.ru/devinfo/ibtrans.htmи др.материалы про конкурирующие транзакции. 2. реккомендуется к прочтению хелп по FIB+ с целью освоения механизма реализации М-Д.
-
> Даже если нет "пропертисов" есть всегда событие onAfterScroll > у мастер-датасета, в котором можно переоткрыть детайл с > нужным параметром.
Переоткрыть, означает заново закачать с сервера. Кстати, тут http://ibase.ru/devinfo/dbexpress.htm тоже каждый раз с сервера закачивается. А КлиентДатаСет с мастер-детейл, так понимаю, сервер не дергает при смене текущей записи на мастере. Перефильтровывается все локально. Отсюда получаем плюс в скорости.
-
> [10] Девушка (19.09.08 10:39) > Перефильтровывается все локально.
Ну и перефильтровывай вместо переоткрытия. Кто мешает? Только не забудь, что для того что бы что-то отфильтровать надо это что-то закачать на локаль полностью. Готова к этому?
-
> Ну и перефильтровывай вместо переоткрытия. Кто мешает?
Ага... и еще предусмотреть что бы на фильтр-он фильтр-офф в гриде все это не отображалось... Зачем руками писать мастер-детаил, когда он уже написан, более умными людьми?
Кстати, вопрос с мастер-детаил на клиентдатасете остается открытым...
-
> [12] Девушка (19.09.08 11:04) > Кстати, вопрос с мастер-детаил на клиентдатасете остается открытым...
ИМХО еще не закрыт вопрос о целесообразности использования CDS-а. 8-)
|