:: Visual Foxpro, Foxpro for DOS
Подскажите как работать с командой Lock() в таком случае
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Честно говоря, ходить по граблях не хочется, и делать тесты.
Тому спрошу здесь.
Есть таблица, которая ДВАЖДЫ открывается в программе.

SELECT 0
USE Table1 ALIAS Table1
SELECT 0
USE Table1 ALIAS _Table1 AGAIN

При блокировке записи в первой таблице (ALIAS Table1) командой LOCK(),
по идее проводить повторную блокируется запись в (ALIAS _Table1) (или проверять) не нужно,
и с записью в "ALIAS _Table1" программа может свободно работать.

PS.Почему так запутанно, просто не хочу ломать код, и нарушать связи между таблицами, проще было открыть еще один экземпляр таблицы и с ним работать.



Исправлено 2 раз(а). Последнее : ZenTigra, 25.10.20 11:02
Ratings: 0 negative/0 positive
Re: Подскажите как работать с командой Lock() в таком случае
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ручная блокировка при правильной организации работы с данными в принципе нужна весьма нечасто. Но смысла накладывать блокировку на один ресурс чтобы потом предполагать что можно эксклюзивно работать с другим ресурсом - я не вижу. Там где по логике требуется блокировка (но я ещё раз повторюсь - в большинстве случаев ручная блокировка НЕ НУЖНА) - там её и нужно накладывать, и там же и снимать.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Подскажите как работать с командой Lock() в таком случае
of63

Сообщений: 25247
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Не знаю как должно быть, но эксперимент (с сетевой табличкой) показывает, что блокируется единственная запись на оба алиаса:
USE табличка ALIAS a1
GO RECORD 1
? ISRLOCK() && F
? LOCK() && T
? ISRLOCK() && T
SELECT 0
USE табличка ALIAS a2 AGAIN
GO RECORD 1
? ISRLOCK() && T - уже заблокирована
? LOCK() && T - еще раз "заблокировать" не возбраняется...

() это понятно, т.к. блокировка производится в физическом файле, а не где-то в фоксе
Ratings: 0 negative/0 positive
Re: Подскажите как работать с командой Lock() в таком случае
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
ZenTigra
ходить по граблях не хочется, и делать тесты.
Вот что когда-то записал себе в заметки после экспериментов:

Одна таблица в разных областях работает одновременно. Установка/снятие блокировки в одной области делает то же в других областях.
Но разные DataSession работают независимо.
Изменения у заблокированной записи в базу пишутся ОЧЕНЬ НЕ сразу!
Чтобы другие экземпляры их увидели сразу - приходится делать Unlock + Lock
Ratings: 0 negative/1 positive
Re: Подскажите как работать с командой Lock() в таком случае
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Спасибо, я про это и хотел услышать.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 29 (Гостей: 29)

© 2000-2024 Fox Club 
Яндекс.Метрика