Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация работы программы [D7]


Страницы:   1 2

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]

сам ответ и написал - записать в динамический массив. однако надо помнить что память не резиновая, и если все это будет кешироваться на диск, то спорный вопрос, выигрешь ли ты по времени


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо