Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Блокировка записи [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]

Установить соответствующий уровень разграничения транзакций


Наверх

Титульная страница Поиск, карта сайта Написать письмо