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