Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание индекса таблицы dBaseIII+ [dBase, FoxPro]


Страницы:   1 2 3

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 перед открытием - это обновит информацию об индексах.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо