![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание индекса таблицы dBaseIII+ [dBase, FoxPro]
Ada © (2003-09-25 11:29:00)
Подскажите пожалуйста как создать индекс для таблицы dBaseIII+ программным путем, у меня выдается масса ошибок.
При создании индекса через Database Desktop все получается отлично.
Term (2003-09-26 09:43:00) [21]
а откуда такая необходимость именно dBaseIII+, пусть тогда dBaseIV использует. У меня таких проблем ни разу не всплывало, лучше сразу создать все индексы в design time и подключать в нужное время, а строить и удалять, лишь в том случае если с ними проблемы
Ильш (2003-09-26 08:50:00) [22]
> Откуда в dBaseIII+ индексы mdx
Надо это спросит у тех кто писал процедуру AddIndex, потому что, по всей видимости, эй пофиг dBaseIII+ или еще что.
В описании dbf сказано, что mdx есть тока у dBaseIV, но реально это оказалось не так. Я ж не просто придумал, а проверилвсе это !!!
Anatoly Podgoretsky (2003-09-26 07:39:00) [23]
Ильш © (26.09.03 06:11) [24]
Откуда в dBaseIII+ индексы mdx
Ильш (2003-09-26 06:11:00) [24]
Как это так вы удаляли старый индекс, что появилось сообщение Index already exists.
Table1.DatabaseName:="D:\";
Table1.TableName:="opl.DBF";
Table1.DeleteIndex("OPL");
Больше ничего не надо. Все нормально удаляется. И еще зачем вы ищете его. В реальной программе надо индекс создавать один раз, если его нет. Зачем постоянно то его создавать-удалять.
DeleteIndex - работает так: удаляет физический mdx файл и в dbf переключает флаг отвечающий за наличие или отсутствие индекса mdx.
Ada (2003-09-25 17:28:00) [25]
Создание индекса у меня стоит уже в try except
Sandman25 (2003-09-25 17:14:00) [26]
Есть идея поставить создание индекса в try except. Или при открытии опять будет ошибка?
Ada (2003-09-25 16:53:00) [27]
Да делаю, но индекс не находится
Sandman25 (2003-09-25 16:33:00) [28]
[19] Ada (25.09.03 16:18)
А Вы делаете Table1.IndexDefs.Update перед этим?
Ada (2003-09-25 16:18:00) [29]
Когда я пытаюсь осуществить поиск индекса Table1.IndexDefs.IndexOf(имя индекса), почему то индекс не находится, хотя на самом деле он существует. Может там что-то с тегом связано?
Sandman25 (2003-09-25 15:38:00) [30]
Делайте индекс, только если его нет. if Table1.IndexDefs.IndexOf(имя индекса) = -1
Теперь уже лучше повторите создание новой базы, наверное. Правда, странная ругань Index already exists. Такое ощущение, что Вы постоянно пытаетесь сделать этот индекс.
Ada (2003-09-25 14:52:00) [31]
Не хочу показаться совсем глупенькой, но у меня опять проблема.
Я сделала как вы сказали: заменила старую базу на новую, индекс у меня создался. Когда я запустила приложение 2 раз появилась ошибка "Index already exists"я попыталась удалить старый индекс выдается сообщение:"Index already exists", Index:название индекса
Ada (2003-09-25 14:06:00) [32]
Спасибо, я сейчас тоже попробую
Ильш (2003-09-25 13:56:00) [33]
Но только не "не правильно", а нельзя удалять индекс пуками. Надо тока программно через DeleteIndex. Тогда все ОКЕЙ !!! Сейчас тока проверял!
Ильш (2003-09-25 13:55:00) [34]
Во во ! В описании сказано, что этот флаг поддерживается в DBASE IV только. Соответственно выводы делаем сами :)
Sandman25 (2003-09-25 13:44:00) [35]
Возможно, AddIndex не учитывает различия между dBaseIII+ и, скажем, dBaseIII или IV, и неправильно изменяет тот заголовок, о котором говорит Ильш.
Ильш (2003-09-25 13:37:00) [36]
Точно в описании формата dbf указано, что есть такой флаг, который ставится при создании mdx индекса. Вот из-за него и проблема.
Ильш (2003-09-25 13:17:00) [37]
В общем выяснил в чем проблема.
Ситуация такая если взять новую таблицу без индекса, создать индекс, а потом его удалить средствами Виндоус, то сразу же появляется такая ошибка. Все дело видимо в том что AddIndex что-то меняет в хедере DBF-ки.
Поэтому надо удалять индексный файл с помощью DeleteIndex.
Я у себя попробовал. Все нормально. Индекс создается и удаляется.
Т.е. вам придется создать где-то такую же базу с такой же структурой и все данные переписать. И заменить ею существующую.
И вообще эти авто-подцепляемые индексы такая бяка порой. :((
Sandman25 (2003-09-25 13:11:00) [38]
К сожалению, тогда не знаю :(
Там еще есть куча свойств типа IndexName, IndexFiles, попробуйте пошаманить с ними.
Ada (2003-09-25 13:04:00) [39]
Увы, но опять та же ошибка
Sandman25 (2003-09-25 12:30:00) [40]
Попробуйте вызвать Table1.IndexDefs.Update перед открытием - это обновит информацию об индексах.