ну, могу накидать пример, разбираться с твоим кодом лень, да и условие повторяемости непонятно.
Примерно так:
Код:
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 - собственно вставка строки по данным.