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

ну, могу накидать пример, разбираться с твоим кодом лень, да и условие повторяемости непонятно.
Примерно так:
Код:
var
  KayValue1, KeyValue2 : String;
  Cnt : Integer;
  Total : Double;
begin
  DataSet.First;
  KeyValue1 := '';
  KeyValue2 := '';
  Cnt := 0;
  Total := 0.0;
  While Not DataSet.Eof Do
    Begin
      If (DataSet.FieldByName('Key1').AsString <> KeyValue1) Or (DataSet.FieldByName('Key2').AsString <> KeyValue2) 
        Then
           Begin
             If Cnt > 1 Then InsertTotalRow(); // Вставляем итоговую строку
             Cnt := 1;
             Total := DataSet.FieldByName('Value').AsFloat;
             KeyValue1 := DataSet.FieldByName('KeyValue1').AsString;
             KeyValue2 := DataSet.FieldByName('KeyValue2').AsString;
             InsertRow(); // Вставляем текущую строку             
           End
        Else
           Begin
             Inc(Cnt);
             Total := Total + DataSet.FieldByName('Value').AsFloat;
           End
      DataSet.Next;
    End;
end;

Что-то типа так.
InsertRow и InsertTotalRow - собственно вставка строки по данным.
Ответить с цитированием