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

Блокировка записей!!!

Добавлено: 28 фев 2007, 09:41
break
В своей программе я использовал блокировку записей! Например при открытии карточек, чтобы другой пользователь получил сообщение открывая ту карточку, которая уже открыта. Реализовал это посредством холостого апдейта первичного ключа.

таблица CLIENTS первичный ключ - ROW_ID

при открытии какой либо записи в отдельном окошке

update CLIENTS set ROW_ID = ROW_ID where ROW_ID = ?OLD_ROW_ID

Транзакция этого окошка завершится когда оно закроется - тогда другие пользователи смогут открывать эту запись!.

Этот принцип долгое время меня устраивал, но теперь столкнулся с проблемой. Если я хочу вставить в таблицу в которой имеется вторичный ключ на таблицу CLIENTS запись, которая сейчас открыта (произведен этот самый холостой апдейт) - то DEADLOCK.

Отказываться от вторичных ключей не хочется! Есть ли способ обхода этой особенности IB или мне необходимо поменять механизм блокировок записей???

Добавлено: 28 фев 2007, 11:33
Dmitry Beloshistov

Добавлено: 28 фев 2007, 12:37
break
Спасибо!!!

Изучил - как я понял лучше всего использовать отдельную таблицу

APP_LOCKS(ROW_ID, XDATE) и блокировать холостым апдейтом ее.

Были мысли по поводу Select ... For Update With Lock - но попробовал не работает - похоже при такой блокировке отключаются только триггеры, а вторичные ключи всё же не дают вставить запись если ее карточка открыта!

Добавлено: 28 фев 2007, 12:54
Dimitry Sibiryakov
А что, в IB уже появился For update with lock?

Добавлено: 28 фев 2007, 13:22
break
Цитата из 2-ой ссылки:

В FB 1.5. включена новая функциональность -

Select ... From Table [Where ...] [Order By ...] For Update With Lock.

Синтаксис Select For Update присутствует в IB довольно давно, но его назначение не имело отношения к блокировке.

Добавлено: 28 фев 2007, 13:48
Dimitry Sibiryakov
break писал(а):Есть ли способ обхода этой особенности IB
break писал(а):В FB 1.5. включена новая функциональность -
:?: :!: :?:
Т.е. ты предлагаешь обходить функциональность IB, заменяя ее на FB. Похвально.