Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Проблемы с блокировкой баз  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
Через foxpro блокируют базу на запись командой Flock(), и я через VFP 9.0 не могу открыть эту базу даже на чтение, через фокс она нормально открывается.

VFP 9.0 выдает ошибку

File 'clerror.prg' does not exist. 

Что это за файл и где он должен быть? Спасибо.
20 май 09, 10:10    [7202002]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
проходящий.
Guest
Alex-ZZZ
Через foxpro блокируют базу на запись командой Flock(), и я через VFP 9.0 не могу открыть эту базу даже на чтение, через фокс она нормально открывается.

VFP 9.0 выдает ошибку

File 'clerror.prg' does not exist. 

Что это за файл и где он должен быть? Спасибо.
Это у Вас надо спрашивать где у Вас такой файл и где он должен быть. Мы об этом не имеем и не можем иметь ни малейшего понятия. Предположить можем, что это обработчик ошибок, который у Вас куда-то затерялся.
20 май 09, 10:18    [7202052]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
Нет, имееться ввиду, что при попытке открыть просто через VFP, а не через мою программу. Тоесть этот файл должен быть гдето в самом VFP, как я понимаю.
20 май 09, 10:25    [7202103]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
проходящий.
Guest
Alex-ZZZ
Нет, имееться ввиду, что при попытке открыть просто через VFP, а не через мою программу. Тоесть этот файл должен быть гдето в самом VFP, как я понимаю.
Вы можете понимать все, что угодно, но от этого положение дел не изменится и самписный файл в стандлартной поставке фокса не появится. Можно предположить, что Вы открываете таблицу из базы данных, в которой и использован такой обработчик. В базе данных (не в таблице!) уже все проверили?
20 май 09, 10:29    [7202134]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
Да я просто копировал таблицу на сеть, блокировал ее через досовский фокс и пытался открыть через VFP 9.0 файл-открыть-имя таблицы, если ограничить длительность попытки подключения 10 секунд (SET REPROCESS TO 10 SECONDS) то выскакивала ошибка описанная вверху, если не ограничивать висит долго и упорно. Через досовский фокс все нормально открываеться, как только снимаешь блокировку то и через VFP открываеться.

Файл не самописный. Это как я понимаю может быть, что этого prg у меня не хватает в стандартной программе VFP.

Наверное нужно узнать где он должен находиться и взять его гдето и положить туда. Может вы можете поиском посмотреть где у вас он лежит и есть ли вообще и скинуть его мне. Спасибо.
20 май 09, 10:49    [7202272]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
проходящий.
Guest
Alex-ZZZ
Файл не самописный. Это как я понимаю может быть, что этого prg у меня не хватает в стандартной программе VFP.

Наверное нужно узнать где он должен находиться и взять его гдето и положить туда. Может вы можете поиском посмотреть где у вас он лежит и есть ли вообще и скинуть его мне. Спасибо.
Третий раз пишу - нету в стандартной поставке фокса таких фaйлов, нет.
20 май 09, 10:57    [7202342]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
Ясно, тогда вопрос в другом. Почему VFP не может просматривать в режиме SHARED таблицы заблокированые FLOCK() ?
20 май 09, 11:17    [7202498]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
проходящий.
Guest
Alex-ZZZ
Ясно, тогда вопрос в другом. Почему VFP не может просматривать в режиме SHARED таблицы заблокированые FLOCK() ?
Потому, что эта функция блокирует весь файл.
20 май 09, 11:20    [7202531]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Что у вас возвращает

?"Error = ", ON("Error")

Если там окажется что-то, отличное от пустой строки, то дайте команду

ON ERROR

без параметров, чтобы отключить ваш собственный обработчик ошибок. Вероятно, вы где-то подключили свой собственный обработчик ошибок и забыли его выключить.
20 май 09, 11:28    [7202593]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Alex-ZZZ
Ясно, тогда вопрос в другом. Почему VFP не может просматривать в режиме SHARED таблицы заблокированые FLOCK() ?

Из-за настройки

SET TABLEVALIDATE

Дело в том, что если эта настройка установлена в не четное значение (т.е. включено значение 1), то при открытии таблицы будет предпринята попытка заблокировать заголовок таблицы для проверки факта соответствия реального количества записей и того количества записей, которое записано в заголовке таблицы. А, поскольку заголовок таблицы оказался заблокирован командой FLOCK(), то это сделать становится невозможно. Как следствие, таблица вообще не открывается.

Исправить эту ситуацию можно добавив значение 4 в настройку SET TABLEVALIDATE. Она как раз и призвана игнорировать блокировку другим процессом. Т.е. в этом случае проверка просто не будет выполнена, но и сообщений об ошибках не будет.

По умолчанию, SET TABLEVALIDATE установлено в значение 3. Значит, надо сделать такую настройку

SET TABLEVALIDATE TO 3+4

Совсем отключать эту настройку - не стоит. Хотя это тоже позволит открывать таблицы, заблокированные другим пользователем.

Текущее значение настройки можно посмотреть так

?SET("TABLEVALIDATE")
20 май 09, 11:41    [7202715]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
проходящий.
Alex-ZZZ
Ясно, тогда вопрос в другом. Почему VFP не может просматривать в режиме SHARED таблицы заблокированые FLOCK() ?
Потому, что эта функция блокирует весь файл.


Вроде бы нет. Вот вырезка из хелпа про эту функцию.
Когда таблица блокирована, она становится доступной для чтения и записи только пользователю, установившему блокировку. Остальные пользователи сети имеют к таблице доступ только по чтению.

Я же не могу открыть даже на чтение.

ВладимирМ
Проверил. Ну и до этого я уже проверял, что если не ограничивать время попыток доступу то сообщение об ошибке не выскакивает, просто висит и все так как по умолчанию VFP будет пытаться подключиться бесконечно долго.
20 май 09, 11:42    [7202728]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
ВладимирМ
Alex-ZZZ
Ясно, тогда вопрос в другом. Почему VFP не может просматривать в режиме SHARED таблицы заблокированые FLOCK() ?

Из-за настройки

SET TABLEVALIDATE

Дело в том, что если эта настройка установлена в не четное значение (т.е. включено значение 1), то при открытии таблицы будет предпринята попытка заблокировать заголовок таблицы для проверки факта соответствия реального количества записей и того количества записей, которое записано в заголовке таблицы. А, поскольку заголовок таблицы оказался заблокирован командой FLOCK(), то это сделать становится невозможно. Как следствие, таблица вообще не открывается.

Исправить эту ситуацию можно добавив значение 4 в настройку SET TABLEVALIDATE. Она как раз и призвана игнорировать блокировку другим процессом. Т.е. в этом случае проверка просто не будет выполнена, но и сообщений об ошибках не будет.

По умолчанию, SET TABLEVALIDATE установлено в значение 3. Значит, надо сделать такую настройку

SET TABLEVALIDATE TO 3+4

Совсем отключать эту настройку - не стоит. Хотя это тоже позволит открывать таблицы, заблокированные другим пользователем.

Текущее значение настройки можно посмотреть так

?SET("TABLEVALIDATE")


Да проблема решилась большое спасибо !!!
20 май 09, 11:51    [7202799]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с блокировкой баз  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Alex-ZZZ
ВладимирМ
Проверил. Ну и до этого я уже проверял, что если не ограничивать время попыток доступу то сообщение об ошибке не выскакивает, просто висит и все так как по умолчанию VFP будет пытаться подключиться бесконечно долго.


Совет по ON ERROR - это ответ на вопрос темы про файл "File 'clerror.prg' does not exist". Очевидно, что у вас произошел перехват ошибки и попытка ее обработки.

Если FoxPro не находит функцию или процедуру с именем CLERROR, то он предполагает, что речь идет о файле с таким же именем. Вот и появляется соответствующее сообщение об ошибке.

Судя по имени, это должна была быть какая-то переменная, которую использовали как функцию. Дишние скобки указали.
20 май 09, 12:13    [7202939]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить