:: Visual Foxpro, Foxpro for DOS
как увеличить процесса обработки
All911
Автор

Сообщений: 23
Дата регистрации: 28.08.2014
есть программа создается таблица данных по выбранным реквизитам а потом передается таблицу в excel , по времени файл создается в течение 1 минуты, чтобы для пользователя было видно я вставила progressbar для формирование данных по реквизитам, но увеличилось время формирование на 5-10 мин . Можно это както исправить чтобы время обработки не увеличилось и был прогресс бар?
часть кода:
select TER
DO FORM p_cent
FOR I = 1 TO 100
a = inkey(.01)
scan
a=a+1


UPDATE P SET vsego=agg.vsego, c_03 = agg.c_03, c_05 = agg.c_05,SUM_STK = agg.SUM_STK ;
FROM (Select SUM(IIF(TER.Gr=>"03", 1, 0)) VSEGO,;
SUM(IIF(TER.Gr="03", 1, 0)) c_03, ;
SUM(IIF(TER.Gr="05" , 1, 0)) c_05, ;
SUM(IIF(TER.Gr<"10" , 1, 0)) SUM_STK, ;

FROM TER) agg ;
WHERE P.kod_str="010"

UPDATE P SET vsego=agg.vsego, c_03 = agg.c_03, c_05 = agg.c_05,SUM_STK = agg.SUM_STK ;
FROM (Select SUM(IIF(TER.Gr=>"03", 1, 0)) vsego, ;
SUM(IIF(TER.Gr="03" , 1, 0)) c_03, ;
SUM(IIF(TER.Gr="05" , 1, 0)) c_05, ;
SUM(IIF(TER.Gr<"10" , 1, 0)) SUM_STK, ;

FROM TER) agg ;
WHERE P.kod_str="011"


endscan
p_cent.Progress1.Value = i
ENDFOR
p_cent.Release
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Трындец...
Сами вставили тормоза в программу и теперь удивляются...
Зачем тут циклы? Зачем одну и ту же пару запросов гонять по сто раз в цикле? Да еще и с задержкой между итерациями?
Вы хотели, что бы update'ы вам градусник показали?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
All911
Автор

Сообщений: 23
Дата регистрации: 28.08.2014
P_cent это форма с градусником
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
All911
P_cent это форма с градусником
Да без разницы. Вы какой логикой руководствовались при написании сего кода?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
All911
по времени файл создается в течение 1 минуты
А покажите как он создавался за 1 мин.
Если этот же код, может вместо градусника, сделать что бы он за 1 сек. выполнялся?


------------------
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
All911
Автор

Сообщений: 23
Дата регистрации: 28.08.2014
да этот только без формы P_cent
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
All911
Автор

Сообщений: 23
Дата регистрации: 28.08.2014
так градусник нужен по заданию , чтобы пользователь видел как идет процесс
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
All911
так градусник нужен по заданию , чтобы пользователь видел как идет процесс
КАКОЙ процесс? Выполнения команды Update? Зачем 100 раз делать один и тот же scan в котором, в свою очередь, запускать команды берущие и пишущие одни и те же данные? И все это, в результате, в количестве 100 * количество записей под scan? Да еще с задежками на inkey(). Он то тут вообще что делает? Задержка для ускорения процесса?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Можно заменить на время строку:
p_cent.Progress1.Value = i
на
WAIT STR(m.i) WINDO NOWAIT
а другие упоминания об этой форме заремарить, чтобы посмотреть, может не 100 кратное присвоение .Value = i виновато в задержке (это само по себе не нагружает фокс, если не предпринимать специальных усилий для этого)
Ratings: 0 negative/1 positive
Re: как увеличить процесса обработки
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
All911
select TER
DO FORM p_cent
FOR I = 1 TO 100
a = inkey(.01)
liRecAll = reccount()
i = 0
scan
a=a+1
i = m.i+1
p_cent.Progress1.Value = round(m.i /liRecAll *100, 0)
UPDATE...
endscan
p_cent.Progress1.Value = i
ENDFOR
p_cent.Release
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
All911
Автор

Сообщений: 23
Дата регистрации: 28.08.2014
спасибо
Ratings: 0 negative/0 positive
Re: как увеличить процесса обработки
All911
Автор

Сообщений: 23
Дата регистрации: 28.08.2014
спасибо
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 alex;  (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика