powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / открыть локированную таблицу на чтение
15 сообщений из 15, страница 1 из 1
открыть локированную таблицу на чтение
    #32807367
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VFoxPro 8.0:
в одном приложении:
Код: plaintext
1.
USE remainder.dbf
?FLOCK('C:\remainder')
возвращает .T. - т.е. открыл и заблокировал!
В другом приложении (после вызова первого)
Код: plaintext
USE w:\farmex\data\remainder.dbf SHARED
приводит к попытка автоматически заблокировать таблицу: "attempting to lock" и висим, пока либо не нажмем ESC, либо разлокирование в первой программе.
На VFoxPro 7.0. никах проблем подобный эксперимент не вызвал и таблица во второй программе открылась (на чтение).
Мне необходимо открывать на чтение таблицу в случае если она локирована в другой программе. Подскажите в чем причина нежелания VFoxPro 8.0. открыть таблицу хотябы на чтение и как с этим бороться?
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807369
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь путь у remainder.dbf везде один:
Код: plaintext
w:\farmex\data\remainder.dbf
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807395
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
SET REPROCESS TO  1  && дать тока одну попытку
USE .....
IF USED(...)
* открыли
ELSE
*не открылил
ENDIF
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807408
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выделю вопрос более четко:
Код: plaintext
USE имя_таблицы SHARED 
Почему VFoxPro 8.0 пытается заблокировать таблицу?
Как открыть таблицу без блокирования?
VFoxPro 7.0 не блокирует или блокирует так, что работать можно дальше!
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807409
она не открывается не из-за FLOCK(), а из-за эксклюзивного открытия в первом приложении
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807414
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hel!Riser
Код: plaintext
1.
2.
3.
4.
5.
6.
SET REPROCESS TO  1  && дать тока одну попытку
USE .....
IF USED(...)
* открыли
ELSE
*не открылил
ENDIF

Вот если я только пытаюсь во второй программе использовать use получаю ошибку!
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807424
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
USE remainder.dbf
если у вас таблица по умолчанию открываеться эксклюзивно
то на втором компе она не откроеться
а в 7 настроена по умолчанию в режиме разделения отсюда и разница
????
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807435
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Маликовона не открывается не из-за FLOCK(), а из-за эксклюзивного открытия в первом приложении
В первой и второй программе использую USE .... SHARED работает, т.е. открывает без проблем! Если в первой программе USE .... SHARED и далее FLOCK(), то во второй уже невозможен USE ... SHARED. Вроде бы таким образом FLOCK() приводит к монопольному доступу?!
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807438
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leaf USE remainder.dbf
если у вас таблица по умолчанию открываеться эксклюзивно
то на втором компе она не откроеться
а в 7 настроена по умолчанию в режиме разделения отсюда и разница
????
Провел эксперимент: в 1-ой и 2-ой программе сделал USE .. SHARED, к сожалению не лечится..
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807461
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какие то вы ужасы рассказываете
вот фрагмент мсдн для 8

When a table is locked, the table is available for both read and write access by the user who placed the lock. Other users on the network have read-only access to the table . For information on how to lock a table and prevent access to it by other users, see SET EXCLUSIVE and USE.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_foxhelp/html/lngflocklp_rp.asp
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807462
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) FLOCK() - не может привести к монопольному доступу. Она для это просто не предназначена. Эта команда блокирует только модификацию данных, но никак не чтение.

2) Если статус открытия (SHARED / EXCLUSIVE) не указывается явно в команде USE, то используется статус глобальной настройки SET EXCLUSIVE

3) Если таблица включена в контейнер базы данных, то открытие таблицы приводит к автоматическому открытию контейнера базы данных. Точнее сначала откроется контейнер базы данных, и только в случае его удачного открытия откроется указанная таблица.

На контейнер базы данных также распространяются правила совместного доступа (SHARED / EXCLUSIVE). Т.е. надо либо ДО его открытия сделать настройку SET EXCLUSIVE OFF, либо указывать явно статус открытия

OPEN DATABASE MyBase SHARED
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807490
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл, что в 8 есть дополнительная проверка

SET TABLEVALIDATE TO 0

Эта зараза пытается проверить корректность структуры таблицы в момент открытия. Отсюда попытки заблокировать таблицу.
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807491
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица remainder не входит в БД!
Я понимаю, что документация говорит о том, что монопольно (эксклюзивно) не захватывает FLOCK(), я тоже не утверждаю того, что именно так и происходит.
Сейчас попросил товарища провести подобный эксперимен на vfoxpro 8 - тоже самое. Действия (можете повторить сами)
Выполняем певую программу:
Код: plaintext
1.
USE w:\farmex\data\remainder.dbf ALIAS remainder SHARED IN  0 
?FLOCK('remainder')
Потом вторую (естественно в другом экземпляре программы foxpro 8):
Код: plaintext
USE w:\farmex\data\remainder.dbf ALIAS remainder SHARED IN  0 
На второй программе у меня весит программа и отображает надпись в статусной строке "attempting to lock"
Если не напряжно повторите на vfoxpro 8.0 тоже самое - интересно как поведет он себя?
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32807530
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЗабыл, что в 8 есть дополнительная проверка

SET TABLEVALIDATE TO 0

Эта зараза пытается проверить корректность структуры таблицы в момент открытия. Отсюда попытки заблокировать таблицу.
Очень даже помогло!
Большое спасибо, выставил (для эксперимента) на
Код: plaintext
SET TABLEVALIDATE TO  0 
и теперь могу открыть и читать с нее! Очень счастлив...
...
Рейтинг: 0 / 0
открыть локированную таблицу на чтение
    #32808620
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Danil!

Надёюсь что твой пример с FLOCK это лишь пример, и в реальной практике ты НЕ
блокируешь таблицы на неопределённый срок.

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


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