Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с индексами в БД Paradox  (Прочитано 15753 раз)
0 Пользователей и 1 Гость смотрят эту тему.
liones
Постоялец

ru
Offline Offline
Пол: Женский

« : 31-08-2009 08:20 » 

Почему такое происходит??? Есть программка, бд парадокс, пользователи жалуются что в одной таблице регулярно слетают индексы. Работать с таблицей можно только после восстановления архивной копии. У себя провожу многократно ту же процедуру, ничего не слетает. Мне говорили уже, что с парадоксовскими таблицами бывают проблемы, но не понятно почему только с одной.
« Последнее редактирование: 02-09-2009 07:22 от Джон » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 31-08-2009 08:52 » 

это типичная проблема для парадокса, работающего в сети. варианты могут быть разные, но для начала приведите точное сообщение об ошибке.
« Последнее редактирование: 02-09-2009 07:22 от Джон » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 31-08-2009 08:54 » 

Сколько я знаю, при достижении рмзмера таблицы что-то около 30 Мб Paradox плохо работает - частота разрушения индексов резко возрастает.

Второй момент, на который можно смотреть - параллельная работа пользователей с общей таблицей по сети.
« Последнее редактирование: 02-09-2009 07:22 от Джон » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
liones
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #3 : 31-08-2009 09:09 » 

Точное описание ошибки сообщить не могу. Что-то "index out of data", если я точно вспомнила.
С таблицами работают локально.
« Последнее редактирование: 02-09-2009 07:22 от Джон » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 31-08-2009 09:19 » 

liones, я думаю, что в этой конкретной таблице для одного из индексов не указана опция "maintaned".
« Последнее редактирование: 02-09-2009 07:22 от Джон » Записан

liones
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #5 : 31-08-2009 09:25 » 

Ок. Посмотрю
« Последнее редактирование: 02-09-2009 07:23 от Джон » Записан
liones
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #6 : 31-08-2009 09:28 » 

Да, действительно. Тогда вопрос такой: каким образом эта опция влияет на работу. В литературе я не встречала особых указаний на этот счет.
« Последнее редактирование: 02-09-2009 07:23 от Джон » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 31-08-2009 10:04 » 

как следует из названия индекса, он будет "обсуживаться" автоматически. не-обспуживаемые индексы используются только для read-only таблиц.

на работу это влияет очень просто. при каждом изменении записи данных в хидер таблицы по смещению 45 записывается так называемый ChangecCount. при обновлении индекса это же значения записывается в хидер индекса по смещению 44. при открытии таблицы BDE считывает оба значения и сравнивает между собой. если они не совпали - таблица может даже не открыться.

в общем случае, если индекс не обслуживаемый, вам надо пересоздавать его самой при каждом изменении таблицы. также следует помнить, что у BDE действительно есть проблемы с обновлением индексов, и ситуация может повторяться даже на обслуживаемых индексах. если таблица открывается, но работает с такой ошибкой - индекс надо просто пересоздать. если таблица не открывается - то надо руками взять значение ChangesCount из хидера таблицы, засунуть в хидер индекса (это позволит открыть таблицу с эксклюзивными правами) и уже тогда пересоздать индекс.
« Последнее редактирование: 02-09-2009 07:23 от Джон » Записан

liones
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #8 : 02-09-2009 02:54 » 

...... если таблица открывается, но работает с такой ошибкой - индекс надо просто пересоздать. если таблица не открывается - то надо руками взять значение ChangesCount из хидера таблицы, засунуть в хидер индекса (это позволит открыть таблицу с эксклюзивными правами) и уже тогда пересоздать индекс.
а можно тож самое написать кодом, чтоб было понятнее
« Последнее редактирование: 02-09-2009 07:23 от Джон » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #9 : 02-09-2009 05:59 » 

liones, проблема не решилась?

1. пересоздание индексов:

Код:
  uses
    BDE:
  ..
  begin
    Table1.Exclusive := TRUE;
    Table1.Open;
    DbiRegenIndexes(Table1.Handle);

2. способ №1 сработает только в том случае, если нарушен вторичный индекс и таблица хотя бы открывается. если она даже не открывается - значит убит первичный индекс, и тогда БДЕ можно попробовать обмануть: вычитать значение из хидера таблицы и засунуть его в хидер индекса. но это уже нетривиально.

для таких случаев лучше использовать собственную утилиту БДЕ: TUtility (http://info.borland.com/devsupport/bde/utilities.html).



 там же на сайте можно найти исходники для delphi/bc++.


* TUtility.PNG (13.45 Кб - загружено 3131 раз.)
« Последнее редактирование: 02-09-2009 07:23 от Джон » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 02-09-2009 07:30 » new

liones, внимательно прочитать правила:
https://forum.shelek.ru/index.php?action=vu-rules#post_rules особое внимание обратить на пункт 2.10.

В следующий раз тема будет закрыта или удалена.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines