![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация работы программы [D7]
McSimm2 © (2003-06-04 08:16:00)Есть программа работа которой предусматривает последовательное формирование большого количества однотиптых отчётов. На формирование каждого тратится около минуты. Костяк запроса выглядит так:
select sum(k.kolich) as Sum_Kolich,
sum(k.kolich1) as Sum_Kolich1,
sum(k.kolich2) as Sum_Kolich2
from ivcdba.table1 k, ivcdba.table1 d
where ((d.field1 = k.field1(+)) and
(d.field2 = k.field2(+)) and
(d.field3 = k.field3(+)) and
(d.field4 = k.field4(+))) %s
Чтобы сформировать отчёт к этому запросу в параметр %s передаётся ещё одно условие, например
and d.pole5 = 1
Для формирования второго отчёта, который начинает формироваться сразу же после выполнения предыдущего к "костяку" присоединится
уже, например
and d.poleN = NN
Вопрос такой: собственно говоря - сабж.
Может есть смысл залить всё это безобразие в динамический массив и уже по нему тогда бегать, вычисляя нужные суммы?
McSimm2 (2003-06-04 09:41:00) [21]>> ЮЮ
Да, если имеется две таблицы в первой 10, а во второй 100 - то действительно "очень сложно" получить 100.
Читай внимательнее... Выяснили, что таблицы 2 !!!
ЮЮ (2003-06-04 09:30:00) [22]Хорошая задача. Для зав.складом, наверное:"как, имея в таблице только 10 записей, получить в отчете 100" :-)
McSimm2 (2003-06-04 09:29:00) [23]В виду того,что сделал как советовал
>> needle © (04.06.03 08:23)
тему объявляю закрытой
McSimm2 (2003-06-04 09:26:00) [24]To Наталия
просто очепятка: естественно
from table1 k, table2 d
McSimm2 (2003-06-04 09:25:00) [25]>> To ЮЮ
>>... and d.pole5 = 1
>Если есть хотя бы одна запись с d.pole5 = 1, то просуммируются >все записи k для конкретного field1,field2,field3,field4
И что ? в этом задача и стоит.
McSimm2 (2003-06-04 09:22:00) [26]>> To Alex_***
TClientDataSet работает с одним полем а не с DataSet.
К тому же IMHO в 5 Delphi eё не наблюдается
PS
(я пишу в 5 а не в 7, как указал.Просто привык писать в 7, а тут вот Qreport понадобился и пришлось 5 ставить...)
ЮЮ (2003-06-04 09:22:00) [27]McSimm2 (04.06.03 09:08)
>... and d.pole5 = 1
Если есть хотя бы одна запись с d.pole5 = 1, то просуммируются все записи k для конкретного field1,field2,field3,field4
ЮЮ (2003-06-04 09:18:00) [28]>А зачем такой усложнённый запрос, если данные из одной таблицы берутся?
Зато при перемножении таблицы записей будет больше, причем далеко не те, что ожидали :-) Если он уберёт SUM и посмотрит на то, что суммирует - удивится
Наталия (2003-06-04 09:16:00) [29]Так k и d у тебя одна и та же таблица.
Alex_*** (2003-06-04 09:14:00) [30]Один раз залить в TClientDataSet и делай с ним что хочешь
McSimm2 (2003-06-04 09:08:00) [31]> To Наталия © (04.06.03 08:59)
select sum(k.kolich) as Sum_Kolich, ...
^^^
... and d.pole5 = 1
^^^
Наталия (2003-06-04 08:59:00) [32]А зачем такой усложнённый запрос, если данные из одной таблицы берутся?
>from ivcdba.table1 k, ivcdba.table1 d
needle (2003-06-04 08:23:00) [33]сам ответ и написал - записать в динамический массив. однако надо помнить что память не резиновая, и если все это будет кешироваться на диск, то спорный вопрос, выигрешь ли ты по времени