![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Блокировка записи [D5, IB6.x]
nick-from © (2003-02-03 10:25:00)Есть таблица, записи которой обновляются (добавляются и удаляются) с помощью соответствующих хранимых процедур.
Чтобы обновить запись, пользователь выбирает ее в DbGrid"е и нажимает кнопку "Изменить". (В DbGrid"е записи менять нельзя - так как показаны не все поля записей, да и не люблю я так :) ).
Появляется новая форма, содержащая Edit"ы соответствующие полям записи. Пользователь изменяет их значения и по нажатию кнопки "Ok" вызывается ХП на изменение.
Вопрос в том как блокировать запись после нажатия "Изменить", чтобы пока пользователь А заполнял поля, пользователь В не изменил (или удалил) эту вот запись?
nick-from (2003-02-03 14:49:00) [1]Ну спасибо тебе, понял :)))))))))
Alexandr (2003-02-03 14:35:00) [2]так эта...
Прочитай про snapshot.
Короче это чтоб никто не изменил между твоим проверочным чтением и записью.
nick-from (2003-02-03 14:24:00) [3]???
объясни тупому, если не трудно
Alexandr (2003-02-03 13:30:00) [4]да, только транзакция нужна snapshot в которой обновить запись и потом апдейт ее делать.
nick-from (2003-02-03 13:26:00) [5]ok
это и хотел услышать
всем спасибо
Alexandr (2003-02-03 13:14:00) [6]ну как-как.
Вот взять перечитать эту строку по первичному ключу и сравнить с тем, что собираемся писать.
nick-from (2003-02-03 13:05:00) [7]2 Alexandr © (03.02.03 12:28)
ok
Тогда подскажи пожалуйста такую штуку. Все вроде ясно как делать только вот как "показать что на что поменяли" т.е. как это сделать проще можно, по принципу Select см. nick-from (03.02.03 11:35) или еще как?
Alexandr (2003-02-03 12:39:00) [8]а при чем тут timeStamp?
кстати, это есть.
Или что ты имел в виду?
jocko (2003-02-03 12:32:00) [9]может я глупость спрошу, а что в IB полей timestamp или чего в замен не существует? (в MS SQL есть)
Alexandr (2003-02-03 12:28:00) [10]
> Но что-то так мне не особо нравится - толкотни много :)
> Можт еще как можно ?
ну можно еще вообще нихрена не делать. Пойти например водки нажраться. И вообще забить на эту проблему.
Anatoly Podgoretsky (2003-02-03 11:41:00) [11]И уехал в командировку, а кабинет закрыл.
nick-from (2003-02-03 11:35:00) [12]Ну да. Типа, например, можно на ту форму повесить Label, и отслеживать с помощью SIBfibEventAlerter евенты. Если пришел к примеру евент на удаление, то можно запустить Select запрос и если он не вернет нужной записи, та label скажет, что мол уже удалили твою запись, батенька. А вот с обновлением уже, наверное, посложнее...
Но что-то так мне не особо нравится - толкотни много :)
Можт еще как можно ?
Alexandr (2003-02-03 11:26:00) [13]а вот дальше обсуждение этого и идет... Ты прочитал?
nick-from (2003-02-03 11:17:00) [14]2 Alexandr © (03.02.03 10:48)
> Поэтому делают немного по-другому...
Расскажи пожалуйста как делают
Alexandr (2003-02-03 11:05:00) [15]вот вот. И показать что на что поменяли.
После чего предложить пользователю выбор: оставить, провести свои изменения и прочее...
passm (2003-02-03 10:54:00) [16]Alexandr © (03.02.03 10:48)> Да. Нехорошо получится :)
Может, лучше будет показать пользователю сообщение типа: "Пока Вы тут по окошку лазали, Вашу запись успели изменить/удалить :)"
Alexandr (2003-02-03 10:48:00) [17]1) транзакции тут как бы нипричем. (если не считать очень редкий случай блокировки всех таблицы)
2) Перед edit надо просто сделать холостой апдейт в той транзакции, в которой потом пойдет изменение.
3) Но учти, что если пользователь нажмет едит, произойдет этот холостой апдейт, а потом свалит куда-нибудь, то тогда долго все будут ругать и его и программиста...
Поэтому делают немного по-другому...
stone (2003-02-03 10:35:00) [18]Установить соответствующий уровень разграничения транзакций