Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];

Вниз

Зависает при выполнении запроса   Найти похожие ветки 

 
BAY   (2002-06-07 22:41) [0]

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


 
Prooksius   (2002-06-07 23:14) [1]

По-моему никак.
Но можно:
1) Оптимизировать запрос так, чтобы выполнялся быстрее
(может потребоваться оптимизация самой базы)
2) Запускать запрос в отдельной нити, а самому заниматься своими делами.
Интересная страничка про IB/FB: http://www.ibase.ru/


 
Prooksius   (2002-06-07 23:20) [2]

Хотя, я тут подумал - все-таки можно. Но через одно место.
Можно оформить запрос в хранимую процедуру и выполнять ее по частям.


 
Prooksius   (2002-06-07 23:22) [3]

Хотя, я тут подумал - все-таки можно. Но через одно место.
Можно оформить запрос в несколько хранимых процедур и выполнять этот хапрос "по частям". Ж)


 
BAY   (2002-06-07 23:36) [4]

На счёт 1-го уже думал, ничего лучше не придумал, да и у меня работает всё нормально, у клиента комп на металолом пора сдавать.
2 такая идея была, незнаю как реализовать. Страничку уже смотрю...


 
BAY   (2002-06-07 23:38) [5]

Это ж сколько хранимых процедур делать придётся? На каждое движение чтоли?


 
kaif   (2002-06-08 01:13) [6]

Сделай курсор в виде часов (если это пару секунд)Screen.Cursor := crHourGlass
Или просто какую-нибудь анимацию запусти. Тоже нормально.
Хотя круче всего попытаться научиться в отдельном Thread что-нибудь соорудить. Хотя у меня пока никак с этим делом не получается... Наверно, надо сначала на кошках потренироваться...


 
Prooksius   (2002-06-08 10:32) [7]

2 Bay: Когда ты посылаешь запрос на IB server, он сначала делает Prepare (на это уходит некоторое время, зависит от оптимизации запроса), а уж потом клиент делает Fetch результата. Во время Prepare никакого конечно прогресса показать нельзя.
Во время Fetch можно.
Есть такие компоненты "FIB+" На мой взгляд - лучшие для работы с IB (выложены на той страничке, я указывал выше). Есть стандартные в Delphi, IBExpress, кажется. Так вот, если ты ими пользуешься, там есть событие у DataSet-a, OnFetchRecord, которое позволяет запускать какие-то свои действия после приема каждой строки запроса с сервера.

У тебя в запросе наверняка есть "основная" таблица, как бы его каркас, по которой ты проходишь от начала и до конца.
Так вот пишешь StoredProc, в которой делаешь:
1) сначала считаешь количество записей в этой таблице (RecCount)
2) For select из этой таблицы и внутри begin - end пишешь подзапрос, какой надо.
3) Далее там же проверяешь, какая строчка таблицы обрабатывается. Если прошли 1/10 таблицы, делаешь suspend определенной строчки (с пустыми полями, например),
4) В клиенте по OnFetchRecord проверяешь это дело и инкрементишь ProgressBar.

Еще надо учесть, что есть разные DB-компоненты работы с IB, (одни сразу делают FetchAll, а другие - делают Fetch по мере запроса пользователя, например, скроллинг DBGrid-a). Тебе бы надо делать FetchAll, но это может быть долго.

Это все также работает, только если у тебя пропускная способность сети (если она есть) мала или записи большие по обьему, и все время уходит на Fetch. Если prepare дольше, то IMHO никак...

И еще, в событии OnFetchRecord не делай сложных и больших по времени расчетов/действий, а глядишь, конца-то и не дождешься... :)

Вообщем, поиграй, посмотри, может, чего-то и получится на таком железе...



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

Форум: "Базы";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
4-1259
XEL
2002-04-26 23:27
2002.07.01
Как определить серийный номер ЧИСТОГО cd-r диска


3-867
oss
2002-06-06 16:26
2002.07.01
COM


1-1078
Fraktall
2002-06-18 21:38
2002.07.01
Помогите пожалуйста!


1-1039
AFROLOV
2002-06-18 16:02
2002.07.01
Как программно закрыть popupmenu?


1-1046
ValeX
2002-06-18 18:19
2002.07.01
Киньте плиз пример с использованием TFileStream





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