:: Архив конференции по VFP до 2005 года
Visual FoxPro - вопрос
Andrey V. Borisov
Автор

Сообщений: 24
Дата регистрации: 27.09.2000
Доброе время суток!
Прошу совета по следующей проблеме.
У данной таблицы существует cdx-файл.
Я удаляю этот cdx-файл. В этом случае таблица из среды
открывается без проблем. Если же я пытаюсь ее открыть из
своей проги то возникает ошибка и таблица не открывается в
текущей рабочей области.
Возможно ли сделать так, чтобы в проге открытие этой таблицы
отрабатывало так же как из среды?

Спасибо.
Андрей.
Ratings: 0 negative/0 positive
RE: Visual FoxPro - вопрос
Andrey_S

Сообщений: 1
Дата регистрации: 27.09.2000
Попробуй такой вариант: вместо грубого удаления CDX
используй команду DELETE TAG ALL, тогда и CDX будет
удалён и пометка о его наличии снимется
Ratings: 0 negative/0 positive
RE: Visual FoxPro - вопрос
СВ
, или отслеживай ошибку открытья таблицы (номер в хелпе, где-то)
Ratings: 0 negative/0 positive
RE: Visual FoxPro - вопрос
Andrey V. Borisov
Автор

Сообщений: 24
Дата регистрации: 27.09.2000
Ошибка 1707. Я ее обрабатываю программа не прекращает работу, но таблица не открывается, а нужно чтобы она открылась
Ratings: 0 negative/0 positive
RE: Visual FoxPro - вопрос
Andrey V. Borisov
Автор

Сообщений: 24
Дата регистрации: 27.09.2000
DELETE TAG ALL я попробую, но проблема все равно полностью не решиться. Смысл следующий: юзер убивает cdx перед заходом в программу, а при загрузке программы она определяет, что нет cdx и генерит их снова.
Ratings: 0 negative/0 positive
RE: Visual FoxPro - вопрос
ВладимирМ

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Все дело в том, что в заголовке самого DBF файла есть признак: есть или нет CDX файл.
Так вот, если в заголовке есть признак индексного файла, а реально его нет, то возникает сообщение об ошибке и СТИРАЕТСЯ признак существования индексного файла. При повторной попытке открытия все открывается нормально.
Поэтому есть 2 способа решения:

Первый способ:

LOCAL lnNumberError
ON ERRON lnNumberError = Error()
lnNumberError = 0
USE MyTable

if lnNumberError=1707 and not used('MyTable')
USE MyTable
endif

Второй способ:

m.fp_in = FOPEN("MyTable.DBF",2)
if m.fp_in > 0
=FSEEK(m.fp_in,28)
=FWRITE(m.fp_in,CHR(0)) && удаление признака существования индекса
=FCLOSE(m.fp_in)
else
*Не удалось открыть файл как файл низкого уровня
endif
delete file MyTable.CDX
use MyTable exclusive
* далее строишь индексы заново

Собственно можешь объединить 2 этих способа: если код ошибки 1707 - удаляй признак существования индексного файла в таблице и строй индексы заново
Ratings: 0 negative/0 positive
RE: Visual FoxPro - вопрос
Sergio
Попробуйте в головной программе поставить "SET SAFETY OFF",
при этом она перестанет надоедать вопросами типа "Переписывать TAG ?",
" А вы действительно хотите заместить файл,,, ?" и т.д. Должно сработать.
Успехов.
Ratings: 0 negative/0 positive
RE: Visual FoxPro - вопрос
Andrey V. Borisov
Автор

Сообщений: 24
Дата регистрации: 27.09.2000
Спасибо, кажется то, что нужно!
Ratings: 0 negative/0 positive
Прошу ответить
Sergey Titow

Сообщений: 2242
Дата регистрации: 12.09.2000
Прошу ответить на вопрос: что заставляет удалять CDX при запуске юзеровского приложения?
Ratings: 0 negative/0 positive
RE: Прошу ответить
св
не возможность открыть .cdx в принципе.
потому, что другая ошибка
(вместо .cdx может быть все что угодно, кроме собственно индекса),
а .cdx на диске существует еще, и за жизнь цепляется
Ratings: 0 negative/0 positive


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

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

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