Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3 4 5 6 7

уведомление о блокировке записи [D7, XP, 2003]


Дмитрий   (05.09.17 15:37

Два пользователя одновременно просматривают запись, один начинает редактировать.
Как для второго пользователя отследить блокировку записи для редактирования и вывести уведомление?
Либо при начале редактирования первым пользователем, либо при попытке редактирования вторым?
mySQL-myISAM, adQuery


Дмитрий   (05.09.17 15:50[1]

Хочу уведомить второго пользователя до того, как он начнет редактирование.


DayGaykin ©   (05.09.17 19:47[2]


> mySQL-myISAM

Нужна или колонка в таблице или отдельная таблица, которая будет отражать, редактируется сейчас запись или нет.


Inovet ©   (05.09.17 23:37[3]

> [2] DayGaykin ©   (05.09.17 19:47)

Ага, а для этой колонки или таблицы нужна ещё одна колонка или таблица. И т.д..


Дмитрий   (06.09.17 15:50[4]

Насколько я понимаю, до вызова dataset.post все оба-стописят пользователей могут одновременно увлеченно вносить правки и ... только получив ошибку при сохранении офигевают.

Какое решение наработали практика и теория?


rrrrrrr ©   (06.09.17 17:15[5]

оставь как есть.
сейчас это проблема пользователя.

а будет твоя.
ой, вася, там тетя маша открыла накладную на редактирование и пошла в магазин.
а нам срочно надо изменить в ней пуговицы на перламутровые.


Игорь Шевченко ©   (06.09.17 18:24[6]


> Какое решение наработали практика и теория?


Административное.


sniknik ©   (07.09.17 00:24[7]

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

> открыла накладную на редактирование и пошла в магазин.
хуже если закрыла программу выключив комп выдернув вилку из резетки, а признак редактирования остался.


Германн ©   (07.09.17 03:03[8]


> Дмитрий   (06.09.17 15:50) [4]
>
> Насколько я понимаю, до вызова dataset.post все оба-стописят
> пользователей могут одновременно

Так два или "стописят"?
Для "стописят" режим блокировки записи с уведомлением об этом просто нереален.


Германн ©   (07.09.17 03:08[9]

Кроме того. Вызов dataset.post эти "стописят" не используют.


MacroDenS ©   (07.09.17 09:42[10]

А если все же попробовать использовать Get_Lock/Release_Lock?


rrrrrrr ©   (07.09.17 13:01[11]

и што это даст?


Дмитрий   (07.09.17 14:45[12]


> Так два или "стописят"?

На практике, одновременно запись может быть открыта у 3-6 пользователей.
Теоретически, способны открыть одновременно до 25.
В какой-то момент таблица была разбита на две, типа менеджерская часть и производственная.
Похоже, что сейчас этого недостаточно.


macrodens ©   (07.09.17 14:51[13]

to rrrrrrr ©   (07.09.17 13:01) [11]
при попытке редактировать ставишь блокировку на запись (лично я в качестве имени блокировки указываю название таблицы + идентификатор записи).
Дальше все просто: если блокировка ставится - значит можно редактировать, если нет - то кто-то уже редактирует - генерим сообщение пользователю. Блокировка автоматически снимается при дисконекте.


macrodens ©   (07.09.17 14:51[14]

to rrrrrrr ©   (07.09.17 13:01) [11]
при попытке редактировать ставишь блокировку на запись (лично я в качестве имени блокировки указываю название таблицы + идентификатор записи).
Дальше все просто: если блокировка ставится - значит можно редактировать, если нет - то кто-то уже редактирует - генерим сообщение пользователю. Блокировка автоматически снимается при дисконекте.


macrodens ©   (07.09.17 14:52[15]

Так же не забываем после "post" снимать блокировку


Дмитрий   (07.09.17 16:42[16]

Тонкий момент, как вы предлагаете блокировать запись?


Дмитрий   (07.09.17 16:43[17]

И как автоматически снимать


ВладОшин ©   (07.09.17 18:21[18]

муторно это все
надо действительно делать административно

Пробовал как-то:

Обновлять только через процедуры, никакого лазания в таблицу напрямую,
перед вызовом сохранения перечитать данные
обновлять только то, что действительно поменялось

например,
Запись - id=1;F1=Вася;F2=Петров
User1 редактирует Вася на Петя и сохраняет - делаем только update F1, не трогаем F2 (это очевидно, но не все компоненты так работают)
User2 редактирует Петров на Иванов и сохраняет - делаем только update F2, не трогаем F1
Если обязанности юзеров не совпадают, проблем не будет.

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

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

Когда заказчику надоело, он сам попросил оставить принцип

> "кто последний тот и папа... т.е. прав"


rrrrrrr ©   (07.09.17 18:25[19]

то кто-то уже редактирует - генерим сообщение пользователю.

и што?

беспокоящее (разраба в конечном итоге) сообщение генерится уже сейчас.

будет другое, но не менее, а более беспокоящее его же сообщение.
и будет он искать блокирующие сессии и снимать их.

все останется как и сейчас, только гемора (разрабу) будет больше


Страницы: 1 2 3 4 5 6 7 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо