Bde и индексы

Тема в разделе "Delphi - Базы данных", создана пользователем SNike, 30 окт 2006.

  1. SNike

    SNike Гость

    Не раз встречал инфу о том что в BDE часто возникают проблемы с индексами. Однажды и сам столкнулся с подобной проблемой.
    Вопрос в том - как переиндексировать таблицу Paradox? Причем не имею ввиду удалить и создать индексы заново, а переиндексировать полностью, включая и индекс ключевого поля
     
  2. Ogion7

    Ogion7 Гость

    А зачем?
     
  3. SNike

    SNike Гость

    Если испоганились индексы - невозможно открыть таблицу. Единственный способ - её переиндексация. В моем случае пришлось воспользоваться прогой стороннего разработчика. Отсюда и вытекает - что лучше при старте программы переиндексировать таблицы. Как, собстно, и делается во многих программах. Только вот как это сделать?
     
  4. PeterBuild

    PeterBuild Гость

    Если я правильно понимаю Вы хотите при запуске своей программы удалить существующие индексы и создать новые? Если да, то я бы сделал процедурку которая именно это и будет деать и повесил бы на ОнКреате ДатаМодуля или Формы, смотря что используете! В процедуре сначало надо удалить индексы DeleteIndex, а потом их снова создать AddIndex :~(-}) Смотри справку по єтим методам! Успехов!
     
  5. SNike

    SNike Гость

    Эти методы неприменимы для первичного индекса.
    Вот выдержка из хелпа:

    Call DeleteIndex to remove a secondary index for a table. Name is the name of the index to delete. DeleteIndex cannot remove a primary index.

    Note: To delete an index, an application must first open the table for exclusive access.



    Как видишь, не может удалить первичный индекс. К томуже таблица должна быть открыта, а открыть её - не удается.

    Обо всем этом я уже говорил в первом посте

    Так что это проблемы не решит.
     
  6. sdriver

    sdriver Гость

    А, если сделать через буферную базу данных, в которую скопировать все данные из основной. Удалить основную, а потом создать каркас и заполнить данные из буферной.
     
  7. SNike

    SNike Гость

    Это сделать неполучится. Объясняю ситуацию.
    Перебой питания -> Ошибка в индексах -> Данные недоступны --->>> Неоткуда брать данные в буфер.
    Да и как делать буфер если неизвестно какая из таблиц упадет и если там много записей. Тогда проще вести две базы синхронно :) .

    Конечно, можно использовать TUtil от Borlad, но хотелось бы обойтись без дополнительных модулей в программе.
     
  8. LAW

    LAW Гость

    От всей души советую отказаться от BDE пока не поздно. А оно никогда не поздно. Ибо BDE жутко глючная штука.
     
  9. SNike

    SNike Гость

    В том то и дело что сейчас отказаться от этого не могу. Где-то около года еще придется поиспользовать. Потому и поднял эту тему
     
  10. LAW

    LAW Гость

    Когда пробовал использовать BDE тоже столкнулся с разрушением индексов. Это было лет 5 назад под Билдером1. Переиндексации я тогде не нашёл. Восстанавливал их ручным удалением *.cdx и созданием индексов заново.
    Примерно год назад под Билдером6 снова пробовал использовать BDE после разрушения индексов создавал копию БД, затем BathMove копироовал все данные в новую таблицу и создавал индексы.
    Другого решения не нашёл. Сейчас использую Advantage Database Server 8. Доволен на 100%.

    Забыл о разрушении индексов как о страшном сне.
     
  11. SNike

    SNike Гость

    Для восстановления индексов Paradox можно использовать TUtil.dll (или TUtil32.dll, точно не помню) от Borland. Только хотелось бы обойтись без него...
     
  12. LAW

    LAW Гость

    Да я тоже слышал об этой библиотеке, но не люблю когда в моей программе код что-то делает и я не знаю что :) Вариант с пересозданием базы мне показался более прозрачным. Тем более что под BDE нецелесообразно работать с базами более 100 000 записей, а значит пересоздание будет происходить за пару секунд.
     
  13. Barmutik

    Barmutik Гость

    Для: LAW

    Не надо так громко заявлять обо всём BDE... если у Вас конкретно что-то глючило .. это совесм не значит то и в общем не должно работать..

    Я учавствовал в написании программ энтерпрайз уровня где всё общение с серверами БД было построено на BDE .. и всё чудесно работало ...
     
  14. LAW

    LAW Гость

    Ну может я и не прав.
    Но приведу конкретные факты выясненные мной. Использую Query и SQL без подзапросов.
    Все инсерты и апдейты на Prepare. Сначала делаем апдейт, если не найдено инсерт.
    В результате обработки на С++ расчитанные данные заносились в 4 таблицы
    Исходная БД на 30 полей, одно поле 50 символов остальное мелоч. Куда пишутся результаты БД и того меньше.
    Во первых обработка шла нелинейно в отличии от нормальных движков dbf.
    100 000 записей рассчитывались очень быстро.
    Обработка 500 000 заняла примерно столько времени как и на других движках.
    1 000 000 в 4 раза медленнее, а на 2 000 000 просто завис.
    Естественно расчёты делались в более менее равных условиях после перезагрузки.

    При смене компонентов на сторонние (Advantage, Apollo, Halcyon) время было линейным и без зависаний и на 5 000 000. Так что BDE очень подозрителен. И вопрос с его использованием в свете вышеизложенного для меня решён.

    Удачи.
     
  15. SNike

    SNike Гость

    Для: LAW

    Вариант пересоздания базы - не лучший. Вот проблема которая реально встретилась: не открыть таблицу Paradox, для нее повредился индекс, данные недоступны.

    Как в этом случае может помочь пересоздание базы? Никак. Требуется НЕ ПОТЕРЯТЬ данные.

    В моем случае помог Plug-In для Total Commander (для баз данных). С его помощью я сделал ReIndex и снова получил доступ к данным. Вот о таком способе я и веду речь, может кто знает как это реализовать?
     
Загрузка...
Похожие Темы - Bde индексы
  1. ghost

    usbdeath

    ghost, 5 окт 2016, в разделе: Kali Linux
    Ответов:
    0
    Просмотров:
    55
  2. malkhazi
    Ответов:
    1
    Просмотров:
    1.663
  3. alekssgor
    Ответов:
    0
    Просмотров:
    1.435
  4. alekssgor
    Ответов:
    0
    Просмотров:
    2.080
  5. vlgrig1961
    Ответов:
    0
    Просмотров:
    2.336

Поделиться этой страницей