Отображение хода запроса...или дружественность интерфейса

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
kostyl
Сообщения: 47
Зарегистрирован: 06 фев 2008, 10:24

Отображение хода запроса...или дружественность интерфейса

Сообщение kostyl » 03 мар 2008, 13:40

Подскажите как донести пользователю что запрос выполняется? Определить для всекх контролов формы курсор crSQLWait а потом(по окончанию запроса) изменить на дефаулт? Создать поток и зарисовывать на угад ProgressBar? Дописать чё в компонент доступа? А то будет думать что приложениевисит...
Заранее благодарю!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 03 мар 2008, 15:21

дело вкуса. время выполнения и количество выбираемых записей все равно неизвестно. Кроме того, от момента execute до первого fetch вообще даже о количестве речи идти не может.
Поэтому "дописать в компоненты" некуда и нечего.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 03 мар 2008, 18:02

Ну рюмашку-то в виде курсора изобразить не грех... Как - зависит от среды разработки и потому оффтоп. Имхо достаточно Screen.Cursor менять, а не по контролам шастать. На какой-то древней Дельфе не отрабатывало, если менять его прям в тексте там же, где запрос открывается, а если написать отдельную процедурку и вызывать - отрабатывало. У нас с тех пор так и повелось, как оно щас - не знаю ибо прверять лень.

kostyl
Сообщения: 47
Зарегистрирован: 06 фев 2008, 10:24

Сообщение kostyl » 04 мар 2008, 11:20

На Delphi 7 всё работает так например:

Код: Выделить всё

procedure StartSql;
 var I:integer;
begin
 for i:=0 to form1.ControlCount-1 do
  Form1.Controls[i].Cursor:=crSQLWait;
 Form1.Cursor:=crSQLWait;
 Application.ProcessMessages;
end;

kostyl
Сообщения: 47
Зарегистрирован: 06 фев 2008, 10:24

Сообщение kostyl » 04 мар 2008, 15:54

kdv писал(а):дело вкуса. время выполнения и количество выбираемых записей все равно неизвестно. Кроме того, от момента execute до первого fetch вообще даже о количестве речи идти не может.
Поэтому "дописать в компоненты" некуда и нечего.
А нельзя както тайком чтобы сторонний модуль или функция работала как то с записями по текужей тарнзакции, анализировала там чёта... что вообще никак нельзя?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 04 мар 2008, 16:04

сказали же что нет =)
а вообще пользователя не надо напрягать ждать, если запрос которым он пользуется часто висит больше 10 секунд, то что-то не так с запросом.

хотя меня и за 5 секунд пинают сразу =)

kostyl
Сообщения: 47
Зарегистрирован: 06 фев 2008, 10:24

Сообщение kostyl » 04 мар 2008, 16:29

Attid писал(а): если запрос которым он пользуется часто висит больше 10 секунд, то что-то не так с запросом.
Эх, если бы все запросы были по 10 секунд....

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Re: Отображение хода запроса...или дружественность интерфейс

Сообщение Kotъ-Begemotъ » 05 мар 2008, 20:02

kostyl писал(а):Подскажите как донести пользователю что запрос выполняется? Определить для всекх контролов формы курсор crSQLWait а потом(по окончанию запроса) изменить на дефаулт? Создать поток и зарисовывать на угад ProgressBar? Дописать чё в компонент доступа? А то будет думать что приложениевисит...
Заранее благодарю!
А зачем для каждого контрола? Screen.Cursor в защищённом блоке с восстановлением в запомненый курсор, который был до выполнения запрроса...

kostyl
Сообщения: 47
Зарегистрирован: 06 фев 2008, 10:24

Re: Отображение хода запроса...или дружественность интерфейс

Сообщение kostyl » 06 мар 2008, 09:05

Kotъ-Begemotъ писал(а):А зачем для каждого контрола? Screen.Cursor в защищённом блоке с восстановлением в запомненый курсор, который был до выполнения запрроса...
Ну ладно и так можно... А вот в отдельный поток очень удобно, только не прогресс зарисовывать, а статус с надписью "Идет запрос."
"Идет запрос..." "Идет запрос." и т.д.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 14 мар 2008, 13:04

kostyl писал(а):
Attid писал(а): если запрос которым он пользуется часто висит больше 10 секунд, то что-то не так с запросом.
Эх, если бы все запросы были по 10 секунд....
Дык, тово учитесь писать правильные запросы. :) Оптимизатор он штук хитрый, с ним умеючи надо. Вот буквально давеча очередной перл пишу
"а джойн б лефт джойн в" тормоза на ровном месте, в плане натурал, перебор начат с таблицы б, что совсем не айс...
"а лефт джойн б лефт джойн в" все ОК, убираю лефт план опять изувечен, как бог черепаху. :)
Вобщем основное пожелание не на то, как юзера заставить ждать молча, а как сделать так чтоб он не ждал. Американцы с постройкой небоскребов столкнулись с проблемой скоростных лифтов, решили тем что понавесили зеркал, лифты сразу стали "быстрее", но таки до определенного предела. Лучше терпение юзера слишком не испытывать. :)

kostyl
Сообщения: 47
Зарегистрирован: 06 фев 2008, 10:24

Сообщение kostyl » 14 мар 2008, 13:32

Ivan_Pisarevsky писал(а): ....
Да волею-неволею приходиться ему ждать когдо он с блобами работает. От таки блины...

Ответить