Buen dia,
cuento con dos motores(db1-oracle y db2-sqlserver05), con unas tablas equivalentes, debo vaciar el contenido de una tabla db1 a db2, para ello, utilizo esta funcion a la cual le paso los dos datasets, origen y destino, que cuentan con las misma estructura:
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;
while(not sql_Origen.Eof) do
begin
larr_Valores := VarArrayCreate([0,sql_Origen.Fieldcount-1],VarVariant);
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;
El procedimiento funciona, pero al ejecutarse, hago la prueba cargando en el dataset una tabla de 6 columnas y 50 mil filas, y ejecuta la tarea en mas de 7 horas, lo que me parece exagerado, dado que si subo un csv manualmente, con esa misma informacion, no toma mas de 30 minutos, es mi primera experiencia programando el delphi, desearia conocer sus opiniones con respecto a la eficiencia del codigo, es esta es la solucion mas optima?
Agradezco sus sugerencias al respecto.