Текущий архив: 2004.05.30;
Скачать: 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 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.039 c