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

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

Задолбали индексы в Paradox e [D5, Paradox]


Страницы:   1 2

Weare ©   (2002-06-21 17:27:00) 

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

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

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


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

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


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

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


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

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


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


> MEgor © (26.06.02 06:54)

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


MEgor   (2002-06-26 06:54:00) [5]

to alexanderK (25.06.02 09:40)

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


MEgor   (2002-06-26 06:50:00) [6]

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


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

Спасибо.


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


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

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

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

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


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

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


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

to VAleksey

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

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


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

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


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


> Weare © (25.06.02 14:02)

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

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


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

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


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

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


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

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


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

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

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


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

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


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

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

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


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

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


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


> Weare © (24.06.02 14:11)

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


Страницы:   1 2

Наверх

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