Конференция "Начинающим" » уведомление о блокировке записи [D7, XP, 2003]
 
  • Дмитрий (05.09.17 15:37) [0]
    Два пользователя одновременно просматривают запись, один начинает редактировать.
    Как для второго пользователя отследить блокировку записи для редактирования и вывести уведомление?
    Либо при начале редактирования первым пользователем, либо при попытке редактирования вторым?
    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]
    то кто-то уже редактирует - генерим сообщение пользователю.

    и што?

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

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

    все останется как и сейчас, только гемора (разрабу) будет больше
 
Конференция "Начинающим" » уведомление о блокировке записи [D7, XP, 2003]
Есть новые Нет новых   [118389   +37][b:0][p:0.001]