2012-04-25 2 views
0

Я пытаюсь прочитать таблицу foxpro, названную SCHEDULE.dbf. Данные считываются на PHP через соединитель данных, а затем отправляются на мою веб-страницу. Все это прекрасно работает, если я переименую Schedule.dbf. Любое имя, кроме расписания, похоже, работает. Однако, когда я запускаю его по имени «Расписание», я получаю сообщение «Ошибка SQL: [Microsoft] [ODBC dBase Driver] Индексный файл не найден. Сообщение SQL S0012 в SQLExecDirect». Моя единственная идея заключается в том, что Schedule является зарезервированным словом где-то, но я не могу найти его в любом списке. Я на полную потерю. Переименование таблицы на самом деле не является вариантом, поскольку оно является частью более крупной системы ввода и управления данными, которую я бы предпочел не изменять. Любые предложения?Проблема с FoxPro зарезервирована?

+0

Существует ли 'schedule.cdx' в том же каталоге? Если это так, это, вероятно, испорчено. – DaveRandom

+0

расписание.cdx есть. Не по-прежнему ли это ошибка, но когда я изменил имя Schedule to Schedul, не меняя имя cdx? – Rich

ответ

0

Я не могу сказать для dBASE (и я бы использовал поставщик OleDb от Microsoft специально для VFP, если это данные Foxpro, а не dBASE). В Foxpro система работает с парными (или даже тройными) файлами. Все соответствующие имена файлов необходимо переименовать, например, как

SCHEDULE.DBF (main data) 
SCHEDULE.CDX (compound index file for all indexes for given file) 
SCHEDULE.FPT (separate file if any memo/general data columns in the file) 

Если вы пытаетесь просто переименовать .dbf, но не остальные (.FPT встречается только если столбец данных типа памятки или вообще), то он задушит открытие файла.

Дополнительно. Если таблица является частью контейнера базы данных (через VFP), и вы пытаетесь ее открыть, файл имеет дополнительную информацию заголовка, чтобы указать на базу данных, к которой она привязана. Если он не может найти его в базе данных, это также может привести к ошибке с ошибкой.

Контейнеры базы данных в VFP имеют суффиксные значения .DBC, .DCT и .DCX.

+0

Вы поднимаете очень действительную точку, я использую dBase ODBC. Я попробую с FP OleDb! – Rich

+0

Это исправило меня, большое спасибо! – Rich

+0

Одна вещь, которую следует учитывать, - это зарезервированные слова, потому что они являются встроенной функцией VFP, и есть способы обойти их, чтобы сообщить VFP, что вы имели в виду это как файл, а не функцию. Например, у меня есть программа, которую я вызываю. Поэтому я не могу набрать «go()», и мне нужно набрать «do go». Если у меня есть параметры, мне нужно позвонить, тогда мне нужно ввести «do go with ». Также для вызова базы данных в виде литерального файла добавьте расширение в конец, если оно зарезервированное слово или даже если вы считаете, что это возможно. –

0

Ошибка: «Файл индекса не найден». Соответствующий индексный файл .cdx отсутствует в том же каталоге, что и файл .dbf. Убедитесь, что он находится в том же каталоге, или вы можете использовать FoxPro для удаления индекса из таблицы.

+0

Cdx присутствует и называется тем же. Почему это работает, когда я изменяю название расписания, чтобы сказать «Schedul»? Мне кажется, что cdx все равно не будет найден? – Rich