Visual FoxPro - вопрос | |
---|---|
Andrey V. Borisov Автор Сообщений: 24 Дата регистрации: 27.09.2000 |
Доброе время суток!
Прошу совета по следующей проблеме. У данной таблицы существует cdx-файл. Я удаляю этот cdx-файл. В этом случае таблица из среды открывается без проблем. Если же я пытаюсь ее открыть из своей проги то возникает ошибка и таблица не открывается в текущей рабочей области. Возможно ли сделать так, чтобы в проге открытие этой таблицы отрабатывало так же как из среды? Спасибо. Андрей. |
RE: Visual FoxPro - вопрос | |
---|---|
Andrey_S Сообщений: 1 Дата регистрации: 27.09.2000 |
Попробуй такой вариант: вместо грубого удаления CDX
используй команду DELETE TAG ALL, тогда и CDX будет удалён и пометка о его наличии снимется |
RE: Visual FoxPro - вопрос | |
---|---|
СВ |
, или отслеживай ошибку открытья таблицы (номер в хелпе, где-то)
|
RE: Visual FoxPro - вопрос | |
---|---|
Andrey V. Borisov Автор Сообщений: 24 Дата регистрации: 27.09.2000 |
Ошибка 1707. Я ее обрабатываю программа не прекращает работу, но таблица не открывается, а нужно чтобы она открылась
|
RE: Visual FoxPro - вопрос | |
---|---|
Andrey V. Borisov Автор Сообщений: 24 Дата регистрации: 27.09.2000 |
DELETE TAG ALL я попробую, но проблема все равно полностью не решиться. Смысл следующий: юзер убивает cdx перед заходом в программу, а при загрузке программы она определяет, что нет cdx и генерит их снова.
|
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 - удаляй признак существования индексного файла в таблице и строй индексы заново |
RE: Visual FoxPro - вопрос | |
---|---|
Sergio |
Попробуйте в головной программе поставить "SET SAFETY OFF",
при этом она перестанет надоедать вопросами типа "Переписывать TAG ?", " А вы действительно хотите заместить файл,,, ?" и т.д. Должно сработать. Успехов. |
RE: Visual FoxPro - вопрос | |
---|---|
Andrey V. Borisov Автор Сообщений: 24 Дата регистрации: 27.09.2000 |
Спасибо, кажется то, что нужно!
|
Прошу ответить | |
---|---|
Sergey Titow Сообщений: 2242 Дата регистрации: 12.09.2000 |
Прошу ответить на вопрос: что заставляет удалять CDX при запуске юзеровского приложения?
|
RE: Прошу ответить | |
---|---|
св |
не возможность открыть .cdx в принципе.
потому, что другая ошибка (вместо .cdx может быть все что угодно, кроме собственно индекса), а .cdx на диске существует еще, и за жизнь цепляется |
© 2000-2024 Fox Club  |