Hola:
¿MySQL? es una base de datos que no he usado, que gran ayuda no?
Bueno, bueno para empezar ¿cuantos son muchos registros?, hay varias maneras en las que lo puedes hacer, por lo que veo en tu rutina darle formato al archivo que vas a subir está bien (a menos que lo veas lento). Ahora al momento de buscar la llave ¿por qué no pones la sentencia en el Query y solo le pasas los párametros? pero en lugar de traer todo el registro un count(*):
Código SQL
[-]
Select count(*) as registros from tbl_venta
where ....
De manera que sólo le pasas la sentencia una vez y la vas abriendo:
Código Delphi
[-]
bd.Qry_Vld.ParamByName('Cod_Movi').AsString:=campos[11];
bd.Qry_Vld.ParamByName('Document').AsString:=campos[12];
bd.Qry_Vld.ParamByName('Linea').AsString:=campos[13];
bd.Qry_Vld.Open;
Ahora bien, de lo que yo he hecho llamar a post en cada registro lo hace muy lento y lo uso cada determinado número de registros insertados, por ejemplo cada 1000 registros.
Prueba a ver si esos arreglos hacen más rapida la aplicación.