powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как правильно заблокировать запись?
14 сообщений из 14, страница 1 из 1
как правильно заблокировать запись?
    #32329916
alex_konkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим один пользователь удалил запись, а второй до этого вызвал на редактирование, после того как первый подтвердил изменения, те записи уже нет, второй хочет подтвердить свои изменения в полях записи , которой уже нет.
Как в этом случае более правильно сделать проверку на наличие записи или заблокировать ее, чтобы пока один пользователь редактирует ее другие видели но изменить или удалить не могли.

Таблица
CREATE TABLE SP_UCH (
UCH_K INTEGER NOT NULL,
UCH_NP VARCHAR(50) NOT NULL,
UCH_NK VARCHAR(25) NOT NULL
);
ALTER TABLE SP_UCH ADD CONSTRAINT PK_SP_UCH PRIMARY KEY (UCH_K);

Запрос на обновление записи в ней
update SP_UCH
set
UCH_NP = :UCH_NP,
UCH_NK = :UCH_NK
where
UCH_K = :OLD_UCH_K

Был совет перед началом редактирования таблицы выполнить SQL
команду
UPDATE TABLE SP_UCH SET UCH_K=UCH_K WHERE UCH_K=:UCH_K;
которая должна заблокировать запись.

Интересны мнения по этой теме
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32329962
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень дельный совет вам дали. Если выполнить такую команду сразу после вызова перед изменением записи, пользователь, пфтающийся удалить запись, получит Deadlock.
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32329965
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После вызова Edit я хотел сказать :-)
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32329989
alex_konkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как же тогда лучше поступить? Интересно Ваше мнение?
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330013
Roman Ignatiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и правильно, а что он еще должен получить? Естественно, ошибку. ТАк что все нормально.
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330023
alex_konkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну да получит ошибку lock conflict on no wait transaction
При свойствах транзакции:
read_committed
rec_version
nowait
Как это обработать у клиенна который получит эту ошибку?
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330050
Roman Ignatiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТАк же, как и любую другую ошибку. Обработка исключений же есть?
А ему в принципе следует подождать и повторить попытку, ничего криминального здесь нет
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330072
alex_konkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
те поместить оператор редактирования в конструкцию что-то на подобие..
startTransaction;
TRY
//действия по редактированию записи, которую кто-то заблокировал
commit;
EXEPT
rollback;
showmessage('запись блокирована другим пользователем');
END;//try
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330108
Roman Ignatiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если read_committed rec_version то ты не обязан переоткрывать транзакцию, можно просто подождать, пока освободиться :)
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330188
alex_konkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Если read_committed rec_version то ты не обязан переоткрывать транзакцию, >можно просто подождать, пока освободиться :)

а можно кусок кода небольшой какой нибудь привести насчет
>можно просто подождать, пока освободиться
я не очень понял как это сделать..
заранее спасибо...
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330213
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно поменять параметр nowait на wait Только нужно ли? Раз запись редактируется - нечего её другим пользователям лапать... Пользователь должен получить сообщение и сделать соответствующие выводы...
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330246
alex_konkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
те как я и написал - обработать исключение и выдать сообщение, что запись блокирована другим пользьвателем.
Если так, тогда понятно, спасибо.
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32330840
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть еще одна команда для блокировки записей...
select ... for update . Вот только не расчитан IB на использования этого безобразия
...
Рейтинг: 0 / 0
как правильно заблокировать запись?
    #32331056
Фотография Alexey Kovyazin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.ibase.ru/devinfo/pslock.htm

With best regards,
Alexey Kovyazin
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как правильно заблокировать запись?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]