Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Вниз

Задолбали индексы в Paradox e   Найти похожие ветки 

 
Weare   (2002-06-21 17:27) [0]

Подскажите, пожалуйста. У меня часто при работе программы выскакивает "Index is out of date". В Desktope это исравлял, но ведь хочеться, чтобы программа сама это исправляла.(кстати почему вообще это так часто появляется)
Тогда я решил вставить в код программы перегенерацию индексов:

DataModule2.Users.Exclusive:=True;
DataModule2.Users.Open;
Check(dbiRegenIndexes(DataModule2.Users.Handle));

Для этой таблицы все нормально отрабатывает, а для другой пишет:
"Must use baseorder for this operation".Подскажите, в чем тут дело и есть ли другое решение проблемы.
Заранее огромное спасибо.


 
MsGuns   (2002-06-21 19:47) [1]

Речь идет об индексах или первмчных ключах (Primary) ?


 
Weare   (2002-06-22 14:20) [2]

Речь идет об индексах. Хотя первичные ключи у меня типа autoincrement.


 
VAleksey   (2002-06-24 08:16) [3]

Base order означает непосредственный (прямой) доступ к таблице.
Берешь (лучше создаешь) новый объект TTable назначаешь ему имя таблицы и только затем вызываешь dbiRegenIndexes


 
Виктор   (2002-06-24 10:40) [4]

просто перед переиндексацией установи
DataModule2.Users.IndexName := "";



 
Weare   (2002-06-24 12:49) [5]

Спасибо всем,
TTable я итак использую, не помогало.
А вот ответ Виктора действительно помог (спасибо огромное, а то я зациклился на этой проблеме)- все работает.
Кстати, может кто подскажет почему вообще так часто портятся индексы (или индексные файлы).
Идея моей проги такая: у меня в моей проге к базе (около 20 таблиц) по сетке обращаются несколько человек. И в зависимости от введеного пароля таблицы фильтруются. И затем один человек с правами админа работает со всей базой.


 
VAleksey   (2002-06-24 13:34) [6]

Кэш почаще сбрасывай. ( dbiSaveChages )


 
Weare   (2002-06-24 14:11) [7]

Подожди VAleksey, ты что хочешь сказать, что индексы слетают из-за переполнения кэша. Объясни, пожалуйста, поподробнее...


 
MEgor   (2002-06-25 02:56) [8]

У меня похожая ситуация. Делаю Table1.EmptyTable - и после этого
получаю "Index is out of date". В этом индексе присутствует поле типа Data. На другом индексе такого не возникало (пока). Решить проблему не смог.
Пришлось удалять записи последовательным перебором.

Еще. у одной таблицы два индекса.
Добавляю в нее порядка 500 тыс. записей - ни один индекс не изменился, т.е. оба как были 2 кб., так и остались.
У другой таблицы из двух индексов меняется только один.
Короче говоря - бардак с этим парадоксом.


 
VAleksey   (2002-06-25 08:47) [9]


> Weare © (24.06.02 14:11)

нет. просто бывают проблемы с этим кэщированием при многопользовательском доступе к таблице, пожтому надо кэш почаще сбрасывать.


 
Evyshka   (2002-06-25 09:22) [10]

У меня эта же проблема В день восстанавливаю индексы около 2-х раз (Или сообщениу Index out of date или все виснет), база очень большая Может ли быть проблема из за частой сортировки
или при выполнении запроса?


 
alexanderK   (2002-06-25 09:40) [11]

MEgor> Еще. у одной таблицы два индекса.
MEgor> Добавляю в нее порядка 500 тыс. записей - ни один индекс MEgor> не изменился, т.е. оба как были 2 кб., так и остались.

Так будет если у таблицы не назначен Primary


 
Anatoly Podgoretsky   (2002-06-25 09:56) [12]

MEgor © (25.06.02 02:56)
У тебя явно не обслуживаемые индексы иди в DBD и исправь


 
Lolik   (2002-06-25 12:20) [13]

Если к твоей базе данных обращается, кто-то с той же машины, на которой находится база данных (предполагаю, что это админ), то в настройках BDE обязательно на этой машине должно быть установлено LOCAL SHARE = True. Иначе не происходит запись в .lck
файлы данных о блокированных в данный момент записях, летят индексы.

PS
Уже 6 лет используем Paradox в своих многопользовательских системах, индексы разваливаются довольно редко в основном по двум причинам 1. жесткий диск на ладан дышит и сбоит 2. в однопользовательском режиме выключают комп при открытых таблицах либо напруга пропадает.
Не спорю, что SQL решения надежней и современней, но не всегда оправдывается...


 
Weare   (2002-06-25 12:54) [14]

to Lolik
Спасибо.
Может подскажешь, какие последствия одновременного обращения к одной записи с разных машин, ведь здесь идет блокировка на уровне записи. И еще, как можно увеличить скорость открытия базы по сети, а то у меня сильно долго грузится.


 
Lolik   (2002-06-25 13:43) [15]

При просмотре все будет ок, правда в Grid-е запись изменится только после прорисовки Grid-а. При попытке редактироавания сообщит, что запись заблокированна таким то пользователем,и не войдет в режим редактирования.
Скорость открытия увеличить можно только уменьшив обьем того, что открывается, т.е. как можно меньше индексов и как можно короче их сделать, если индексов много, то первичный ключ автоинкрементный, у тебя вроде так и сделано. Держать таблицы
на DataModule и открывать их один раз при входе в приложение.
Никаких фильтров по большим базам, особенно установленных в дизайне. Если уж нужно фильтровать, то лучше добавить индекс и использовать SetRange, ограничивая выборку, а затем включать фильтр, если необходимо. На скорую руку ничего больше в голову не прходит.
Если позволяют средства клиента, то можно использовать терминального клиента W2000, тогда приложение будет работать на сервере и трафика по сети практически не будет, правда аппаратные требования к серверу возрастают - по крайней мере 20 Мб оперативки на каждого пользователя и хороший проц, а лучше 2.


 
Weare   (2002-06-25 14:02) [16]

to Lolik
Спасибо, я вроде все так и делаю. Значит у меня оптимальная скорость открытия.
Хотя еще более медленнее стало открываться, когда я вставил перегенерацию индексов и упаковывание таблиц в код программы. А то индексы слишком часто слетали (проблема в самом верху записана).Что скажешь?


 
VAleksey   (2002-06-25 14:17) [17]


> Weare © (25.06.02 14:02)

Так наверное такой скорости как при работе с локальнами данными трудно добиться даже от клиент-сервер :).

А притензий по надежности к парадоксу у меня лично никаких.
Lolik © от (25.06.02 12:20) все правильно сказал.


 
Lolik   (2002-06-25 14:27) [18]

Если перестроение индексов при входе в программу, то открываться будет долго и при одновременном входе будут проблемы, можно вынести регенерацию индексов в отдельное приложение. Если все правильно настроено, а индексы валятся часто, то возможно нужна разъяснительная работа с пользователями на предмет выхода из программы, а затем выключения компьютера (была у нас такая проблема с одним закачиком). Можно при открытии проги писать в файл или регистр признак, при нормальном закрытии его убирать, если при входе признак уже стоит выдавать пользователю сообщение, что он некорректно вышел из программы в прошлый раз и может потерять введенные данные. Можно делать принудительную регенерацию индексов, но в сетевом варианте это не проходит. Мы ограничились страшным сообщением желтыми буквами на красном фоне и помогло.


 
Weare   (2002-06-25 14:30) [19]

to VAleksey

>
> Так наверное такой скорости как при работе с локальнами
> данными трудно добиться даже от клиент-сервер :).

В смысле, такой высокой или медленной? Ведь некоторые клиент-серверные СУБД по скорости обгоняют локальные.


 
Lolik   (2002-06-25 14:36) [20]

Обгоняют только при правильно составленных запросах, которые выполняются на стороне сервера и результатом работы которых будет небольшая выборка, которая и перешлется клиенту по сети. Логика приложения другая.


 
VAleksey   (2002-06-25 14:42) [21]


> Ведь некоторые клиент-серверные СУБД по скорости

что-то я таких не видел :)

конечно высокой.

Здесь разница в том что локальные таблицы у тебя на винте и скорость их обработки зависит от параметров компьютера, скорость обработки данных на сетевом диске зависит от скорости работы сети. Так же от скорости сети зависит работа с клиент - серверными БД. В общих чертах преимущество использования клиент - сервер вместо простого расшаривания диска по сети это уменьшение нагрузки на сеть за счет обработки данных на сервере.


 
Weare   (2002-06-25 14:49) [22]

Спасибо.


 
MEgor   (2002-06-26 06:50) [23]

Anatoly Podgoretsky (25.06.02 09:56)
Что значит явно не обслуживаемые ?
Добавляю запись - будь добр перестройся.


 
MEgor   (2002-06-26 06:54) [24]

to alexanderK (25.06.02 09:40)

А мне Primary в данном случае не нужен.
Мне нужны два не уникальных индекса. Один используется при расчете(поиск идет), второй при отображении данных на экране в удобном отсортированном виде.


 
VAleksey   (2002-06-26 07:23) [25]


> MEgor © (26.06.02 06:54)

Тогда тебе надо программным способом создавать необновлянмые индексы.


 
MEgor   (2002-06-26 08:03) [26]

to VAleksey © (26.06.02 07:23)
И каким образом все это должно выглядеть ?


 
VAleksey   (2002-06-26 08:17) [27]

Table1.AddIndex(..,.., nonMaintained);
Что-то типа такого


 
VAleksey   (2002-06-26 08:18) [28]

Table1.AddIndex("NewIndex", "CustNo;CustName", [ixUnique, ixCaseInsensitive,ixNonMaintained]);



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.007 c
1-58064
werr
2002-07-05 17:04
2002.07.18
Как узнать каким юзером занят файл?


1-58222
Goblinus
2002-07-07 15:50
2002.07.18
Шрифты


3-57968
StassM
2002-06-26 12:02
2002.07.18
Связь с базой !!!


3-57997
kosyak
2002-06-27 11:14
2002.07.18
Ребята помогите базу набить


14-58267
roman001
2002-06-19 18:15
2002.07.18
rxlib





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский