powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как узнать редактируется поле другим пользователем или нет?
14 сообщений из 14, страница 1 из 1
Как узнать редактируется поле другим пользователем или нет?
    #32927448
RaufM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть база данных на сервере, содержащая несколько таблиц. На клиенте открывается одна таблица, используется удаленное представление. Свойства уд.пред-я: UpdateType=1,SendUpdates=TRUE,SourceType=2,для всех полей Updatable=TRUE
Редактирование данных происходит на форме. Буферизация=3(или 5). Перед редактированием записи блокирую ее LOCK(). В этоже время на другой машине делаю тоже самое (т.е. вхожу в режим редактирования той же записи) - никаких сообщений что запись блокирована другим пользователем или что-то подобное. Данные спокойно записываются по TABLEUPDATE(.T.,.T.).

В статье Работа в локальной сети (http://]http://www.foxhelp.ru/RabotaVLokal'nojjSetiVFP6?v=6zi) написано:
"Обновление происходит явно - командой TABLEUPDATE(), или неявно при перемещении указателя курсора на другую строку или закрытием таблицы. VFP сгенерирует ошибку, если при обновлении окажется, что другой пользователь уже успел изменить данные, пока вы их редактировали. Вы можете отказаться от обновления или принудительно записать изменения. Поэтому, вам нужно сообщать пользователю перед редактированием данных, что строка уже редактируется другим, или что обновление строки уже произведено другим пользователем."

Перерыл весь форум, но так и непонял. Как определить редактируется в данный момент одна и таже запись разными юзерами, заблокирована она или нет. И как же это делается "сообщать пользователю перед редактированием данных, что строка уже редактируется другим, или что обновление строки уже произведено другим пользователем" .
Может это делается не через удал.пред-е, или какие установки???
Поясните пожалуйста ход действий, если можно поподробнее!!
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32927480
RaufM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сообщение ВладимираМ

Re: Блокировка в представлении
Владимир Максимов

Москва

На форуме с: 02.09.2000 написано 21.01.05 10:05 Ответить::

--------------------------------------------------------------------------------

По сути View - это результат выполнения команды Select-SQL. Поэтому каждый пользователь имеет свою собственную выборку (копию данных). Как следствие, абсолютно бессмысленно пытаться блокировать записи во View. Нет. Это не запрещено. Просто с выборкой всегда работает только один пользователь. У другого пользователя - другая выборка.

Как сделать чтобы другой user не мог изменить редактируемую запись.

А не надо этого делать вообще! Твои View находятся в режиме оптимистической буферизации. Вот и надо "разруливать" конфликты совместного доступа в момент попытки сброса изменени

И как это собственно "разруливать"
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32927505
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для этого и существует пессимистическая блокировка... То есть Вы можете явно заблокировать запись перед началом редактирования - а всем другим пользователям включить проверку перед началом редактирования на захват записи другим пользователем...

Но такой способ пройдет только с данными VFP и без всяких удаленный представлений...
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32927710
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос повторяется с завидной регулярностью. Почитайте по ссылке

http://www.sql.ru/forum/actualthread.aspx?tid=127239#1005175

Там речь идет о Remote View, но для Local View все абсолютно то же самое.

Несколько тезисов:

-) Не надо блокировать запись вручную
-) О том, что запись изменена другим пользователем можно узнать при попытке сброса своих изменений
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32927922
RaufM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимируМ
По вышеприведенной ссылке можно понять о том, что кто-то редактировал запись только после того, как выдаем TableUpdate, т.е. после редактирования этой записи и выдачи команды "Сохранить изменения". А как же быть насчет:
"сообщать пользователю перед редактированием данных, что строка уже редактируется другим".
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928094
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RaufMА как же быть насчет:
"сообщать пользователю перед редактированием данных, что строка уже редактируется другим".
А зачем?

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

Что будет, если два пользователя "одновременно" редактируют одну и ту же запись?

Ну, в самом процессе редактирования ничего плохого не будет. Они друг другу не мешают. Проблему будут в момент сброса изменений. А вот тут масса "тонких" моментов:

-) Пользователи редактировали разные поля одной и той же записи - никаких проблем. Разрешаем модификацию без ограничений.

-) Пользователи редактировали общие поля, но это были не "критичные" поля. Ну, например, они редактировали Фамилию клиента. Вряд ли имеет смысл что-то запрещать. Скорее, тоже можно разрешить модификацию без ограничений

-) Пользователи редактировали общие "критичные" поля.

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

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

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

Следующий вопрос, который надо себе задать: А насколько вообще вероятна подобная ситуация?

Как правило, пользователи не лезут в "чужие" данные. Им и так хватает работы. Разумеется, если это не обусловлено спецификой задачи.

Т.е. в большинстве случаев, ситуация редактирования разными пользователями одной и той же записи маловероятна. И забивать себе голову сложными алгоритмами "разруливания" подобных ситуаций не имеет смысла. Либо просто писать поверх, либо полный откат и повторный ввод для второго пользователя.
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928167
RaufM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимируМ
Спасибо за ответ.
В принципе пока можно работать по вашей схеме
"Либо просто писать поверх, либо полный откат и повторный ввод для второго пользователя"

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

После редактирований, удалений записей и добавления новых что-то не получается обновить данные на клиенте, т.е. хотелось бы видеть самые актуальные данные, что нужно сделать (применительно к вышеописанной задаче)
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928294
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RaufMПосле редактирований, удалений записей и добавления новых что-то не получается обновить данные на клиенте, т.е. хотелось бы видеть самые актуальные данные, что нужно сделать (применительно к вышеописанной задаче)
Не совсем понял проблему. Если дается команда Requery("MyView"), то обновляется содержимое MyView полностью. Т.е. берутся актуальные данные, те, что сейчас реально в базе данных. В этот момент клиент и видит, что есть реально в базе данных.
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928461
RaufM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так и делал Requery(...).
Но срабатывает только со второго раза.
Т.е., редактирую запись на одной машине, сохраняю, сообщается Requery(...)=1, в это время на другой машине - изменения не отражены, даю на ней Requery(...) - тогда появляются изменения, если не даю - ничего. Может быть где-то должно быть типа AutoRefresh или использовать SET REFRESH TO nSeconds, но это наверное будет сильно напрягать процессор?
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928527
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз ВНИМАТЕЛЬНО прочти "большой" пост ВладимираМ, если уж так хочеться автоматом обновлять данные, то обычно используется таймер кот. перезапрашивает данные, но это не решение проблемы в случае редактирования одной записи, те давай считать, что пользователей работающих с одной записью не два, а N, тогда N-ый юзер никогда не внесет то что хочет, поскольку пока до него дойдет очередь, все предыдущие могут передумать и начать изменять снова и наш юзер только и будет смотреть как данные изменяются.
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928570
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RaufMя так и делал Requery(...).
Но срабатывает только со второго раза.
Т.е., редактирую запись на одной машине, сохраняю, сообщается Requery(...)=1, в это время на другой машине - изменения не отражены, даю на ней Requery(...) - тогда появляются изменения, если не даю - ничего. Может быть где-то должно быть типа AutoRefresh или использовать SET REFRESH TO nSeconds, но это наверное будет сильно напрягать процессор?
А ты еще обижаешся, почему часто посылают... читать HELP?

View - это по сути результат выполнения команды Select-SQL. Т.е. это не исходные данные . Это выборка (некая копия) из исходных данных, которая существует только у одного клиента.

Выполни на своей машине простой запрос по любой таблице вроде

SELECT * FROM MyTable INTO CURSOR curTest NOFILTER

А теперь измени содержимое этой самой таблицы MyTable. Тебя ведь не удивляет, что содержимое curTest никак не изменилось? Откуда тогда такое недоумение по поводу View?

Чтобы изменилось содержимое curTest, надо выполнить этот запрос еще раз . Т.е., применительно к View, надо выполнить Requery() после изменения данных.
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928709
RaufM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так в том-то и дело, что Requery() даю после изменения данных и TABLEUPDATE():

...
TABLEUPDATE()
Requery()
ThisForm.Refreresh
....

и ничего

а когда
...
TABLEUPDATE()
Requery()
ThisForm.Refreresh
....
*потом еще раз
Requery()
....

тогда - есть

В принципе дать два раза Requery() не проблема.

Спасибо за помощь!
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32928736
RaufM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, не так написал. Requery() делать два раза нет толка , нужно на других машинах периодически обновлять представления!
...
Рейтинг: 0 / 0
Как узнать редактируется поле другим пользователем или нет?
    #32929798
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi RaufM!

> Requery() делать два раза нет толка , нужно на других машинах
> периодически обновлять представления!

Для того чтобы получить свежие данные - да, но в общем случае этого не
требуется (в смысле автоматом делать - добавь кнопку "обновить" и по её
нажатию и обновляй выборку!). Ну оставил пользователь комп не закрыв прогу -
пошёл обедать там или ещё что - а она постоянно запрашивает и запрашивает
данные загружая сеть и сервер - ничего хорошего в этом нету!

P.S. Порой после прочтения такой непростой темы надо подумать пару дней,
поэкспериментировать, чтобы понять что же хотел сказать автор.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как узнать редактируется поле другим пользователем или нет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]