Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.04;
Скачать: CL | DM;

Вниз

Как зделать открытие таблицы (при момощи SQL запроса) быстрее?   Найти похожие ветки 

 
Tahion ©   (2002-06-06 20:02) [0]

Предлагаю обсудить следующую ситуацию. Думаю, что подобное обсуждение будет интересно многим, поскольку рано или поздно приходится сталкнуться с долгими SQL запросами и большими БД.

У меня программа при создании формы выполняет SQL запрос. Это длится около 15 секунд, хотя сразу после открытия сами результаты запроса не нужны. Эти 15 секунд сильно раздражают. Можно конечно начать выполнять запрос только тогда, когда он начинает быть нужным. Но тогда пийдется ждать 15 секунд уже во времяработы программы, а это еще хуже (для пользователя лучше пусть долго открывается, а потом быстро работает, чем наодорот /Д6/!).

Как мне организовать выполнение запроса в отдельном потоке, желатильно в фоновом режиме?
Так пользователь сможет работать с основной частью программы, а к тому времени, когда результаты запроса ему понадобятся, запрос выполнится НЕЗАМЕТНО ДЛЯ ПОЛЬЗОВАТЕЛЯ!!!

И ГЛАВНОЕ: Как мне коректно переместить открытую таблицу из созданного потока в основной (то есть как зделать так, чтоб с таблицей, открой в отдельном потоке, после его уничтожения можно было работать в главном потоке, как с "обычной",созданной без дополн. потока?

Поясню причину этого вопроса. В книге, где я читал про многопоточность (Delphi4: Энциклопедия пользователя Чарльза Калверта ст.127) написано, что для КОРЕКТНОЙ работы:
" - Запускайте каждый объект TQuery в своем собственном сеансе. С каждым фоновым запросом должен быть связан отдельный объект TSession. В свойстве SessionName TQuery следует указать имя компонента TSession.
- Компонент TQuery, выполняемый в потоке, нельзя связывать с TDataSourse в контексте потока, в котором он будет использоваться. Следует подключаться к TDataSourse только в контексте главного потока VCL или в методе Synchromize. Следовательно, необходимо выполнять связывание не во время проэктирования, а во время выполнения."

Всем спасибо за ответы!


 
Владислав ©   (2002-06-07 06:41) [1]

Все верно.
Посмотри пример, который поставляется с Delphi (каталог по умолчанию: file://C:\Program Files\Borland\Delphi5\Demos\Db\Bkquery\bkquery.dpr ).

В примере все это есть. Могу еще "намылить" главу из книги по "многопоточности". Тоже интересно почитать.


 
Tahion ©   (2002-06-08 14:27) [2]

Если не тяжело, то конесно хотелось бы.


 
Dr. Web ©   (2002-06-10 11:04) [3]

А мона и мне книгу? :)
Или еще лучше - выставить ее на сайте :)


 
sanilo ©   (2002-06-10 13:02) [4]

Во-во, я бы почитал;)


 
DarkGreen   (2002-06-10 13:59) [5]

Хм... Интересно, а зачем ипользовать Query для локальной таблицы? Не проще TTable воспользоваться, и работать быстрее будет.


 
Tahion ©   (2002-06-12 15:33) [6]

аботать быстрее то будет, но у Query есть SQL, а это возможностей на порядок больше чем у Тэйбл.

И как там с книгой? - tahion@ukrpost.net



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

Текущий архив: 2002.07.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
4-10063
BAHO
2002-05-04 04:49
2002.07.04
Драйвер Клавы & Мыши


1-9829
Геннадий Милехин
2002-06-24 17:59
2002.07.04
Как подключить Help по F1 для RXLIB 2.75


1-9833
AMQ
2002-06-14 17:26
2002.07.04
JPEG in EXE


1-9837
VDen
2002-06-21 09:18
2002.07.04
Поиск в TMemo


4-10052
poisn
2002-05-05 23:43
2002.07.04
Help pls Получения списка процессов(tasks)