PDA

Ver la Versión Completa : lectura lenta de un archivo .DAT, ¿por que?


URBANO
08-12-2003, 13:17:29
Hola foro, tengo un programa el cual abre un archivo .DAT que almacena un número de registros y los graba en una tabla (hecha en access). El problema que tengo es que si hay almacenados entre 1 y 40 registros la lectura se hace rapida pero si hay entre 50 y 100, la lectura es demasiado lenta (puede tardar en leer y grabar los registros unos 15 minutos).
Alguien puede decirme de que manera puedo obtimizar esta lectura.
Acontinuacion pongo el código que utilizo para leer y grabar los registros:

procedure TFimportacion.aceptarClick(Sender: TObject);
var
cantidad: integer;
begin
screen.Cursor:=crhourglass;
progressbar1.position:=0;
if (edit1.Text<>'')then
begin
AssignFile(archivoatm,edit1.text);
Try
Reset(archivoatm);
Except On Exception Do
begin
showmessage('No es posible abrir el archivo.');
close;
exit;
end;
end;
while not eof(archivoatm) do
begin
try
read(archivoatm, visado);
except on exception do
begin
showmessage('Fallo de lectura.');
exit;
end;
end;
cantidad:=visado.cantidad;
label3.Caption:=inttostr(visado.numero)+'/'+visado.letra;
fimportacion.Refresh;
tablas.VISADOS.Append;
tablas.VISADOSNUMERO.value:=visado.numero;
tablas.VISADOSLETRA.value:=visado.letra;
tablas.VISADOSPROYECTO1.value:=visado.proyecto1;
tablas.VISADOSPROYECTO2.value:=visado.proyecto2;
tablas.VISADOSCODIGOCO.value:=visado.codigoco;
tablas.VISADOSPRESUPUESTO.value:=visado.presupuesto;
tablas.VISADOSGRUPO.value:=visado.grupo;
tablas.VISADOSPAGAR.value:=visado.pagar;
tablas.VISADOSIVA.value:=visado.iva;
tablas.VISADOSTOTALIVA.value:=visado.totaliva;
tablas.VISADOSPAGARIVA.value:=visado.pagariva;
tablas.VISADOSFECHA.value:=visado.fecha;
tablas.VISADOSTOTALEUROS.value:=visado.totaleuros;
tablas.VISADOSNOMBREEM.Value:=visado.nombreem;
tablas.VISADOSCIFEM.value:=visado.cifem;
tablas.VISADOSDIRECCIONEM.value:=visado.direccionem;
tablas.VISADOSPOBLACIONEM.value:=visado.poblacionem;
tablas.VISADOSNOMBRET.value:=visado.nombreet;
tablas.VISADOSCIFT.value:=visado.cift;
tablas.VISADOSDIRECCIONT.value:=visado.direcciont;
tablas.VISADOSPOBLACIONT.value:=visado.poblaciont;
tablas.VISADOSCOLEGIOCO.value:=visado.colegioco;
principal.menu1.tag:=1;
tablas.VISADOS.post;
progressbar1.Position:=progressbar1.position+round(100/cantidad);
principal.menu1.tag:=0;
end;
closefile(archivoatm);
progressbar1.Position:=100;
screen.cursor:=crdefault;
showmessage('Importacion realizada con éxito.');
principal.menu1.tag:=0;
fimportacion.close;
end
else
begin
screen.cursor:=crdefault;
showmessage('Debes de introducir una ruta.');
edit1.setfocus;
end;

end;

Julià T.
08-12-2003, 15:00:42
La lectura de un archivo es rapida.
La grabación en acces puede ser un poco más lenta pero no tanto

La lentitud puede estar en la línea:

fimportacion.Refresh;

URBANO
09-12-2003, 20:15:30
Esa no debe ser la causa, ya que esa linea es nueva (para actualizar un objeto nuevo que habia colocado en el form). Antes de colocar esa linea seguia igual de lento al escribir.
Podría ser por alguna otra causa?

Julià T.
09-12-2003, 21:07:16
la manera más simple y rápida para saberlo, marca como comentario aquellas lineas que supones que relentizan la ejecución, y alguna (o un conjunto) de ellas són las que te darán la solución.