Ver Mensaje Individual
  #4  
Antiguo 21-09-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Reputación: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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...
Responder Con Cita