Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите! Форма не отображается пока не выполнится запрос к БД . [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 доченей формы..


Наверх

Титульная страница Поиск, карта сайта Написать письмо