Выполнение Sql-запроса

  • Автор темы SNike
  • Дата начала
S

SNike

Гость
#1
Можно ли как-то отобразить ход выполнения операции выполнения запроса SQL (например, используя ProgressBar и т.п.), не привязываясь к времени TimeOut ? Что-то мне подсказывает что нет, но так хочется надеяться что все-же можно... :(
 
04.09.2006
2 566
2
#2
<!--QuoteBegin-SNike+25:06:2007, 16:39 -->
<span class="vbquote">(SNike @ 25:06:2007, 16:39 )</span><!--QuoteEBegin-->но так хочется надеяться что все-же можно...
[snapback]70549" rel="nofollow" target="_blank[/snapback]​
[/quote]
Мне тоже когда-то хотелось на это надеятся :( К сожалению, нельзя по многим причинам связанным с архитектурой современных БД. Если интересно - поищи. Разумным выходом в такой ситуации будет отображение какой-нибудь анимации, чтобы пользователю не было скучно.
 
S

SNike

Гость
#3
Да, скорее всего придется оставить анимацию...
Или же в качестве максимальной отметки шкалы использовать TimeOut - тоже помогает :)
 
L

Lunatikus

Гость
#4
Почему нет?Просто поставь после открытия запроса:

ADOQuery.last;
Progressbar.max:=ADOQuery.recno;
ADOQuery.first;

И с каждым шагом ADOQ.next используй Progressbar.position:=progressbar.position+1;
Это при использовании ADO.
Или я чтото не так понял?
 
04.09.2006
2 566
2
#5
Ну и что ты отобразишь? Индикатор прохода по полученному набору записей, а нужно получить индикатор выполнения запроса, который в твоем примере уже выполнен:
<!--QuoteBegin-Lunatikus+9:07:2007, 09:06 -->
<span class="vbquote">(Lunatikus @ 9:07:2007, 09:06 )</span><!--QuoteEBegin-->Просто поставь после открытия запроса
[snapback]71716" rel="nofollow" target="_blank[/snapback]​
[/quote]
 
Z

zubr

Гость
#6
Можно конечно попробовать:
1. Сделать в фоне запрос только на инкрементируемое поле, чтобы определить количество записей. Опять таки, если запрос простой на всю таблицу.
2. Затем разбить запросы на пакеты по какому то количеству записей. И данные выводить не в DBGrid, а в StringGrid.
Но это все извраты, имхо, + время запроса увеличится на порядок.
 
S

SNike

Гость
#7
Можно конечно попробовать:
1. Сделать в фоне запрос только на инкрементируемое поле, чтобы определить количество записей. Опять таки, если запрос простой на всю таблицу.
2. Затем разбить запросы на пакеты по какому то количеству записей. И данные выводить не в DBGrid, а в StringGrid.
Но это все извраты, имхо, + время запроса увеличится на порядок.
Да нет, не стоит того. Пусть уж лучше анимация.
Задавая вопрос я предполагал что, возможно, есть какой-либо интерфейс, скажем, через тот же WinAPI, с помощью которого можно отслеживать состояние выполнения запроса
 
B

Barmutik

Гость
#8
Насколько мне известно некоторые провайдеры поддерживают call back с прогрессом выполнения запроса.. но .. тогда стоит искать конкретные драйвера и разбираться конкретно в функциях с ним работы.. в ADO такого нет!