Parece que tienes un problema de capacidad de memoria.
No tengo el componente que utilizas (TAdvStringGrid), pero parece que tiene algunas funcionalidades que el TStringGrid no tiene. En especial la de AddRow.
Esto me hace suponer que también debe tener DelRow o algo para borrar una línea.
Veo que tienes dos StringGrids, pero que solo necesitas uno a la vez.
Lo que puedes probar es llenar uno mientras vacías el otro.
Puedes hacer la siguiente prueba:
Código Delphi
[-]
Log(Format('Inicio bucle'));
i := 1;
while (DataGrid.RowCount > 1) do
begin
Log(Format('DataGrid.RowCount: %d - DataGridAgrupado.RowCount: %d', [DataGrid.RowCount, DataGridAgrupado.RowCount]));
DataGrid.Row := i;
If Trim(DataGrid.cells[0,i]) <> '' then
begin
If Trim(DataGrid.cells[0,i]) <> Trim(romp) then
begin
DataGridagrupado.AddRow;
filaactual := DataGridagrupado.RowCount-3;
DataGridagrupado.Row := filaactual;
DataGridagrupado.Cells[0,filaactual] := autoriz;
DataGridagrupado.Cells[1,filaactual] := nombre;
DataGridagrupado.Cells[2,filaactual] := FloatToStr(total);
DataGridagrupado.Cells[3,filaactual] := fecha;
total := 0; TStrings
total := total + StrToFloat(DataGrid.cells[2,i]);
romp := Trim(DataGrid.cells[0,i]);
nombre := Trim(DataGrid.cells[1,i]);
autoriz := Trim(DataGrid.cells[0,i]);
fecha := Trim(DataGrid.cells[3,i]);
end
else
begin
total := total + StrToFloat(DataGrid.cells[2,i]);
nombre := Trim(DataGrid.cells[1,i]);
autoriz := Trim(DataGrid.cells[0,i]);
fecha := Trim(DataGrid.cells[3,i]);
end;
end;
DataGrid.DelRow;
end;
Log(Format('Fin bucle'));
Nota:
No se como estará implementado DataGrid.DelRow. Quizás debas pasarle el nro de línea a borrar. En este caso sería la 1. DataGrid.DelRow(1);