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

Вниз

Помогите! Форма не отображается пока не выполнится запрос к БД .   Найти похожие ветки 

 
Crazy Joker   (2002-07-19 11:29) [0]

Из главной формы при нажатии кнопки "Выполнить" должна появляться модальная дочерняя форма, отображающая процесс выполнения запроса к БД Oracle в ProgressBar"е. Полученые данные запроса при этом форматируются и сливаются в файл.
При вызове запроса (метод Execute и последующий пошаговый перебор строк) в событии OnShow дочерней формы, она отображается только после того, как запрос будет выполнен. Не помогают ни Application.ProcessMesages, ни Paint, ни другие ухищрения. Как сделать так, чтобы форма отобразилась до начала обращения к БД?

(Для работы с Oracle я использую компоненты DOA (Direct Oracle Access от Allround Automations))


 
relict   (2002-07-19 11:43) [1]

повесь вызов запроса не на OnShow, а на Activate доченей формы..


 
Sergey13   (2002-07-19 11:46) [2]

2Crazy Joker © (19.07.02 11:29)
А каким макаром ты реализоал "отображение процесса выполнения запроса к БД Oracle в ProgressBar"е"? Это вообще возможно? Что то я про такое не слышал. Как сервер сообщает тебе "текушую" информацию? Что считать за 100% - выполнение запроса сервером или получение данных клиентом? Там ведь еще есть перекачка по сети, иногда очень тормозное звено.
ИМХО, все у тебя работает ПРАВИЛЬНО 8-), но к сожалению не так как хочется. 8-(


 
Johnmen   (2002-07-19 12:01) [3]

Отобразить форму до обращения и немодально.


 
Crazy Joker   (2002-07-19 12:27) [4]

2 Sergey13 ©:

Я делаю предварительно count(*), строк соответствующих запросу. А для отображения в ProgressBar"e использую следующий код:


OrclQrPerson: TOracleQuery;
...

with OrclQrPerson do
begin
Execute;
while not Eof do begin
CountProgressBar.StepIt;
...
Next;
end;
end;


2 Johnmen ©:
Немодально меня не устраивает, я уже пробовал этот вариант.


 
Crazy Joker   (2002-07-19 12:34) [5]

2 relict:
Спасибо, это помогло! :)


 
Sergey13   (2002-07-22 09:01) [6]

2Crazy Joker © (19.07.02 12:27)
>Я делаю предварительно count(*), строк соответствующих запросу.
А для count-запроса ты не делаешь прогресс-бар? 8-) По скорости выполнения на сервере они (count и извлекающий запросы) будут примерно одинаковые. Разве что передача по сети выбраных строк займет больше времени. Странный подход. Я бы своим программистам по шапке дал за такое украшательство - ради "красивости" лишний раз сервак дергать.
Что то я сомневаюсь, что приведенный код способен отображать процесс "выполнения запроса". Процесс форматирования и сливания результатов в файл - да, будет показывать. Но прогресс SQL-запроса - нет. Запрос выполняется по Execute в твоем случае (тут кстати можно узнать и количество выбраных строк не выполняя count(*) запрос), потом открывается(уже выполненый!!! иначе не откроется) и пошагово перебирается.


 
direx   (2002-07-22 11:40) [7]

Зачем такие ухищрения для индикации хода работы?
Пользователю от этого меньше ждать не придётся (скорее наоборот). Сделать Please wait.. и добавить что-нибудь динамичное, чтобы user не думал, что повис :-)


 
Nicolay V.   (2002-07-22 12:45) [8]

А есть такие прогрессбары типа нетскейповского? Когда он (Нетскейп) инсталлируется или страницу грузит у него индикатор туда-сюда бегает.


 
Sokoloff   (2002-07-22 13:30) [9]


> А есть такие прогрессбары типа нетскейповского? Когда он
> (Нетскейп) инсталлируется или страницу грузит у него индикатор
> туда-сюда бегает.

Возьми обычный прогресс бар добавь переменную delta,
вначале delta=1,
потом
if ((progressbar.Position=progressbar.Max) or (progressbar.Position=progressbar.Min)) then delta:=delta*(-1);
ProgressBar.Position:=ProgressBar.Position+delta;


 
psvital   (2002-07-22 15:32) [10]

Если речь идет только о том чтобы отобразить форму а потом начать выполнение запроса, то делается это просто.
1. Определаешь константу сообщения
(что-то вроде const MM_EXEC = WM_USER +$7009)
2. в методах формы определяешь процедуру обработки сообщения MM_EXEC, которая запускает запрос на исполнение
3. в обработчике onShow формы пишешь PostMessage(Handle, MM_EXEC,0,)



 
mga   (2002-07-24 16:19) [11]

Дело в том, что OnShow срабатывает ДО появления формы, а не сразу после. Можно поставить на эту форму таймер и а OnShow просто указать Timer1.Enabled:= True; По умолчанию таймер должен быть выключен, а интервал = 1. Хотя его можно подобрать империчекси. Вдруг таймер сработает раньше, чем форма покажется? :) А в OnTimer сразу же пишешь Timer1.Enabled:= False; А дальше свой код...

Геннадий



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

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

Наверх





Память: 0.59 MB
Время: 0.024 c
7-35471
lame
2002-05-21 05:18
2002.08.12
Как програмно остановить жесткий диск ?


1-35267
JohnBurg
2002-07-30 19:15
2002.08.12
Как можно из вызванной DLL возвращать значения


1-35272
Kran
2002-07-31 14:42
2002.08.12
Конвертация WideString в PChar


14-35421
FLIZ
2002-07-12 17:15
2002.08.12
Кто в каком возрасте из вас женился(если таковое было?) :-))


3-35210
sizmrebi
2002-07-22 17:43
2002.08.12
Pomogite plz





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