|
|
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
Народ, подскажите, пожалуйста, как реализовать правильно следующие вещи на сетевой программе: в главном prg прописано SET EXCLUSIVE OFF SET MULTILOCKS ON SET REPROCESS TO 1 База открыта с SHARED, таблицы аналогично При открытии формы справочника блокирую текую запись - LOCK(),- причем условно: сначала выясняется блокирована ли тек.запись ISRLOCKED(), если да, появляется сообщение об установленной блокировке, в противном случае блокирую тек.запись. Затем происходит следующее: 1.при повторном запуске формы, никаких сообщений об установленной блокировке нет, - записи редактируются в обоих запущенных приложений 2.во втором запущенном приложении, происходит попытка открытия тек.записи справочника, - сообщения опять же нет. При нажатии на кл.ESC, открывается форма справочника с сообщением в статус-строке, что блокировка снята. В чем может быть проблема??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 07:59 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
авторПри открытии формы справочника блокирую текую запись - LOCK(),- причем условно: сначала выясняется блокирована ли тек.запись ISRLOCKED(), если да, появляется сообщение об установленной блокировке, в противном случае блокирую тек.запись Надо быть проще и люди к тебе потянутся. Отлично работает следующая схема - безовсяких проверок делаешь Lock() Если вернула .Т. то запись заблокирована успешно, если .F. то ее заблокировал ктото другой - выдаешь сообщение и выходиш из редактирования. Главное не забывать делать UnLock ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 10:20 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
А почему бы тебе DataSession and BufferMode не воспользоваться???? - супер.... Попробуй устновить на Всех!!! формах приватные сессии, установи режим буферизации таблиц (Optimistic), и вперед!!!! TableUpdate(.T.), TableRevert(.T.) ну им ного всякого рода вкусностей.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 10:33 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
Burn Надо быть проще и люди к тебе потянутся. Отлично работает следующая схема - безовсяких проверок делаешь Lock() Если вернула .Т. то запись заблокирована успешно, если .F. то ее заблокировал ктото другой - выдаешь сообщение и выходиш из редактирования. Главное не забывать делать UnLock ;) Куда еще проще??? Вы внимательней прочтите вопрос. Это не работает, даже если сразу указывать Lock(). Я же говорю, что при запуске еще одной формы в одном приложении - сообщение не появляется. Почему - вот это вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 11:54 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
ValeriiА почему бы тебе DataSession and BufferMode не воспользоваться???? - супер.... Попробуй устновить на Всех!!! формах приватные сессии, установи режим буферизации таблиц (Optimistic), и вперед!!!! TableUpdate(.T.), TableRevert(.T.) ну им ного всякого рода вкусностей.... Спасибо за супер. Ну установил приватные сессии и что?! Я же написал, мне нужно, чтобы пользователь увидел, что запись блокирована. Это не то, что мне нужно :( Быть может вы мне подробнее объясните прелесть сего метода. К примеру, сделал как посоветовали. Запускаю две формы одной записи из словаря - и могу при этом менять данные и в одной и в другой форме. Меня это не устраивает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 12:07 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
Народ, еще будут ОТВЕТЫ? Непонятно почему не происходит очевидные вещи, вроде все сделал так, как обычно описывают, в чем может быть проблема? Что касается приведенного ответа (первый я не беру в расчет) он интересен по своему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 12:11 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
ValeriiПопробуй устновить на Всех!!! формах приватные сессии, установи режим буферизации таблиц (Optimistic), и вперед!!!! TableUpdate(.T.), TableRevert(.T.) ну им ного всякого рода вкусностей.... Valerii, с установкой приватной сесии стал реагировать на блокированную запись при запуске второй формы. Если только в этом было дело, большое тебе спасибо! :) Если я работаю с контейнером б.д., есть ли какие-нить подводные камни, в случае если,как ты советуешь, на все формы ставить приватную сессию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 12:18 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
Valerii, еще такой вопрос: при установленной приватной сессии, запускаю форму справочника из второго запущенного приложения, - в итоге в статус-строке выводится сообщение о попытке открытия записи. ПОЧЕМУ??? Ведь я отключил автоматический захват записи. Сообщения о блокированной записи нет :( Хотя в первом запущенной приложении при попытке запустить второй экземпляр формы сообщение появляется. Что за глюки? Такое впечатление, что на SET настройки Fox не обращает внимания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 12:34 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
StQFox IsRLocked() - это функция, которая проверяет не была ли данная запись заблокирована ранее в текущей DataSession . Т.е. данная функция ничего не скажет о блокировке записи другим пользователем, поскольку он работает в другой DataSession. Эта функция для "самоконтроля". Типа "а не заблокировал ли Я уже эту запись?". Код: plaintext 1. 2. 3. 4. 5. 6. Сама функция установки блокировки LOCK() или RLOCK() возвращает логическое значение .T. или .F. Вот именно его и надо отлавливать. Это и есть единственный способ узнать, была ли запись заблокирована другим пользователем или в другой DataSession. Однако по возможности, следует избегать ручных блокировок и пессимистической буферизации. Для сетевого приложения - это не есть хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 14:27 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
Владимир, спасибо за объективное замечание. Ваш подход, как практика, к решению данного вопроса? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 11:24 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
Владимир и еще такой вопрос: почему во втором запущенном приложении происходит длительная попытка открыть форму, когда я ограничел такую возможность по времени? p.s. при использовании приватной сессиии использовании функции LOCK() - для определения блокировки, - все получается. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 11:32 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
StQFoxВладимир и еще такой вопрос: почему во втором запущенном приложении происходит длительная попытка открыть форму, когда я ограничел такую возможность по времени? При использовании Private DataSession открывается новая DataSession. И в этой новой DataSession настройки, связанные с обработкой данных будут иметь значение по умолчанию. Т.е. их значение будет отлично от значений в Default DataSession. Это каксается и настройки SET REPROCESS Это значит, что при открытии Private DataSession необходимо повторить установку ряда настроек. Полный список таких настроек приведен в описании к команде SET DATASESSION. Только следует иметь в виду, что некоторые настройки имеют разное значение по умолчанию, в зависимости от того, в какой DataSession происходит работа. Например, настройка SET EXCLUSIVE по умолчанию для Default DataSession имеет значение ON, а для Private DataSession - значение OFF. На практике, желательно по возможности вообще избегать ручных блокировок. Лучше работать через буферизацию данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 12:04 |
|
||
|
Сетевая реализация - нужен совет
|
|||
|---|---|---|---|
|
#18+
Владимир, еще один момент: я открываю форму справочника (grid) и из этой формы открываю формы элемента справочника, как в таком случае увязать сессии? каждая форма открывается в своей сессии, при открытии формы элемента справочника у меня запись установлена на начале таблицы, а не на записи грида, почему, - мне понятно. Только как увязать эти две формы в одной сессии с учетом сетевой работы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 07:37 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33595445&tid=1592134]: |
0ms |
get settings: |
5ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 481ms |

| 0 / 0 |
