1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Bde и индексы

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

  1. SNike

    SNike Гость

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

    Ogion7 Гость

    Репутация:
    0
    А зачем?
     
  3. SNike

    SNike Гость

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

    PeterBuild Гость

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

    SNike Гость

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

    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 Гость

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

    SNike Гость

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

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

    LAW Гость

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

    SNike Гость

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

    LAW Гость

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

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

    SNike Гость

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

    LAW Гость

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

    Barmutik Гость

    Репутация:
    0
    Для: LAW

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

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

    LAW Гость

    Репутация:
    0
    Ну может я и не прав.
    Но приведу конкретные факты выясненные мной. Использую 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 Гость

    Репутация:
    0
    Для: LAW

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

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

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

    usbdeath

    ghost, 5 окт 2016, в разделе: Kali Linux
    Ответов:
    0
    Просмотров:
    162
  2. malkhazi
    Ответов:
    1
    Просмотров:
    1.738
  3. alekssgor
    Ответов:
    0
    Просмотров:
    1.497
  4. alekssgor
    Ответов:
    0
    Просмотров:
    2.127
  5. vlgrig1961
    Ответов:
    0
    Просмотров:
    2.381

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