Страница 1 из 1

Блокировка записей в форме редактирования

Добавлено: 09 Февраль 2006, 13:01
Andrew™
В форме редактирования в режиме изменения записи(ей) перед сохранением в БД происходит блокировка всех записей который будут изменяться по следующим правилам (так сейчас работает библиотека):

Код: Выделить всё

 UPDATE ЛюбоеНеReradOnlyПоле=СамоНаСебя FROM Table WHERE По полям первичного ключа
далее происхродит проверка на изменение этих записей с других рабочих станций.

Так вот в триггерах на UPDATE возможна UPDATE каких то полей этих записей, и получается что после блокировки (UPDATE по сути) триггера меняли значение каких то полей и далее попытка проверки на изменение с других рабочих станций давала ошибку - дескать запись изменилась с другой станции, а на самом деле изменение произошло в триггере с этой рабочей станции.

Так вот, для разруливания таких ситуаций я ввёл для поля дополнительный Options

Код: Выделить всё

CheckOnChange = False
если такой Option будет выставлен у поля в DCT, то проверка на изменение этого поля с другой рабочей станции будет отсутсвовать (поля инициализируются в триггерах)

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

Если есть возражения, готов выслушать не только возражения но и предложения решения таких ситуаций.

Блокировка записей, применительно к MSSQL серверу

Добавлено: 21 Февраль 2006, 10:09
Andrew™
В формах редактирования при попытке изменить запись(и)
они сначало блокируются в транзакции с помощью

Код: Выделить всё

UPDATE КакоеНибудьНеReadOnlyИнеBLOBПоле=самоНАсебя WHERE по полям первичного ключа
далее идёт проверка на изменение этих записей с других рабочих станций
в случае успешной проверки - UPDATE записей в БД

так вот для MSSQL можно более оптимально сделать блокировку, её можно объеденить с проверкой, т е подымать записи для проверки, которые учавствуют в транзакции с соответсвующим хинтом

Код: Выделить всё

WITH (UPDLOCK)
т е мы проверяем и блокируем записи одновременно.

что и было реализовано в библиотеке