powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сетевая реализация - нужен совет
14 сообщений из 14, страница 1 из 1
Сетевая реализация - нужен совет
    #33595445
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите, пожалуйста, как реализовать правильно следующие вещи на сетевой программе:

в главном prg прописано
SET EXCLUSIVE OFF
SET MULTILOCKS ON
SET REPROCESS TO 1

База открыта с SHARED, таблицы аналогично
При открытии формы справочника блокирую текую запись - LOCK(),- причем условно: сначала выясняется блокирована ли тек.запись ISRLOCKED(), если да, появляется сообщение об установленной блокировке, в противном случае блокирую тек.запись.
Затем происходит следующее:
1.при повторном запуске формы, никаких сообщений об установленной блокировке нет, - записи редактируются в обоих запущенных приложений
2.во втором запущенном приложении, происходит попытка открытия тек.записи справочника, - сообщения опять же нет. При нажатии на кл.ESC, открывается форма справочника с сообщением в статус-строке, что блокировка снята.

В чем может быть проблема???
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33595667
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПри открытии формы справочника блокирую текую запись - LOCK(),- причем условно: сначала выясняется блокирована ли тек.запись ISRLOCKED(), если да, появляется сообщение об установленной блокировке, в противном случае блокирую тек.запись
Надо быть проще и люди к тебе потянутся. Отлично работает следующая схема - безовсяких проверок делаешь Lock() Если вернула .Т. то запись заблокирована успешно, если .F. то ее заблокировал ктото другой - выдаешь сообщение и выходиш из редактирования. Главное не забывать делать UnLock ;)
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33595700
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы тебе DataSession and BufferMode не воспользоваться???? - супер....
Попробуй устновить на Всех!!! формах приватные сессии, установи режим буферизации таблиц (Optimistic), и вперед!!!! TableUpdate(.T.), TableRevert(.T.) ну им ного всякого рода вкусностей....
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33596038
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Burn
Надо быть проще и люди к тебе потянутся. Отлично работает следующая схема - безовсяких проверок делаешь Lock() Если вернула .Т. то запись заблокирована успешно, если .F. то ее заблокировал ктото другой - выдаешь сообщение и выходиш из редактирования. Главное не забывать делать UnLock ;)

Куда еще проще??? Вы внимательней прочтите вопрос. Это не работает, даже если сразу указывать Lock(). Я же говорю, что при запуске еще одной формы в одном приложении - сообщение не появляется. Почему - вот это вопрос.
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33596091
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ValeriiА почему бы тебе DataSession and BufferMode не воспользоваться???? - супер....
Попробуй устновить на Всех!!! формах приватные сессии, установи режим буферизации таблиц (Optimistic), и вперед!!!! TableUpdate(.T.), TableRevert(.T.) ну им ного всякого рода вкусностей....

Спасибо за супер. Ну установил приватные сессии и что?! Я же написал, мне нужно, чтобы пользователь увидел, что запись блокирована. Это не то, что мне нужно :(
Быть может вы мне подробнее объясните прелесть сего метода.

К примеру, сделал как посоветовали. Запускаю две формы одной записи из словаря - и могу при этом менять данные и в одной и в другой форме. Меня это не устраивает
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33596113
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, еще будут ОТВЕТЫ? Непонятно почему не происходит очевидные вещи, вроде все сделал так, как обычно описывают, в чем может быть проблема? Что касается приведенного ответа (первый я не беру в расчет) он интересен по своему.
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33596147
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ValeriiПопробуй устновить на Всех!!! формах приватные сессии, установи режим буферизации таблиц (Optimistic), и вперед!!!! TableUpdate(.T.), TableRevert(.T.) ну им ного всякого рода вкусностей....

Valerii, с установкой приватной сесии стал реагировать на блокированную запись при запуске второй формы. Если только в этом было дело, большое тебе спасибо! :)
Если я работаю с контейнером б.д., есть ли какие-нить подводные камни, в случае если,как ты советуешь, на все формы ставить приватную сессию?
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33596219
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valerii, еще такой вопрос:
при установленной приватной сессии, запускаю форму справочника из второго запущенного приложения, - в итоге в статус-строке выводится сообщение о попытке открытия записи. ПОЧЕМУ??? Ведь я отключил автоматический захват записи. Сообщения о блокированной записи нет :( Хотя в первом запущенной приложении при попытке запустить второй экземпляр формы сообщение появляется. Что за глюки? Такое впечатление, что на SET настройки Fox не обращает внимания.
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33596767
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StQFox
IsRLocked() - это функция, которая проверяет не была ли данная запись заблокирована ранее в текущей DataSession .

Т.е. данная функция ничего не скажет о блокировке записи другим пользователем, поскольку он работает в другой DataSession. Эта функция для "самоконтроля". Типа "а не заблокировал ли Я уже эту запись?".

Код: plaintext
1.
2.
3.
4.
5.
6.
select MyTab
?IsRLocked()
?RLOCK()
?IsRLocked()
UNLOCK
?IsRLocked()

Сама функция установки блокировки LOCK() или RLOCK() возвращает логическое значение .T. или .F. Вот именно его и надо отлавливать. Это и есть единственный способ узнать, была ли запись заблокирована другим пользователем или в другой DataSession.

Однако по возможности, следует избегать ручных блокировок и пессимистической буферизации. Для сетевого приложения - это не есть хорошо.
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33598818
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир, спасибо за объективное замечание.
Ваш подход, как практика, к решению данного вопроса?
Спасибо.
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33598860
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир и еще такой вопрос: почему во втором запущенном приложении происходит длительная попытка открыть форму, когда я ограничел такую возможность по времени?

p.s. при использовании приватной сессиии использовании функции LOCK() - для определения блокировки, - все получается. Спасибо!
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33598982
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StQFoxВладимир и еще такой вопрос: почему во втором запущенном приложении происходит длительная попытка открыть форму, когда я ограничел такую возможность по времени?
При использовании Private DataSession открывается новая DataSession. И в этой новой DataSession настройки, связанные с обработкой данных будут иметь значение по умолчанию. Т.е. их значение будет отлично от значений в Default DataSession. Это каксается и настройки SET REPROCESS

Это значит, что при открытии Private DataSession необходимо повторить установку ряда настроек.

Полный список таких настроек приведен в описании к команде SET DATASESSION.

Только следует иметь в виду, что некоторые настройки имеют разное значение по умолчанию, в зависимости от того, в какой DataSession происходит работа. Например, настройка SET EXCLUSIVE по умолчанию для Default DataSession имеет значение ON, а для Private DataSession - значение OFF.

На практике, желательно по возможности вообще избегать ручных блокировок. Лучше работать через буферизацию данных.
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33601079
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир, еще один момент: я открываю форму справочника (grid) и из этой формы открываю формы элемента справочника, как в таком случае увязать сессии?
каждая форма открывается в своей сессии, при открытии формы элемента справочника у меня запись установлена на начале таблицы, а не на записи грида, почему, - мне понятно. Только как увязать эти две формы в одной сессии с учетом сетевой работы?
...
Рейтинг: 0 / 0
Сетевая реализация - нужен совет
    #33601167
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, разобрался :)
помогла статья http://www.foxclub.ru/articles/index.php?id=32
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сетевая реализация - нужен совет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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