Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как правильно заблокировать запись? / 14 сообщений из 14, страница 1 из 1
20.11.2003, 12:18
    #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
20.11.2003, 12:47
    #32329962
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
Очень дельный совет вам дали. Если выполнить такую команду сразу после вызова перед изменением записи, пользователь, пфтающийся удалить запись, получит Deadlock.
...
Рейтинг: 0 / 0
20.11.2003, 12:48
    #32329965
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
После вызова Edit я хотел сказать :-)
...
Рейтинг: 0 / 0
20.11.2003, 13:01
    #32329989
alex_konkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
Как же тогда лучше поступить? Интересно Ваше мнение?
...
Рейтинг: 0 / 0
20.11.2003, 13:16
    #32330013
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
Ну и правильно, а что он еще должен получить? Естественно, ошибку. ТАк что все нормально.
...
Рейтинг: 0 / 0
20.11.2003, 13:22
    #32330023
alex_konkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
Ну да получит ошибку lock conflict on no wait transaction
При свойствах транзакции:
read_committed
rec_version
nowait
Как это обработать у клиенна который получит эту ошибку?
...
Рейтинг: 0 / 0
20.11.2003, 13:33
    #32330050
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
ТАк же, как и любую другую ошибку. Обработка исключений же есть?
А ему в принципе следует подождать и повторить попытку, ничего криминального здесь нет
...
Рейтинг: 0 / 0
20.11.2003, 13:45
    #32330072
alex_konkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
те поместить оператор редактирования в конструкцию что-то на подобие..
startTransaction;
TRY
//действия по редактированию записи, которую кто-то заблокировал
commit;
EXEPT
rollback;
showmessage('запись блокирована другим пользователем');
END;//try
...
Рейтинг: 0 / 0
20.11.2003, 14:02
    #32330108
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
Если read_committed rec_version то ты не обязан переоткрывать транзакцию, можно просто подождать, пока освободиться :)
...
Рейтинг: 0 / 0
20.11.2003, 14:39
    #32330188
alex_konkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно заблокировать запись?
>Если read_committed rec_version то ты не обязан переоткрывать транзакцию, >можно просто подождать, пока освободиться :)

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

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


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