Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

2 датасета и ApplyUpdates   Найти похожие ветки 

 
juice ©   (2006-07-13 19:42) [0]

Есть 2 датасета что соответствуют двум связаным мастер-детэйл таблицам. Возникает проблема с тем, в какой последовательности вызывать ApplyUpdates ?
Ситуация 1: добавляется запись в главный н.д. и соотв. запись в подчиненный. В таком случае нужно вызвать первым ApplyUpdates главного.
Ситуация 2: удаляется запись в главном и конечно соотв. запись в подчиненном. В таком случае сначало нужно візвать ApplyUpdates подчиненного.
Если так не делать то получаю "violation of foreign KEY".

Я правильно рассуждаю?
Как решить эту проблему, ведь я не могу анализировать чего там пользователь и когда добавил или удалил, да и вообще, он может удалить, затем добавить а потом еще что-нибудь удалить и т.д. Как быть?


 
Johnmen ©   (2006-07-13 21:04) [1]

А что, foreign KEY без каскадного удаления?


 
Juice ©   (2006-07-14 10:46) [2]


> А что, foreign KEY без каскадного удаления?

Да.


 
Desdechado ©   (2006-07-14 11:03) [3]

можно, например, в BeforeUpdateRecord для первого датасета проверять и делать каскадное удаление


 
Juice ©   (2006-07-14 11:17) [4]

Сделал так, может кому-то пригодится:

if cdsPortfMng.ChangeCount>0 then cdsPortfMng.ApplyUpdates(-1);
if sdsDetailsMng.ChangeCount>0 then sdsDetailsMng.ApplyUpdates(-1);
if cdsPortfMng.ChangeCount>0 then cdsPortfMng.ApplyUpdates(-1);
if sdsDetailsMng.ChangeCount>0 then sdsDetailsMng.ApplyUpdates(-1);

Просто в два прохода, если при первом вылетает эксепшн то при втором он "сгладится".


 
Johnmen ©   (2006-07-14 11:49) [5]

У меня такое ощущение, что вообще ВСЁ не так, ВСЁ неправильно идеологически...


 
Desdechado ©   (2006-07-14 12:02) [6]

Если на первом проходе будет ошибка, то до второго дело просто не дойдет.
Кроме того, даже если дойдет, то в случае наличия комбинированных изменений (add/edit/del) будет еще более интересная реакция.


 
Juice ©   (2006-07-14 13:46) [7]


> Если на первом проходе будет ошибка, то до второго дело
> просто не дойдет

Дойдет. Почему нет ?


> Кроме того, даже если дойдет, то в случае наличия комбинированных
> изменений (add/edit/del) будет еще более интересная реакция.
>

После первого остаются только проблемные записи, что решается ApplyUpdates детэйла при втором проходе. Другого быть не может.


> У меня такое ощущение, что вообще ВСЁ не так, ВСЁ неправильно
> идеологически...

А какая тут идеалогия может быть ? Стандартная ситуация - 1master/1detail, и все, нет идеологии.


 
Johnmen ©   (2006-07-14 14:01) [8]


> А какая тут идеалогия может быть ? Стандартная ситуация
> - 1master/1detail, и все, нет идеологии.


Стандартные ситуации решаются стандартными идеологическими методами.
В данном случае я почти уверен, что это не так...


 
Desdechado ©   (2006-07-14 16:05) [9]

> Дойдет. Почему нет ?
Может, я чего не понимаю, но в случае Exception в ApplyUpdates вся обработка летит в другую сторону, а не на следующую строку кода.


 
Juice ©   (2006-07-14 17:19) [10]


> Может, я чего не понимаю, но в случае Exception в ApplyUpdates
> вся обработка летит в другую сторону, а не на следующую
> строку кода.

При возникновении ошибок ApplyUpdates только возвращает количество таковых и вызывает OnReconcile, исключения не происходит.


> Стандартные ситуации решаются стандартными идеологическими
> методами.
> В данном случае я почти уверен, что это не так...

Я и спрашивал о стандартном решении, ведь казалось бы ситуация д.б. очень популярной. Но как выяснилось нет такового.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.047 c
2-1156579096
Std
2006-08-26 11:58
2006.09.17
html+форма


10-1123495556
Nick Denry
2005-08-08 14:05
2006.09.17
Можно ли средсвами TMediaPLayer


8-1141121155
iss
2006-02-28 13:05
2006.09.17
изменение размера image


2-1156856626
redlord
2006-08-29 17:03
2006.09.17
видимость переменных


15-1156829879
Slider007
2006-08-29 09:37
2006.09.17
Text Image





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский