for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

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

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

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

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

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



Исправлено: ZenTigra, 25.10.20 11:02
Ratings: 0 negative/0 positive

Re: Подскажите как работать с командой Lock() в таком случае
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Подскажите как работать с командой Lock() в таком случае
of63

Сообщений: 19958
Откуда: Н.Новгород
Дата: 27.10.20 17:47:39
Не знаю как должно быть, но эксперимент (с сетевой табличкой) показывает, что блокируется единственная запись на оба алиаса:
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

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

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

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

Сообщений: 468
Дата: 31.10.20 12:37:04
Спасибо, я про это и хотел услышать.
Ratings: 0 negative/0 positive



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

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

02.12.2020 03:11:13 exec: 0.06
Mem: 1.188 Mb

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