Вниз
Скачать: CL | DM;

Суммирование полей   Найти похожие ветки 

 
Shade_   (2004-05-09 02:03) [0]

Может кто подскажет как отображать сумму значений полей одной таблицы в другой таблице, если они связаны через индекс один ко многим. Например есть заказ, на этот заказ в дополнительной таблице по номеру заказа хранятся все изделия, с ценой изделия. И нам нужно в главной таблице видеть эту сумму. При смене цены на изделия, автоматически менять сумму в главной таблице.


 
mike-d ©   (2004-05-09 09:45) [1]

Поля таблицы Master (tblM):
 ID - идентификатор заказа (ключевое поле)
 SUMMA - сумма заказа
Поля таблицы Detail (tblD):
 ID - идентификатор заказа (ключевое поле)
 Item - идентификатор изделия (ключевое поле)
 ItemCount - количество изделий этого типа
 ItemPrice - цена за единицу изделия
 ItemSumma - сумма заказа на это изделие (вычисляемое поле)

Считаем что все таблицы у нас сгруппированы в DataModule (DM). Обрабатываем события AfterPost и AfterDelete для таблицы tblD. Для признака удаления всего заказа имеет смысл определить флаг DeleteItems и манипулировать им в событии BeforePost для таблицы tblM.

procedure TDM.tblDAfterPost(DataSet: TDataSet);
var
 S: Currency;
 B: TBookmarkStr;
begin
 B := tblD.Bookmark;
 tblD.DisableControls;

 // вычисляем сумму всех позиций заказа
 S := 0;
 tblD.First;
 while not tblD.Eof do
 begin
   S := S + tblD.FieldByName("ItemPrice").AsCurrency * tblD.FieldByName("ItemCount").AsFloat;
   tblD.Next;
 end;

 // заносим полученный результат в Master table
 tblM.Edit;
 tblM.FieldByName("SUMMA").AsCurrency := S;
 tblM.Post;

 tblD.EnableControls;
 tblD.Bookmark := B;
end;

procedure TDM.tblDAfterDelete(DataSet: TDataSet);
begin
 // если это не удаление заказа, то пересчитаем общую сумму
 if not DeleteItems then tblDAfterPost(DataSet);
end;

procedure TDM.tblMBeforeDelete(DataSet: TDataSet);
begin
 DeleteItems := True;
 tblD.DisableControls;
 tblD.First;
 while not tblD.Eof do tblD.Delete;
 tblD.EnableControls;
 DeleteItems := False;
end;


Это одно из решений. Также можно воспользоваться SQL-запросами.
Рекомендую изучить исходники MastApp из примеров прилагаемых к Дельфи.


 
Shade_   (2004-05-11 02:36) [2]

Спасибо огромное за такой исчерпывающий ответ... Сейчас попробую всё это реализовать...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.02 c
3-1084362480
Basaur
2004-05-12 15:48
2004.05.30
технология DataSnap


14-1084264874
slaga
2004-05-11 12:41
2004.05.30
] Я вот хочу начать изучать COM технологию, хотел спросить может


11-1074101780
Phantomaz
2004-01-14 20:36
2004.05.30
Как поместить рисунок из ресурса (иконку) в PopupMenu ?


1-1084861513
Sandman25+1
2004-05-18 10:25
2004.05.30
Параметры типа procedure of object


3-1083681061
Doctor Deejay
2004-05-04 18:31
2004.05.30
дублирование записей




   Наверх