Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.005 c
3-9736
Alex-kosmonavt
2002-06-11 10:06
2002.07.04
Как записать картинки в Blob поля базы данных?


14-9961
ev
2002-06-01 14:49
2002.07.04
oberon


4-10047
UniNik
2002-05-06 09:54
2002.07.04
SetEnvVariable


3-9740
Kudatsky
2002-06-12 09:35
2002.07.04
TQuery.Recno


3-9759
igrik
2002-06-13 13:31
2002.07.04
Poisk





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский