Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 07:20   #1
asimpsons
 
Регистрация: 14.10.2008
Сообщений: 5
По умолчанию dataset и progressbar

Всем добрый день!
Помогите, не могу связать dataset и progressbar между собой. не знаю куда ставить inc() и где взять max. Вот примерный код:
Цитата:
procedure TfmMain.sbShowmayqClick(Sender: TObject);
begin
with dm do
begin
qSubGR.close;
qSubGR.sql[3]:='where t.n_gr='''+qGR.fieldbyname('n_gr'). AsString+'''';
qSubGR.sql[39]:='substring(r.n_mat,1,2)='''+qGR.f ieldbyname('n_g r').AsString+'''';
qSubGR.active:=true;
end;
end;
asimpsons вне форума Ответить с цитированием
Старый 27.07.2009, 09:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мой вам совет - не заморачивайтесь. для подобных случаев придумали курсор в виде песочных часиков...
либо, видел прогрессбар при установке Microsoft Visual Studio - бегущая полосочка, когда дошла до конца, пошла снова с начала... и так в цикле..

потому что, для того, чтобы получить количество обрабатываемых записей, Вам прийдётся сначала
выполнить запрос select count(*) from ... where ... ваше условие..
и только потом уже запрос на обработку с тем же where
это 1) двойные затраты времени
2) количество записей может и изменится, между двумя запросами...

Последний раз редактировалось Serge_Bliznykov; 27.07.2009 в 09:16.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.07.2009, 15:09   #3
asimpsons
 
Регистрация: 14.10.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
бегущая полосочка, когда дошла до конца, пошла снова с начала... и так в цикле..
После долгих раздумий я решил поступить как вы сказали, там тоже возникла проблемка - как вы знаете в дельфи 5 нет поддержки gif анимации, я воспользовался WebBrouser'ом НО при загрузке данных с БД gif висит. еще поюзал нет и нашел gif компоненты, RxLib, по мануалу устанавливал, ну как обычно устанавливаются компоненты - выдаёт ошибку.
asimpsons вне форума Ответить с цитированием
Старый 27.07.2009, 15:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
НО при загрузке данных с БД gif висит
А можно и не GIFом. В таймере прогрессбар крути.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2009, 15:58   #5
asimpsons
 
Регистрация: 14.10.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А можно и не GIFом. В таймере прогрессбар крути.
так попробовал но итог тот же, прогрессбар висит пока данные грузятся.
asimpsons вне форума Ответить с цитированием
Старый 27.07.2009, 16:04   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
asimpsons
Тогда действительно не морочь голову. Оставь песочные часы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2009, 07:00   #7
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

можно в поток прогрессбар засунуть..токда не будет песочных часиков...

но всё равно надо будет

выполнить запрос select count(*) from ... where ... ваше условие..

хотя у меня 11 000 000 записей считает секунды за 3-4
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 28.07.2009, 09:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
хотя у меня 11 000 000 записей считает секунды за 3-4
а что за СУБД? условие в Where не забыли написать? причём какое-нибудь с LIKE (или поиском подстроки в строке) - это обычно плохо индексируется (да и в пост #1 именно такое условие используется!), а ещё на производительность очень плохо влияет использование связки по логическому ИЛИ
where условие OR условие OR условие - практически в ТРИ раза дольше, чем каждое из условий по отдельности... а ещё бывает условие, связывающее таблицу с другими таблицами...

короче, подсчёт количества записей ОЧЕНЬ сильно зависит от конкретного условия (ну и конкретной таблицы, конечно). Согласитесь, нелогично: пользователю сначала прийдётся ждать сколько-то секунд (и не факт, что 3-4), чтобы потом ждать уже наблюдая прогрессбар...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.07.2009, 10:16   #9
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
select
  case
    when (polis.snils is null) or  (polis.snils='00000000000')  then '   -   -      '
  else
    substring(polis.snils from 1 for 3)||'-'||substring(polis.snils from 4 for 3)||'-'||substring(polis.snils from 7 for 3)||' '||substring(polis.snils from 10 for 2)
  end as ss,
  polis.fam,name.name as im,
  middle_name.name as ot,
  case polis.sex when 1 then 'М' else 'Ж' end as SEX,
  polis.birthday as dr,
  polis.doc_type_id as TYPE_DOC,
  polis.seriesnumber,
  polis.socium_id as soc,

 case  (select first 1 class.class||' '||area.name from area, class where area.code = substring((select code from area where id=polis.area_id ) from 1 for 6)||'000000' and class.id=area.class_id ) when
 (select first 1 class.class||' '||area.name from area, class where area.code = substring((select code from area where id=polis.area_id ) from 1 for 3)||'000000000' and class.id=area.class_id ) then
  (select first 1 class.class||' '||area.name from area, class where area.code = substring((select code from area where id=polis.area_id ) from 1 for 3)||'000000000' and class.id=area.class_id )
  else
 (select first 1 class.class||' '||area.name from area, class where area.code = substring((select code from area where id=polis.area_id ) from 1 for 3)||'000000000' and class.id=area.class_id )||' '||
 (select first 1 class.class||' '||area.name from area, class where area.code = substring((select code from area where id=polis.area_id ) from 1 for 6)||'000000' and class.id=area.class_id ) end as rr,

 case  when
 (substring ((select first 1 class.class||' '||area.name from area,
  class where area.id=polis.area_id and class.id=area.class_id ) from 1 for 1)='Г') or
 (substring((select first 1 class.class||' '||area.name from area, class where
     area.code = substring((select code from area where id=polis.area_id )
      from 1 for 9)||'000' and class.id=area.class_id ) from 1 for 3)='Р-Н') then
  (select first 1 class.class||' '||area.name from area, class where area.id=polis.area_id and class.id=area.class_id )
  else
 (select first 1 class.class||' '||area.name from area, class where area.code = substring((select code from area where id=polis.area_id ) from 1 for 9)||'000' and class.id=area.class_id )||' '||
 (select first 1 class.class||' '||area.name from area, class where area.id=polis.area_id and class.id=area.class_id ) end as np,
  class.class||' '||street_dic.name as STREET ,
  case when polis.build is null then '' else polis.build end as build,
  case when polis.korpus is null then '' else polis.korpus end as korpus,
  case when polis.house is null then '' else polis.house end as house,
  case when polis.flat is null then '' else polis.flat end as flat,
  polis.series,
  polis.number,
  polis.date_out,
  polis.start_date,
  polis.end_date,
  polis.is_active,
  dial.dial_number,
  urpers.name as urpers,
  urpers.inn as U_inn,
  urpers.kpp as U_kpp,
  polis.syn_date ,
  polis.id as SOURSE_ID
  from
  polis,
  name, 
  middle_name,street, 
  street_dic,class,
  dial, 
  urpers
where
  polis.is_active=1 and
  name.id=polis.name_id and 
  middle_name.id=polis.middle_name_id and 
  street.street_dic_id=street_dic.id and 
  street.class_id=class.id and 
  street.id=polis.street_id and  
  dial.id=polis.dial_id and 
  urpers.id=dial.urpers_id and 
  polis.date_out is not null

------ Performance info ------
Prepare time = 31ms
Execute time = 31ms
Avg fetch time = 1,35 ms
Current memory = 907*784
Max memory = 933*716
Memory buffers = 120
Reads from disk to cache = 4*165
Writes from cache to disk = 0
Fetches from cache = 41*544
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 28.07.2009, 12:40   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

и зачем здесь вся эта портянка если речь идет про подсчет кол-ва записей?
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
dataset sergei64_89 Общие вопросы .NET 1 19.09.2008 20:14
DataSet nimf БД в Delphi 3 28.01.2008 23:03
ADODataSet: cannot modify a read-only dataset cvetochek Помощь студентам 2 29.10.2007 14:49
доступ к DataSet EdNovice БД в Delphi 0 11.05.2007 07:01