Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.058 c
1-1155025352
SamProf
2006-08-08 12:22
2006.09.17
Как открыть свойства файла на ftp


8-1141657165
denis24
2006-03-06 17:59
2006.09.17
Изменение разрешение картинки


3-1152093224
term1t
2006-07-05 13:53
2006.09.17
Oracle to FoxPro


2-1156452053
ronyn
2006-08-25 00:40
2006.09.17
Как создать пустой фильтр?


15-1156264390
imbalacedees
2006-08-22 20:33
2006.09.17
softkey