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

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

Как избавиться от длительной блокировки записи?


Страницы:   1 2

guest_Dmitry ©   (2004-07-26 18:32:00) 

Столкнулся с такой проблемой: пользователь открыл запись в базе на редактирование и ушел покурить, кофе попить, либо внес изменения и забыл запостить датасет. В результате запись на длительное время остается заблокированная. Кто как с этим борется, подскажите пожалуйста.


guest_Dmitry   (2004-07-26 19:18:00) [21]

Так а что это изменит? Только то, что можно будет увидеть кто заблокировал запись?

Между
>Один оператор открыл форму для редактирования - данные по >данной записи ему передались "грязным чтением", но при этом в >таблицу блокировок добавилась соответствующая запись.

и

>Оператор внёс изменения в базу - блокировка убралась.

оператор может отвлечься на какое-то время, а блокировка то висит....


Ega23   (2004-07-26 19:11:00) [22]

можно поподробнее применительно к Interbase?

C Interbase знаком плохо, поэтому пишу для MS SQL. Здесь идея важна, всё остальное вторично:

create table Blocks (
UNID int,
PersID int,
WorkCod int,
BlockNam varchar(16),
BlockID int)

PersID - ID оператора, ктоторый работает (если такие у тебя есть)
WorkCod - ID раб.станции, с которой работает оператор
BlockNam - Некое имя для операций, допустим "GOODS" - для товаров, "SHOPS" - для магазинов и т.п.
BlockID - собственно ID той записи, которую блокируешь.

Оператор перед началом редактирования проверяет таблицк блокировки. Если данная запись заблокирована кем-то другим - откат, если нет - вперёд.
Один оператор открыл форму для редактирования - данные по данной записи ему передались "грязным чтением", но при этом в таблицу блокировок добавилась соответствующая запись.
Оператор внёс изменения в базу - блокировка убралась.

Вот в таком вот духе.


guest_Dmitry   (2004-07-26 18:55:00) [23]

Ega23 ©   (26.07.04 18:51) [14]

т.е. каждый раз проверять существует ли запись вообще и в каком виде? до того, как пользователь нажмет "сохранить" запись может очень сильно измениться.....

по поводу:
>А ещё лучше - создаёшь таблицу блокировок, и блокируешь ЗАПИСЬ, >а не всю таблицу целиком
можно поподробнее применительно к Interbase?


Ega23   (2004-07-26 18:51:00) [24]

записи то постятся по нажатии кнопки пользователем. т.е. вы предлагаете вместо dbedit-ов пользоваться простыми edit-ами, например, и по нажатии кнопки записывать все изменения в базу?

Лично я всегда именно так делаю. А проверить на существование идентичной записи ты можешь в момент "накатки" в базу. А ещё лучше - создаёшь таблицу блокировок, и блокируешь ЗАПИСЬ, а не всю таблицу целиком.


guest_Dmitry   (2004-07-26 18:50:00) [25]

ИдиотЪ   (26.07.04 18:47) [11]

я TTable вообще не использую. поясни, пожалуйста, что имел в виду...


ИдиотЪ   (2004-07-26 18:49:00) [26]

guest_Dmitry
используй кешированный способ записи в базу


guest_Dmitry   (2004-07-26 18:47:00) [27]

ИдиотЪ   (26.07.04 18:41) [6]

записи то постятся по нажатии кнопки пользователем. т.е. вы предлагаете вместо dbedit-ов пользоваться простыми edit-ами, например, и по нажатии кнопки записывать все изменения в базу?

Ega23 ©   (26.07.04 18:43) [7]
ИдиотЪ   (26.07.04 18:45) [8]

использую fibDataSet


ИдиотЪ   (2004-07-26 18:47:00) [28]

а еще TTable сортировать в памяти бы научился,
ну нафига мне сервер мучить каждый раз?
ClientDataSet гораздо лучше себя ведет


Ega23   (2004-07-26 18:46:00) [29]

взять родное и приспособленное что-нибудь

А я им и не пользуюсь, потому что он мне не нравиться


ИдиотЪ   (2004-07-26 18:45:00) [30]

Ega23 ©
забить на  TTable
взять родное и приспособленное что-нибудь


Ega23   (2004-07-26 18:43:00) [31]

Вот именно этим мне всегда TTable не нравился...


ИдиотЪ   (2004-07-26 18:41:00) [32]

а вообще вредно блокировки ставить надолго!
их ставят только для изменений в течении короткого времени, когда ты должен быть уверен в том, что изменяешь.
а просто открывать и потом редактировать или курить или еще чего - получишь соответственный результат


guest_Dmitry   (2004-07-26 18:40:00) [33]

Ega23 ©   (26.07.04 18:38) [4]

стоит ReadCommited


Ega23   (2004-07-26 18:38:00) [34]

И не злоупотребляй высоким Isolation Level


guest_Dmitry   (2004-07-26 18:36:00) [35]

Игорь Шевченко ©   (26.07.04 18:34) [1]

СУБД Interbase 6.0

ИдиотЪ   (26.07.04 18:35) [2]

от чего считать начинать?


ИдиотЪ   (2004-07-26 18:35:00) [36]

сделай тайм-аут, после чего сними блокировку
зависит от задачи, так как прочитать ее можно ведь


Игорь Шевченко   (2004-07-26 18:34:00) [37]


> пользователь открыл запись в базе на редактирование


Это как ?

P.S. А база какая (СУБД) ?


Страницы:   1 2

Наверх

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