![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите! Форма не отображается пока не выполнится запрос к БД . [D6, Oracle]
Crazy Joker © (2002-07-19 11:29:00)Из главной формы при нажатии кнопки "Выполнить" должна появляться модальнаядочерняя форма, отображающая процесс выполнения запроса к БД Oracle в ProgressBar"е. Полученые данные запроса при этом форматируются и сливаются в файл.
При вызове запроса (метод Execute и последующий пошаговый перебор строк) в событии OnShowдочерней формы, она отображается только после того, как запрос будет выполнен. Не помогают ни Application.ProcessMesages, ни Paint, ни другие ухищрения. Как сделать так, чтобы форма отобразилась до начала обращения к БД?
(Для работы с Oracle я использую компоненты DOA (Direct Oracle Access от Allround Automations))
mga (2002-07-24 16:19:00) [1]Дело в том, что OnShow срабатывает ДО появления формы, а не сразу после. Можно поставить на эту форму таймер и а OnShow просто указать Timer1.Enabled:= True; По умолчанию таймер должен быть выключен, а интервал = 1. Хотя его можно подобрать империчекси. Вдруг таймер сработает раньше, чем форма покажется? :) А в OnTimer сразу же пишешь Timer1.Enabled:= False; А дальше свой код...
Геннадий
psvital (2002-07-22 15:32:00) [2]Если речь идет только о том чтобы отобразить форму а потом начать выполнение запроса, то делается это просто.
1. Определаешь константу сообщения
(что-то вроде const MM_EXEC = WM_USER +$7009)
2. в методах формы определяешь процедуру обработки сообщения MM_EXEC, которая запускает запрос на исполнение
3. в обработчике onShow формы пишешь PostMessage(Handle, MM_EXEC,0,)
Sokoloff (2002-07-22 13:30:00) [3]
> А есть такие прогрессбары типа нетскейповского? Когда он
> (Нетскейп) инсталлируется или страницу грузит у него индикатор
> туда-сюда бегает.
Возьми обычный прогресс бар добавь переменную delta,
вначале delta=1,
потом
if ((progressbar.Position=progressbar.Max) or (progressbar.Position=progressbar.Min)) then delta:=delta*(-1);
ProgressBar.Position:=ProgressBar.Position+delta;
Nicolay V. (2002-07-22 12:45:00) [4]А есть такие прогрессбары типа нетскейповского? Когда он (Нетскейп) инсталлируется или страницу грузит у него индикатор туда-сюда бегает.
direx (2002-07-22 11:40:00) [5]Зачем такие ухищрения для индикации хода работы?
Пользователю от этого меньше ждать не придётся (скорее наоборот). Сделать Please wait.. и добавить что-нибудь динамичное, чтобы user не думал, что повис :-)
Sergey13 (2002-07-22 09:01:00) [6]2Crazy Joker © (19.07.02 12:27)
>Я делаю предварительно count(*), строк соответствующих запросу.
А для count-запроса ты не делаешь прогресс-бар? 8-) По скорости выполнения на сервере они (count и извлекающий запросы) будут примерно одинаковые. Разве что передача по сети выбраных строк займет больше времени. Странный подход. Я бы своим программистам по шапке дал за такое украшательство - ради "красивости" лишний раз сервак дергать.
Что то я сомневаюсь, что приведенный код способен отображать процесс "выполнения запроса". Процесс форматирования и сливания результатов в файл - да, будет показывать. Но прогресс SQL-запроса - нет. Запрос выполняется по Execute в твоем случае (тут кстати можно узнать и количество выбраных строк не выполняя count(*) запрос), потом открывается(уже выполненый!!! иначе не откроется) и пошагово перебирается.
Crazy Joker (2002-07-19 12:34:00) [7]2 relict:
Спасибо, это помогло! :)
Crazy Joker (2002-07-19 12:27:00) [8]2 Sergey13 ©:
Я делаю предварительно count(*), строк соответствующих запросу. А для отображения в ProgressBar"e использую следующий код:
OrclQrPerson: TOracleQuery;
...
with OrclQrPerson do
begin
Execute;
while not Eof do begin
CountProgressBar.StepIt;
...
Next;
end;
end;
2 Johnmen ©:
Немодально меня не устраивает, я уже пробовал этот вариант.
Johnmen (2002-07-19 12:01:00) [9]Отобразить форму до обращения и немодально.
Sergey13 (2002-07-19 11:46:00) [10]2Crazy Joker © (19.07.02 11:29)
А каким макаром ты реализоал "отображение процесса выполнения запроса к БД Oracle в ProgressBar"е"? Это вообще возможно? Что то я про такое не слышал. Как сервер сообщает тебе "текушую" информацию? Что считать за 100% - выполнение запроса сервером или получение данных клиентом? Там ведь еще есть перекачка по сети, иногда очень тормозное звено.
ИМХО, все у тебя работает ПРАВИЛЬНО 8-), но к сожалению не так как хочется. 8-(
relict (2002-07-19 11:43:00) [11]повесь вызов запроса не на OnShow, а на Activate доченей формы..