घर
Top.Mail.Ru Yandeks.Metrika
फोरम: "मामले";
वर्तमान संग्रह: 2009.05.31;
डाउनलोड करें: [xml.tar.bz2];

नीचे

Fib + ClientDataSet + MasterDetail = प्रमुख उल्लंघन इसी तरह की शाखाएँ खोजें


Девушка   (2008-09-18 23:27) [0]

Использую FIB+ (СУБД Firebird 2.0)

На форме лежит датасет Man (люди), с привязаным датасорсом, к которому привязан грид. Все запросы прописаны, люди добавляются, убираются, редактируются и т.д.

Далее на форме лежит связка
Датасет-Провайдер-КлиентДатасет-Датасорс-Грид, которые открывают таблицу, связанную внешним ключем с таблицей Man (внешний ключ прописан в БД)

В клиентдатасете настроен Мастерсорс, Мастерфилд и ИндексФиелдНейм таким образом, что при смене текущего человека (если двигаем курсор по Man) меняется содержимое связного датасета.

Все замечательно работает, если для каждого человека есть связные записи. Но если у какого-то человека связных записей нет - идут ошибки "Key Violation" и разнообразные глюки. Так, записи в detail таблице могут множится, если двигаться курсором по master таблице.

1) Как это лечится?
2) Есть ли ссылка популярно объясняющаяя как на FIB-х сделать master-detail (найденные яндексом документы не помогли)?

p.s. после 5-ти часовых попыток исправить мысли могут выражены мутновато.



Johnmen ©   (2008-09-18 23:29) [1]

Можно поинтересоваться, зачем здесь клиентдатасет?



Девушка   (2008-09-18 23:34) [2]


> Можно поинтересоваться, зачем здесь клиентдатасет?

Он является Detail - датасетом. А в чем крамола?



Johnmen ©   (2008-09-18 23:42) [3]

Так почему же именно клиентдатасет???



Девушка   (2008-09-19 06:01) [4]


> Так почему же именно клиентдатасет???

1) С целью исключения блокировок (схема, подобная описаной тут http://ibase.ru/devinfo/dbexpress.htm)
2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета не найдено (если есть -ткните пальцем плз.)



Девушка   (2008-09-19 07:13) [5]


> Девушка   (19.09.08 06:01) [4]
>
> 2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета
> не найдено (если есть -ткните пальцем плз.)
>

Механизм найден путем гугления... однако, исходная проблема осталась. Если использовать клиентдатасет имеем "Key Violation"



Sergey13 ©   (2008-09-19 08:31) [6]

> [4] Девушка   (19.09.08 06:01)
> 1) С целью исключения блокировок

किस तरह का?

> 2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета не найдено (если есть -ткните пальцем плз.)
Даже если нет "пропертисов" есть всегда событие onAfterScroll у мастер-датасета, в котором можно переоткрыть детайл с нужным параметром.



Девушка   (2008-09-19 08:37) [7]


> > 1) С целью исключения блокировок
> Каких?

Если запускается два клиента и связка Датасет-Провайдер-КлиентДатасет-Датасорс-Грид то оба могут редактировать запись одновременно. Кто последний закоммитил, тот и прав.

Да и вообще так как то шустрее работает что ли... Это субъективное впечатление.


> Даже если нет "пропертисов" есть всегда событие onAfterScroll
> у мастер-датасета, в котором можно переоткрыть детайл с
> нужным параметром.
Подробное описание "как это сделать" тут http://klog.h17.ru/interbase/chapter2/1.html#29



Sergey13 ©   (2008-09-19 09:04) [8]

> [7] Девушка   (19.09.08 08:37)
> Кто последний закоммитил, тот и прав.

Это проблема более организационная нежели программная. Если уж надо заблокировать записи, то вполне можно написать for update в запросе (вроде это работает в ФБ). Хотя я бы не советовал этим злоупотреблять.

> Подробное описание "как это сделать" тут http://klog.h17.ru/interbase/chapter2/1.html#29
Да я в общем то догадываюсь как это делать, т.к. уже лет 10 пользуюсь "своим" методом из [6] и практически не пользуюсь "пропертисами" М-Д.



Johnmen ©   (2008-09-19 09:16) [9]


> Девушка (19.09.08 06:01) [4]
> 1) С целью исключения блокировок (схема, подобная описаной тут http://ibase.ru/devinfo/dbexpress.htm)
2) Пропертисов, типа мастер_филд у обычного ФИБ-датасета не найдено (если есть -ткните пальцем плз.)

1.
рекомендуется к прочтению http://www.ibase.ru/devinfo/ibtrans.htm
и др.материалы про конкурирующие транзакции.
2.
реккомендуется к прочтению хелп по FIB+ с целью освоения механизма реализации М-Д.



Девушка   (2008-09-19 10:39) [10]


> Даже если нет "пропертисов" есть всегда событие onAfterScroll
> у мастер-датасета, в котором можно переоткрыть детайл с
> нужным параметром.

Переоткрыть, означает заново закачать с сервера. Кстати, тут http://ibase.ru/devinfo/dbexpress.htm тоже каждый раз с сервера закачивается.

А КлиентДатаСет с мастер-детейл, так понимаю, сервер не дергает при смене текущей записи на мастере. Перефильтровывается все локально.

Отсюда получаем плюс в скорости.



Sergey13 ©   (2008-09-19 10:43) [11]

> [10] Девушка   (19.09.08 10:39)
> Перефильтровывается все локально.

Ну и перефильтровывай вместо переоткрытия. Кто мешает?
Только не забудь, что для того что бы что-то отфильтровать надо это что-то закачать на локаль полностью. Готова к этому?



Девушка   (2008-09-19 11:04) [12]


> Ну и перефильтровывай вместо переоткрытия. Кто мешает?

Ага... и еще предусмотреть что бы на фильтр-он фильтр-офф в гриде все это не отображалось...
Зачем руками писать мастер-детаил, когда он уже написан, более умными людьми?

Кстати, вопрос с мастер-детаил на клиентдатасете остается открытым...



Sergey13 ©   (2008-09-19 11:19) [13]

> [12] Девушка   (19.09.08 11:04)
> Кстати, вопрос с мастер-детаил на клиентдатасете остается открытым...

ИМХО еще не закрыт вопрос о целесообразности использования CDS-а. 8-)



पन्ने: 1 पूरी शाखा

फोरम: "मामले";
वर्तमान संग्रह: 2009.05.31;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.6 एमबी
समय: 0.028 c
15-1237785548
Б
2009-03-23 08:19
2009.05.31
डेल्फी में DirectX पर 2 पुस्तकों की तलाश।


2-1240060370
छात्र
2009-04-18 17:12
2009.05.31
कक्षा सदस्य की कोई प्रविष्टि (क्लासिक ओओपी पर सवाल)


3-1221628427
सुस्त
2008-09-17 09:13
2009.05.31
अमान्य वर्ग टाइपकास्ट।


2-1239706578
Kolan
2009-04-14 14:56
2009.05.31
अधीनस्थ वस्तुओं के ऑटो विलोपन को कैसे रोकें?


8-1194545729
Naruto
2007-11-08 21:15
2009.05.31
संगीत की ताल पर मेरा डायग्राम जंप कैसे करें।





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский