PDA

Ver la Versión Completa : Escritura de archivo dbf


ramiretor
26-05-2003, 21:13:45
Hola amigos del foro:

Actulamente estoy trabajando base de datos Oracle. Por cosas del destino necesito hacer un porgrama en D7, que 'exporte' la información a una tabla dbf. Las tablas destino y origen tienen la misma estructura. La cuestión es que he probado y mi programa funciona correctamente. El código que utilizo para copiar campo a campo entre la base de datos y la tabla es el siguiente:

for i:= 1 to registros do begin
Tabla.Insert;
Tabla.Append;


for j := 0 to NumeroCampos - 1 do begin

Tabla.FieldByName(tabla.Fields[j].FieldName).AsVariant :=
qryExporta.FieldByName(qryExporta.Fields[j].FieldName).AsVariant;

end;

Tabla.ApplyUpdates;
qryExporta.Next;

end;

----------------------------------------

donde: QryExporta es el TQuery de Oracle (origen ) y Tabla es la tabla de FoxPro ( destino). Numero campos es el numero de campos de la tabla o el query ( al fin y al cabo es lo mismo).
Mi problema reside en que cuando le cargo TQuery unos 1000 registros para copiar responde rápido ( unos 15 segs ), pero para unos 10000( diez mil) registros tarda unos 5 minutos.

Habrá alguna manera de agilizar el proceso de copiado ya que cuando se utilice este programa se copiarán unos 400000 registros.

Gracias y salu2

:cool:

andres1569
26-05-2003, 22:33:06
Hola:


for i:= 1 to registros do begin
Tabla.Insert;
Tabla.Append;


No entiendo bien porque usas simultáneamente estas dos instrucciones, si estás añadiendo registros, lo ideal es Append (no lo he comprobado pero la lógica me dice que debe ser más rápido también)


Tabla.ApplyUpdates;
qryExporta.Next;


Si usas CachedUpdates, sería bueno que aplicaras los cambios cada x registros, no a cada uno, como parece indicar este código. Aunque los CachedUpdates están pensados para realizar toda la operación de golpe, como una transacción, mi uso con tablas dBase y Paradox me dice que hay que grabar cada 200 registros más o menos, si no se van bloqueando registros (el límite son 255) y se satura la cosa, (imagino que con FoxPro puede ser parecido).

¿Te has planteado utilizar un componente TBachtMove? Hay que molestarse en asignar bien la equivalencia entre campos, pero es bastante más rápido que ir registro a registro.

Hasta pronto,

Un Saludo

delphi.com.ar
26-05-2003, 23:20:24
Otra opción:
Si solo necesitas exportar los archivos DBF, te recomiendo que utilices un TDataToDBF, que es un componente creado con ese propósito y no utiliza DLLs ni BDE ni nada, lo puedes bajar de mi página, pertenece al ExportSuite.