Ver Mensaje Individual
  #11  
Antiguo 15-05-2012
papote654 papote654 is offline
Miembro
 
Registrado: nov 2006
Posts: 29
Reputación: 0
papote654 Va por buen camino
He realizado las pruebas con las recomendaciones que me han hecho pero la verdad, para mi sorpresa insertando todo de una vez es mas rapido que hacerlo por lotes. El codigo es este.

el archivo esta compuesto por datos como este.

esa primera parte hasta el simbolo > es la condicion para poder validar si el registro existe, hago esto al momento de exportar ya que se supone que esos valores talvez no existan en la tabla destino.

WHERE Se_codigo_pais = '187' AND Se_codigo_ciudad = '3323' AND Se_codigo = '5'>'5','3323','187','VILLA DUARTE'

Código Delphi [-]
Procedure Tfrm_configuracion.Importar;
Var
   F: TextFile;
   sLinea: String;
   sArchivo, DatosInsert, Tabla, varValidaExiste, Condicion: String;
   SR: TSearchRec;
Begin
   //ruta de los archivos
   sArchivo := varRutaArchivo;

   DatosInsert := '';
   varValidaExiste := '';

   //busca todos los archivos de la carpeta definida
   If FindFirst(sArchivo + '\*.txt', faArchive, SR) = 0 Then
      Begin
         //recorre los archivos de la carpeta
         Repeat

            //asigna el archivo
            AssignFile(F, sArchivo + '\' + SR.Name);

            //abro el archivo
            Reset(F);

            //captura el nombre real de la tabla
            Tabla := FtNombreTabla(copy(SR.Name, 18, 100));

            //busca los campos del servidor de destino
            Buscar_Campos(Tabla, servidor_destino);

            While Not Eof(F) Do
               Begin
                  //recorre los datos del archivo
                  ReadLn(F, sLinea);

                  Condicion := ftCondicion(sLinea);

                  //construyo el insert
                  varValidaExiste := 'IF EXISTS(SELECT 1 FROM ' + Tabla + ' ' + Condicion + ') DELETE FROM ' + Tabla + ' ' + Condicion;

                  DatosInsert := DatosInsert + varValidaExiste + ' INSERT INTO ' + Tabla + '(' + CamposOrdenados + ')' + ' VALUES(' + Copy(sLinea, PosicionesCondicion, Length(sLinea)) + ')';
               End;

            //inserta datos en la tabla de destino.
            Inserta_datos(DatosInsert);

            //cierra el archivo
            CloseFile(F);

            //muevo el archivo a otra carpeta de backup
            MoveFile(PChar(varRutaArchivo + '\' + SR.Name), PChar(varRutaBackup + '\' + SR.Name));

         Until FindNext(SR) <> 0; //cuando termine de recorrer los archivos de la carpeta

         //cierra el fichero de la carpeta donde estan los archivos
         FindClose(SR);
      End;
End;

Procedure Tfrm_configuracion.Inserta_datos(DatosInsert: String);
Var
   Qry: TADOQuery;
Begin
   Qry := TADOQuery.Create(Self);

   Qry.Connection := servidor_destino;

   With Qry, SQL Do
      Begin
         Close;
         Clear;
         Add(DatosInsert);
         ExecSQL;
      End;

   Qry.free;
End;
__________________
Al que no le gusta enseñar, no merece aprender...
Responder Con Cita