Форум: "Базы";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];
ВнизКак зделать открытие таблицы (при момощи 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c