Creo que la sugerencia del amigo Roman, es acertada.
La propiedad
Value de un TFields es de tipo Variant, con lo cual el usar un vector de tipo Variant no tiene justificacion.
Ademas en cada ciclo de lectura de sql_Origen, estas dimensionando el vector, creo que eso se debe hacer antes de iniciar el ciclo de lectura una sola vez.
Alternativa 1:
Código Delphi
[-]
procedure TForm1.CopiarRegistro(sql_Origen :TSimpleDataSet; sql_Destino :TSimpleDataSet);
var
larr_Valores : Variant;
lint_Cursor : Integer;
x : Integer;
begin
sql_Destino.Open;
sql_Origen.Open;
larr_Valores := VarArrayCreate([0,sql_Origen.Fieldcount- 1],VarVariant);
while(not sql_Origen.Eof) do
begin
for lint_Cursor := 0 to (sql_Origen.Fieldcount-1) do
larr_Valores[lint_Cursor] := sql_Origen.fields[lint_Cursor].Value ;
sql_Destino.Append ;
for lint_Cursor := 0 to (sql_Destino.Fieldcount-1) do
sql_Destino.fields[lint_Cursor].Value := larr_Valores[lint_cursor] ;
sql_Destino.Post;
sql_Origen.Next;
sql_Destino.ApplyUpdates(-1);
end;
end;
Alternativa 2:
Código Delphi
[-]
procedure TForm1.CopiarRegistro(sql_Origen :TSimpleDataSet; sql_Destino :TSimpleDataSet);
var
lint_Cursor : Integer;
x : Integer;
begin
sql_Destino.Open;
sql_Origen.Open;
while(not sql_Origen.Eof) do
begin
sql_Destino.Append ;
for lint_Cursor := 0 to (sql_Destino.Fieldcount-1) do
sql_Destino.fields[lint_Cursor].Value := sql_Origen.fields[lint_Cursor].Value;
sql_Destino.Post;
sql_Origen.Next;
sql_Destino.ApplyUpdates(-1);
end;
end;
Saludos...