Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / открыть локированную таблицу на чтение / 15 сообщений из 15, страница 1 из 1
01.12.2004, 12:29
    #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
01.12.2004, 12:30
    #32807369
Danil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
Извиняюсь путь у remainder.dbf везде один:
Код: plaintext
w:\farmex\data\remainder.dbf
...
Рейтинг: 0 / 0
01.12.2004, 12:38
    #32807395
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
Код: plaintext
1.
2.
3.
4.
5.
6.
SET REPROCESS TO  1  && дать тока одну попытку
USE .....
IF USED(...)
* открыли
ELSE
*не открылил
ENDIF
...
Рейтинг: 0 / 0
01.12.2004, 12:42
    #32807408
Danil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
Выделю вопрос более четко:
Код: plaintext
USE имя_таблицы SHARED 
Почему VFoxPro 8.0 пытается заблокировать таблицу?
Как открыть таблицу без блокирования?
VFoxPro 7.0 не блокирует или блокирует так, что работать можно дальше!
...
Рейтинг: 0 / 0
01.12.2004, 12:42
    #32807409
открыть локированную таблицу на чтение
она не открывается не из-за FLOCK(), а из-за эксклюзивного открытия в первом приложении
...
Рейтинг: 0 / 0
01.12.2004, 12:43
    #32807414
Danil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
Hel!Riser
Код: plaintext
1.
2.
3.
4.
5.
6.
SET REPROCESS TO  1  && дать тока одну попытку
USE .....
IF USED(...)
* открыли
ELSE
*не открылил
ENDIF

Вот если я только пытаюсь во второй программе использовать use получаю ошибку!
...
Рейтинг: 0 / 0
01.12.2004, 12:46
    #32807424
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
USE remainder.dbf
если у вас таблица по умолчанию открываеться эксклюзивно
то на втором компе она не откроеться
а в 7 настроена по умолчанию в режиме разделения отсюда и разница
????
...
Рейтинг: 0 / 0
01.12.2004, 12:48
    #32807435
Danil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
Дмитрий Маликовона не открывается не из-за FLOCK(), а из-за эксклюзивного открытия в первом приложении
В первой и второй программе использую USE .... SHARED работает, т.е. открывает без проблем! Если в первой программе USE .... SHARED и далее FLOCK(), то во второй уже невозможен USE ... SHARED. Вроде бы таким образом FLOCK() приводит к монопольному доступу?!
...
Рейтинг: 0 / 0
01.12.2004, 12:49
    #32807438
Danil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
leaf USE remainder.dbf
если у вас таблица по умолчанию открываеться эксклюзивно
то на втором компе она не откроеться
а в 7 настроена по умолчанию в режиме разделения отсюда и разница
????
Провел эксперимент: в 1-ой и 2-ой программе сделал USE .. SHARED, к сожалению не лечится..
...
Рейтинг: 0 / 0
01.12.2004, 12:55
    #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
01.12.2004, 12:55
    #32807462
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
1) FLOCK() - не может привести к монопольному доступу. Она для это просто не предназначена. Эта команда блокирует только модификацию данных, но никак не чтение.

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

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

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

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

SET TABLEVALIDATE TO 0

Эта зараза пытается проверить корректность структуры таблицы в момент открытия. Отсюда попытки заблокировать таблицу.
...
Рейтинг: 0 / 0
01.12.2004, 13:03
    #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
01.12.2004, 13:15
    #32807530
Danil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
открыть локированную таблицу на чтение
ВладимирМЗабыл, что в 8 есть дополнительная проверка

SET TABLEVALIDATE TO 0

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

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

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


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