Показать сообщение отдельно
  #2  
Старый 12.06.2017, 22:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вариант 1.
Считаем локально. При изменении датасета сохраняем позицию курсора, потом отключаем визуальные компоненты, проходимся по датасету суммируя, потом возвращаемся к сохраненной позиции курсора. Типа так:
Код:
var
  S : Currency;
  BM : Pointer;
begin
  S := 0;
  BM := ADOQuery1.GetBookmark;
  ADOQuery1.DisableControls;
  Try
    ADOQuery1.First;
    While Not ADOQuery1.Eof Do
      Begin
        S := S + ADOQuery1.FieldByName('Summa').AsCurrency;
        ADOQuery1..Next;
      End;
  Finally
    ADOQuery1.GotoBookmark(BM);
    ADOQuery1.EnableControls;
  End;
  label1.Caption := CurrToStr(S);
end;

Вариант 2.
На тот же момент просто вызываем запрос вида:
Код:
SELECT SUM(Summa) AS Total FROM MyTable WHERE Parikmakher_id = :id
Тут надо установить id парикмахера, потом, после выполнения, вытаскиваем значение поля Total

Вариант 3.
Пользуемся бесплатным сыром. Берем что-нить типа devExpress или похожих мощных библиотек. Там обычно такие функции уже встроенны, просто делаем настройку на показ соотв. агрегатной функции.

Ну и куча промежуточных решений. У каждого есть свои плюсы и минусы.
Ответить с цитированием