|
|
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
Допустим один пользователь удалил запись, а второй до этого вызвал на редактирование, после того как первый подтвердил изменения, те записи уже нет, второй хочет подтвердить свои изменения в полях записи , которой уже нет. Как в этом случае более правильно сделать проверку на наличие записи или заблокировать ее, чтобы пока один пользователь редактирует ее другие видели но изменить или удалить не могли. Таблица 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; которая должна заблокировать запись. Интересны мнения по этой теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 12:18 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
Очень дельный совет вам дали. Если выполнить такую команду сразу после вызова перед изменением записи, пользователь, пфтающийся удалить запись, получит Deadlock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 12:47 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
После вызова Edit я хотел сказать :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 12:48 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
Как же тогда лучше поступить? Интересно Ваше мнение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 13:01 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
Ну и правильно, а что он еще должен получить? Естественно, ошибку. ТАк что все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 13:16 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
Ну да получит ошибку lock conflict on no wait transaction При свойствах транзакции: read_committed rec_version nowait Как это обработать у клиенна который получит эту ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 13:22 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
ТАк же, как и любую другую ошибку. Обработка исключений же есть? А ему в принципе следует подождать и повторить попытку, ничего криминального здесь нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 13:33 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
те поместить оператор редактирования в конструкцию что-то на подобие.. startTransaction; TRY //действия по редактированию записи, которую кто-то заблокировал commit; EXEPT rollback; showmessage('запись блокирована другим пользователем'); END;//try ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 13:45 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
Если read_committed rec_version то ты не обязан переоткрывать транзакцию, можно просто подождать, пока освободиться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 14:02 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
>Если read_committed rec_version то ты не обязан переоткрывать транзакцию, >можно просто подождать, пока освободиться :) а можно кусок кода небольшой какой нибудь привести насчет >можно просто подождать, пока освободиться я не очень понял как это сделать.. заранее спасибо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 14:39 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
Можно поменять параметр nowait на wait Только нужно ли? Раз запись редактируется - нечего её другим пользователям лапать... Пользователь должен получить сообщение и сделать соответствующие выводы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 14:51 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
те как я и написал - обработать исключение и выдать сообщение, что запись блокирована другим пользьвателем. Если так, тогда понятно, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2003, 15:07 |
|
||
|
как правильно заблокировать запись?
|
|||
|---|---|---|---|
|
#18+
есть еще одна команда для блокировки записей... select ... for update . Вот только не расчитан IB на использования этого безобразия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 03:09 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32330050&tid=1579621]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
201ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 466ms |

| 0 / 0 |
