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
sArchivo := varRutaArchivo;
DatosInsert := '';
varValidaExiste := '';
If FindFirst(sArchivo + '\*.txt', faArchive, SR) = 0 Then
Begin
Repeat
AssignFile(F, sArchivo + '\' + SR.Name);
Reset(F);
Tabla := FtNombreTabla(copy(SR.Name, 18, 100));
Buscar_Campos(Tabla, servidor_destino);
While Not Eof(F) Do
Begin
ReadLn(F, sLinea);
Condicion := ftCondicion(sLinea);
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(DatosInsert);
CloseFile(F);
MoveFile(PChar(varRutaArchivo + '\' + SR.Name), PChar(varRutaBackup + '\' + SR.Name));
Until FindNext(SR) <> 0;
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;