Форум » GUI » hbrowse при совместном использовании » Ответить

hbrowse при совместном использовании

vladru: Использую базу SHARED Такая проблема нарисовалась: Если один пользователь исправил запись в HBrowse и даже ушел с неё (стрелочками) запись всё-равно остается заблокированной и другой пользователь не может её редактировать - при update выскакивает сообщение "Can`t lock the record" В частности это проблема проявляется и в dbchw (от которой есть исходники). Если открыть одну и ту же базу в разных областях, то изменив запись в одном окне и сдвинувшись с неё, в другом окне эту запись не изменить... Есть советы, а лучше примеры , как бороться... ?

Ответов - 9

Vlad04: Ну кто же для тебя будет примеры придумывать, сам выложи самодостаточный пример. Каждый способ имеет недостатки. Я делаю так: запись блокируется только на мгновенье внесения изменения. Два пользователя теоретически могут открыть одну запись для изменения не мешая друг другу, сохраняться изменения, которые сделает - последний.

AlexMyr: vladru пишет: Если один пользователь исправил запись в HBrowse и даже ушел с неё (стрелочками) запись всё-равно остается заблокированной и другой пользователь не может её редактировать dbUnlock() делаете?

vladru: AlexMyr нет не делаю, а где его делать ? (Я же сам не контролирую редактирование и перемещение по browse...) ИХМО надо добавить UNLOCK после 1847 строки в hbrowse.prg (в исходниках hwgui-2.18), но не лезть же туда своими грязными руками...


AlexMyr: vladru пишет: нет не делаю, а где его делать ? (Я же сам не контролирую редактирование и перемещение по browse...) Как это не контролируете? Смотрите пример hwgui\samples\browse_1.prg конструкцию ON POSCHANGE {||...

vladru: AlexMyr Я не точно выразился... Я не хотел бы контролировать. Полагаю что это (unlock) должен делать browse если запись менялась и была залочена. Ну не делать же Unlock после каждого перемещения.... Пример конечно посмотрю еще разок. Я всё-же залез грязными руками в hbrowse.prg и добавил после 1847 строки: ( ::alias ) -> ( dbUnLock() ) Мой пример стал работать корректно. Но это конечно не выход. Вот ищу какой метод browse вызывается ПОСЛЕ редактирования записи.

AlexMyr: vladru пишет: Полагаю что это (unlock) должен делать browse если запись менялась и была залочена. Что тогда должен делать и контролировать програмер? А если надо чтоб было залочено десятки записей, а browse их сразу разлочивает? Откуда любому контролу знать что вам надо в конкретной ситуации?

AlexMyr: vladru пишет: Я всё-же залез грязными руками в hbrowse.prg и добавил после 1847 строки: ( ::alias ) -> ( dbUnLock() ) А если в browse поля из разных баз, что тогда в данном случае?

vladru: AlexMyr Согласен. Я не посмотрел что dbUnlock все блокировки снимает, а надо только с текущей записи снять... Ну и вообще я понимаю что мне в библиотеку лезть не надо... Просто убедился что запись в этом месте блокируется, а блокировка потом не снимается.... Наверно правильным будет определить в своей проге bUpdate и в нем уже разбираться с блокировками.

alkresin: AlexMyr пишет: А если надо чтоб было залочено десятки записей, а browse их сразу разлочивает? DbrUnlock( nRecNumber ), вроде, одну указанную запись разблокирует - надо будет эту функцию вставить.



полная версия страницы