Главная страница
    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.038 c
2-1156749497
GeneralMotors
2006-08-28 11:18
2006.09.17
Пробудить комп


15-1156740957
Rouse_
2006-08-28 08:55
2006.09.17
Петруха с ДР Тебя !!!


15-1156716586
Petr V. Abramov
2006-08-28 02:09
2006.09.17
33-й год жизни


2-1156596558
angelika
2006-08-26 16:49
2006.09.17
горячие клавиши (ctrl+key)


2-1156818456
verybadbug
2006-08-29 06:27
2006.09.17
Название месяца





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский