Delphi - de un TXT de 140MB a SQL

 
Vista:

de un TXT de 140MB a SQL

Publicado por Mark Comix (8 intervenciones) el 01/03/2005 15:13:06
Hola, resulta que tengo un archivo TXT que tiene 8millones de lineas. Necesito pasarlo a una tabla SQL. Lo primero que se me ocurrio fue abrir el archivo TXT desde Delphi, leer un renglon, separar cada parte del renglon (nombre, cuit, categoria, etc) en una variable interna. Una ves que tengo cada var uso un storeproc que hace el insert de cada var en la tabla SQL. Luego repito hasta que el while de EOF. El tema es que son 8 millones de registro y en mi AMD 2000MHZ tarda 2Horas!!!!!, cuando quiera hacerlo todos lso meses el cleinte en su Celeron 400Mhz, me va a matar, ya que calculo que va a tardar como 6 o mas horas.
LA pregunta es, hay alguna forma de hacerlo mas rapido?, usando otra cosa que no sea el Store?, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:de un TXT de 140MB a SQL

Publicado por Kwerty (112 intervenciones) el 01/03/2005 16:35:39
Hombre, tus razones tendrás y seguro que ya has pensado en esto, pero eso que dices es una brutalidad. ¿Por qué el cliente no lo introduce directamente en la BD? Otro modo sería crear tantos archivos de texto como variables haya para introducir (si son nombre, cuit y categoria), que los introduzca en 3 archivos de texto separados (eso se hace fácil con un programita si quieres dejárselo más fácil). Luego puedes acceder a los 3 archivos (quizás por medio de TStringList si te deja tu memoria) e insertar. Supongo que así se trabajará más rápido y te ahorras de tener que separar variables del texto.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:de un TXT de 140MB a SQL

Publicado por Mark Comix (8 intervenciones) el 01/03/2005 18:35:17
¿Por qué el cliente no lo introduce directamente en la BD?
porque el archivo no es del cliente, sino que se baja de la internet todos los meses, es una base de datos de impuestos nacional.
que es el TStringList??
estuve leyendo por ahi que hay una manera de crear una rutina SQL que copia todo directo del TXT a la BD sin pasar por validaciones o demas, alguien sabe algo de esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:de un TXT de 140MB a SQL

Publicado por Kwerty (112 intervenciones) el 01/03/2005 19:00:03
Una StringList es un objeto que almacena dinámicamente una serie de cadenas de texto. A lo que me refería es a lo siguiente: Imagina una linea típica del archivo de texto
Campo1 Campo2 Campo3
Si en lugar de esta linea tenemos 3 archivos TXT con
Campo1 el primero, Campo2 el segundo y Campo3 el tercero nos evitamos tener que trabajar el texto, separando campos y demás.
Cogemos los 3 archivos después de crear 3 StringList y los cargamos en ellas. Luego, al insertar, decimos:
insert into Tabla (Campo1, Campo2, Campo3)
values (Campo1=:C1, Campo2=:C2, Campo3=:C3);
Y pasamos los parámetros (y metemos el procedimiento dentro de un bulce que nos recorra todas las StringList):
for i:=0 to StringList1.Count-1 do begin
Consulta.Parameters[0].Value:=StringList1.Fields[i].AsString; //C1
Consulta.Parameters[1].Value:=StringList1.Fields[i].AsString; //C2
Consulta.Parameters[1].Value:=StringList1.Fields[i].AsString; //C3
//Ahora avanzamos al siguiente campo de cada StringList
StringList1.Next;
StringList2.Next;
StringList3.Next;
end;

Es una solución (no sé hasta que punto mejorará el rendimiento)
Con respecto a lo que dices decrear una rutina SQL que copia del TXT a la BD no lo sé.
En fin, suerte. Si necesitas mas ayuda, pregunta en el foro, que para eso estamos.
Un saludo.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar