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

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Сообщение Andrew™ »

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

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

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

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

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

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

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

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

Если есть возражения, готов выслушать не только возражения но и предложения решения таких ситуаций.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Сообщение Andrew™ »

В формах редактирования при попытке изменить запись(и)
они сначало блокируются в транзакции с помощью

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

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

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

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

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

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