Форум: "Базы";
Текущий архив: 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