Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Paradox


Автор: Il'ya 27.2.2003, 04:08
Тормозное открытие таблиц Standart Paradox при большом количестве записей, про Query вообще молчу. Люди поможите чем можитеconfused.gif

Автор: Cashey 27.2.2003, 04:16
Интересно а чем здесь можно помочь? Дельфи работает с Paradox'ом с помощью драйверов и это сильно замедляет работу и ничего тут не поделаешь. Или есть конкретный вопрос? Здесь надо иметь ввиду что на локальной СУБД компонент TQuery работает "тормознутей" чет TTable.

Автор: Il'ya 27.2.2003, 04:22
Цитата
Интересно а чем здесь можно помочь? Дельфи работает с Paradox'ом с помощью драйверов и это сильно замедляет работу и ничего тут не поделаешь. Или есть конкретный вопрос? Здесь надо иметь ввиду что на локальной СУБД компонент TQuery работает "тормознутей" чет TTable.


Это ясно все!!! Ну существует же в др. драйверах SCache!!!

Автор: Medved 27.2.2003, 05:17
Какое количество записей?

Автор: Il'ya 27.2.2003, 05:20
Цитата
Какое количество записей?

2000 уже секунд 6, а на медленной машине все 15.

Автор: Medved 27.2.2003, 05:25
При использование TTable BDE сначала запрашивает внутренную структуру таблицы, а уже потом данные из нее. Можно включить в BDE кэширование схемы (Schema Caching), что ускорит выборку записей.
Это актуально при работе с БД клиент-серверной архитектуры. Насчет локальных БД утвердительно ответить затрудняюсь.

Автор: Medved 27.2.2003, 05:28
Вот выдержки из разных FAQ:

Цитата
Очень медленный доступ к таблице при первом обращении

Данная проблема возникает из-за того, что BDE вначале запрашивает базу данных для получения информации о таблице, прежде чем он начнет с ней работать. Как только появляется информация о таблице, она кэшируется и обращение к таблице во время всего сеанса (пока TDatabase.Connection имеет значение True) происходит практически мгновенно. Для того, чтобы использовать кэшируемую информацию и при последующем запуске приложения, в конфигурации BDE найдите необходимый псевдоним и установите BDE CACHE = TRUE и BDE CACHE DIR = 'C:\temp' или любой другой удобный каталог.

ПРИМЕЧАНИЕ:При любом изменении структуры таблицы Вам придется удалять кэш вручную. Имя файла, в котором хранится кэш, Вы можете узнать, посмотрев в любом текстовом редакторе файл SCache.INI.


Цитата
Медленное открытие таблицы Paradox?

Попробуйте одну вещь: заблокируйте файл перед попыткой открытия таблицы. Данная манипуляция перед открытием таблицы создаст файл PDOXUSER.LCK. После этого открытие таблиц будет более быстрым, особенно когда их открывают, закрывают и снова открывают. После окончания удалите блокировку файла.

Автор: Il'ya 27.2.2003, 05:31
В том то и дело что нету в локале SCache'а!!! Вопрос, можно ли его каким то образом эммулировать что ли? Не знаю что придумать: например, типа сохранять некую структуру самому, а потом подгружать... Может что то есть в функциях BDE??? :-(

Автор: Il'ya 27.2.2003, 05:35
Читал я эти FAQи...
Первая выдержка - не знаю для какого драйвера она применима... (SCache есть, BDE Cache нет и поему никогда небыло)
Вторая - как можно заблокировать закрытый НДconfused.gif Или я чего не догоняюconfused.gif

Автор: Medved 27.2.2003, 05:43
Цитата
Locks a Paradox or dBASE table.

Delphi syntax:

procedure LockTable(LockType: TLockType);

C++ syntax:

void __fastcall LockTable(TLockType LockType);

Description

Call LockTable to lock a Paradox or dBASE table to prevent other applications from placing a particular type of lock on the table. LockType specifies the lock requested by this application.

Requesting a read lock prevents other applications from reading a table. Requesting a write lock prevents other application from writing to a table.

An application can request both types of lock by calling LockTable twice, once for each lock type.





Цитата
Indicates how a Paradox or dBASE table can be locked.

Unit

DBTables

Delphi syntax:

type TLockType = (ltReadLock, ltWriteLock);

C++ syntax:

enum TLockType { ltReadLock, ltWriteLock };

Description

TLockType identifies the type of a BDE lock on a Paradox or dBASE table. The following table lists the possible values:

Value Description

ltReadLock Other applications (or sessions) can not read from the table.
ltWriteLock Other applications (or sessions) can not write to the table.'

Автор: Il'ya 27.2.2003, 05:49
Цитата
Cannot perform this operation on а closed dataset.


Как блокироватьconfused.gif

Автор: Il'ya 27.2.2003, 15:43
Неужели никто с этим не сталкивался!!!

Автор: Medved 27.2.2003, 19:03
Цитата
2000 уже секунд 6, а на медленной машине все 15.


С таким не сталкивался.... что-то Вы Il'ya там намудрили....

Автор: Il'ya 28.2.2003, 00:15
Цитата
С таким не сталкивался.... что-то Вы Il'ya там намудрили....

Ничего не намудрил...
Простой эксперимент:
таблица Paradox эдак полей 10;
для пущей видимости забиваем 10000 записей всякой ерундой...
Table.Open и .... 1 минута
Для интереса, соеденим эту таблицу в Query еще с одной... 3 минуты

А у меня в одном query есть 4 соединенных таблицы... 6 минут

Как бытьconfused.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)