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

Вниз

Можно ли узнать сколько записей в SQL запросе во время его вып..?   Найти похожие ветки 

 
Sirus   (2002-05-08 08:14) [0]

Привет мастерам...
Есть вопрос: Можно ли узнать сколько записей уже считано в SQL запрос во время его выполнения???
У меня запрос на выборку выполняется страшно долго... Хотелось бы сделать ProgressBar только вот неизвестно сколько процентов работы выполнено...

With best regards Sirus


 
Oleg_er   (2002-05-08 08:37) [1]

используй ADOQuery


 
Oleg_er   (2002-05-08 08:44) [2]

savva © (27.04.02 09:08)
Если использовать компоненты TADOQuery, то там есть событие OnFetchProgress
procedure Tdata.qryPodTemaFetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin

end;

что к чему - сам разберешься, там все понятно...


 
Sirus   (2002-05-08 09:16) [3]

Я по моему неправильно поставил вопрос...
Надо узнать сколько записей уже считано в запрос TQuery...
Текст запроса: SELECT * FROM SUBS_DATA
Записей в таблице около 500000...
Чтобы юзер не скучал во время открытия запроса, ему нужен прогрессбар...
Вопрос: Как все это реализовать???


 
Reindeer Moss Eater   (2002-05-08 09:19) [4]

Когда скучающий юзер получит хотя бы десятую часть всех 500000 записей, он начнет скучать еще сильнее


 
Сергей Иванов   (2002-05-08 10:34) [5]

В BDE есть структура DBIQryProgress. Попробуй там покопаться.


 
Reindeer Moss Eater   (2002-05-08 10:40) [6]

Если даже узнать сколько записей зафетчено, то как реализовать прогресс бар?
Очень часто сам сервер не знает сколько записей будет в рекордсете после выполнения запроса. Про клиента я уже не говорю.
Как выстваить максимальное значение прогресса?


 
Johnmen   (2002-05-08 10:52) [7]

Полноценно нереализуемо...


 
+aaZ   (2002-05-08 11:24) [8]

2 Johnmen:
Я смотрю, ты умнее всех ... на словах, а на деле не хватает тебя ответить?


 
Johnmen   (2002-05-08 11:28) [9]

>+aaZ (08.05.02 11:24)

За что такие обидки ? По-моему, я четко ответил на поставленный вопрос...


 
Reindeer Moss Eater   (2002-05-08 11:38) [10]

Если это был ответ на мой вопрос, то прошу прощения за двусмысленность.
Я конечно же не спрашивал как выставить максимальное значение.
Я просто хотел сказать, что по-русски это называется "баловство" (то что хочет Sirus)


 
Johnmen   (2002-05-08 11:45) [11]

>Reindeer Moss Eater (08.05.02 11:38)
Это был ответ на вопрос Автора ветки...

>Я просто хотел сказать, что по-русски это
>называется "баловство" (то что хочет Sirus) - вот именно...

>Reindeer Moss Eater (08.05.02 10:40) - Никак...



 
kaif   (2002-05-08 13:39) [12]

А что значит запрос выполняется долго?

1.Долго выполняется сам запрос до первого Fetch
2.Долго выкачиваются данные при помощи Fetch.

В 1-м случае надо найти способ ускорить запрос (грамотно построить базу, проиндексировать поля, используемые в объединении и т.п.)
Во 2-м случае можно не делать сразу Fetch всех записей, а максимальное кол-во записей можно узнать предварительно с помощью другого запроса, что-то вроде SELECT COUNT(*)... с ограничениями, соответствующими ограничениям первого запроса.


 
Johnmen   (2002-05-08 13:49) [13]

>kaif © (08.05.02 13:39)

Если быть абсолютно точным, то SELECT COUNT(*)... не поможет, т.к. между ним и содержательным запросом может измениться количество записей, напр.др.юзером....


 
Reindeer Moss Eater   (2002-05-08 13:54) [14]

> kaif
У человека юзер скучал ожидая результаты одного запроса, теперь ему предлагают сначала дождаться Select Count,
потом смотреть на прогрессбар с отображением основного запроса и все для того чтобы потом выяснилось что "в это время в замке" другой юзер сделал Truncate этой таблице.


 
kaif   (2002-05-08 14:06) [15]

SELECT COUNT(*) я предлагал для случая, когда сам запрос быстрый, а Fetch-ей много. Потом для ProgressBar.Max можно иметь и приблизительное кол-во записей. в конце концов, можно открыть транзакцию repeatable read (snapshot).
Я не предлагаю все это, как выход. Но иногда рассмотрение всех альтернатив позволяет легче примириться с тем, что есть или создать эрекцию для улучшения общей логики.
Зачем качать 500тыс. записей на клиент? Если для последующей печати или записи в файл, к примеру, то тут возможны варианты умных решений.
А если для просмотра, то зачем из вообще скачивать? Кто это смотреть будет?
Если для математической обработки, то может лучше все это на сервере организовать при помощи всяких ХП и UDF?


 
Johnmen   (2002-05-08 14:13) [16]

>kaif © (08.05.02 14:06) : Полностью согласен !


 
Sirus   (2002-05-08 14:44) [17]

Всем спасибо за участие в дискуссии... (моем баловстве) :)))
Но это было ничуть не баловство... просто была такая проблемка..
А решил проблему я без всяких ПрогрессБаров...
Попросту сделал бегущую строку которая бегает туда сюда...
Юзеру понравилось... А 500000 записей нужны были для подсчета...
Причем скажем 157234 запись напрямую зависела от 1657 записи...
А 1657 запись в свою очередь зависела от 461905 записи... и вот так до конца... то есть запрос должен был делиться еще на много маленьких запросиков... И нечего советовать...
просто скажите подтип Johnmen"a
> Полноценно нереализуемо...

With best regards Sirus...
P.S. Я вовсе не баловень



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

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

Наверх




Память: 0.48 MB
Время: 0.005 c
14-97389
СергейКнязев
2002-04-16 12:21
2002.05.30
Не совсем по Delphi, но важно.


1-97321
фейс
2002-05-19 21:29
2002.05.30
Помогите сравнить два текста!


1-97277
Well
2002-05-18 16:35
2002.05.30
Excel


14-97401
DT
2002-04-22 11:52
2002.05.30
MS visual C++ vs Borland C++ builder


3-97112
Cola
2002-05-04 21:39
2002.05.30
DBGridEH





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