Показать сообщение отдельно
Старый 04.05.2006, 10:34   #5  
Seer_imported is offline
Seer_imported
Участник
 
75 / 10 (1) +
Регистрация: 08.12.2005
Цитата:
Сообщение от NeNavision Посмотреть сообщение
Я думаю это принципиально разные транзакции. Чуть-чуть модифицируем ваш эксперимент. Сделаем так. В первом клиенте изменим поле code1 и не выходим их этого поля. Во втором клиенте изменяем поле Decimal1, переходим на другую запись тем самым, сохраняя изменения. Переключаемся на первого клиента и переходим из поля code1 только не на другую запись, а в другое поле данной записи например в тоже decimal1. Что получилось: изменения сделаны – сделаны. Программа запускает Validate поля code1, начинается транзакция, что-то она делает и благополучно заканчивается, внося изменения в другую табличку (Test Commit). О том, что данная запись была изменена в другом клиенте пока ничего не известно. Теперь из поля decimal1 переходим на другую запись и система ругается, что данная запись была изменена другим пользователем. Затем она изменяют эту запись на основе новых данных (полученных/измененных во втором клиенте). Таким образом создается впечатление, что произошел откат транзакции (поле code1 примет старое значение).
Вообщем, думаю - это такие тонкости, которые желательно знать.
Так вот и получается, что такая "тонкость" приводит к нарушению целостности данных - а это уже больше похоже на недоработку MBS. Гораздо логичнее было бы перед отработкой Validate проверять, во-первых, на основе последней ли версии записи осуществляется выполнение кода в Validate, а во-вторых, перед отработкой Validate лочить эту запись.