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

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

Итоги и ApplyUpdate


Алексей Петухов ©   (2003-08-16 18:33:00) 

Уважаемые, мастера.
Научите пожалуйста, как правильно подсчитать итоги (сумму) по вычисляемому полю в TQuery, если TQuery кэшируется, а итоги хотелось бы видеть до ApplyUpdate по ходу заполнения TDBGrid-а.


Sergey13   (2003-08-18 09:04:00) [1]

2Алексей Петухов (16.08.03 18:33)
>хотелось бы видеть по ходу заполнения TDBGrid-а.
поставь грид из EhLib и будет тебе счастье


Алексей Петухов   (2003-08-18 06:43:00) [2]

> "summ _prod" пробел в имени это так задумано?
Нет очепятка вкралась.

> inherited; не нужно (нет там ничего у родителя)
А у меня есть.

> нет проверки на null в поле (невозможная ситуация?)
Точно.

> в AfterInsert данных в поле скорее всего нет, (их же еще не занесли) лутше в onPost
А вот это попробуем.

> если запрос такой как ты написал Алексей Петухов (17.08.03 12:58) [3]...
...полей как я писал sniknik © (17.08.03 14:00) [4]...

А уменя то так, то сяк.


sniknik   (2003-08-17 22:14:00) [3]

"summ _prod" пробел в имени это так задумано?
inherited; не нужно (нет там ничего у родителя)
нет проверки на null в поле (невозможная ситуация?)
в AfterInsert данных в поле скорее всего нет, (их же еще не занесли) лутше в onPost
OnCalcFields неважно когда происходит, если запрос такой как ты написал Алексей Петухов (17.08.03 12:58) [3] и ты их считаеш, и если нет вычисляемых полей как я писал sniknik © (17.08.03 14:00) [4] и ты их пытаешся посчитать.


Алексей Петухов   (2003-08-17 19:54:00) [4]

Уже попрбовал, такая ерунда получилась:
procedure TfNakTelo.qySpravAfterInsert(DataSet: TDataSet);
begin
try
laSummaProd.Caption:=currtostr(deltaSummProd+qySprav.fieldbyname("summ _prod").AsCurrency);
except
end;
inherited;
end;

Возникает исключение "Invalid Floating pointer operation"
И это событие происходит раньше, чем OnCalcFields


sniknik   (2003-08-17 19:40:00) [5]

смотри у события у квери, все что ты написал

procedure TForm1.Query1BeforeEdit(DataSet: TDataSet);
begin

end;

procedure TForm1.Query1BeforeInsert(DataSet: TDataSet);
begin

end;

....


Алексей Петухов   (2003-08-17 18:54:00) [6]

А как это делать?
отрабатывать события
beforeEdit,beforeInsert,beforeDelete,
afterEdit,afterInsert,afterDelete?


sniknik   (2003-08-17 16:30:00) [7]

вобщето просумировать summ_pok, summ_prod самому и отобразить (в Label.Caption к примеру) не проблема, пересчитывать > "при добавлении, редактировании, удалении полей".
считать естественно от оригинального query
select ...,
sum(kolvo*cena_pok) summ_pok, sum(kolvo*cena_prod) summ_prod
from ...

(???)


Алексей Петухов   (2003-08-17 15:19:00) [8]

Извиняюсь, пропустил слово " проблем" после " данном случае"


Алексей Петухов   (2003-08-17 15:17:00) [9]

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


sniknik   (2003-08-17 14:00:00) [10]

ну это не совсем вычисляемые поля, они считаются в запросе и в рекордсет(временную таблицу для BDE) попадают уже результаты поэтому чтобы их пересчитать надо рефреш для Query сделать.

если сделаеш истино вычисляемыми (двойной клик на квери, добавить поле(по правой кнопке), тип Calculated), "проблема" уйдет, все будет менятся по ходу и ничего дополнительно делать не придется.


Алексей Петухов   (2003-08-17 12:58:00) [11]

Вот кусочек SQL запроса:

select ...,
sum(kolvo*cena_pok) summ_pok, sum(kolvo*cena_prod) summ_prod
from ...
where ...
group by ...
order by ...

Как вы видите, здесь имеются два вычисляемых поля: summ_pok и summ_prod.
Мне нужно подсчитать итоговую сумму по этим полям.
Что-то типа:

select
sum(kolvo*cena_pok) summ_pok, sum(kolvo*cena_prod) summ_prod
from ...
where ...

Но:
1. Набор возвращаемый первоначальным запросом должен быть
сохранен.
2. Query первоначального запроса кэшируется, в связи с этим
надо как-то пересчитывать итоги по стобцам summ_pok и
summ_prod при добавлении, редактировании, удалении полей.

Как это сделать?


sniknik   (2003-08-17 12:02:00) [12]

надежда дело хорошее (особенно если это Она ;о))), но грамотная постановка вопроса важнее.


Алексей Петухов   (2003-08-17 09:36:00) [13]

Надеюсь на вашу поддежку, мастера.


Наверх

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