Duas coisas:

1) Carrega o texto todo em um TStringList e navega nele, ao invés de navegar 
fazendo esse lance de abrir/percorrer/fechar. Daí, percorre só o TStringList. 
Fica mais rápido.

2) Não faz esse lance de post! Vai comer mais memória mesmo, pq as atualizações 
vão ficar todas na estação. O ideal mesmo é abrir uma transação, emitir 
explicitamente os INSERTs/DELETEs/UPDATEs no banco e depois, comitar ou 
cancelar a transação caso esta dê problema.

Com isso tudo, vai ficar uma bala!

Sds.


________________________________

To: delphi-br@yahoogrupos.com.br
From: [EMAIL PROTECTED]
Date: Thu, 14 Feb 2008 11:27:06 -0800
Subject: Res: [delphi-br] Leitura de arquivo texto







O que vc pode fazer é a cada 50 registros por exemplo gravar o arquivo 
fisicamente no banco e continuar exportando.

Sempre que gravar os arquivos fisicamente feche e abra a tabela de novo, mas 
sem registros ...
----- Mensagem original ----
De: auriston.delphi <[EMAIL PROTECTED]>
Para: delphi-br@yahoogrupos.com.br
Enviadas: Quinta-feira, 14 de Fevereiro de 2008 15:51:32
Assunto: [delphi-br] Leitura de arquivo texto

Quando efetuo uma leitura de um arquivo texto para gravar o banco de

dados esta dando a mensagem OUT OF MEMORY, eu uso a rotina abaixo:

AssignFile(Nomearqu ivo, OpenDialog1. FileName) ;

Screen.Cursor := crSQLWait;

ProgressBar1. Min := 0;

ProgressBar1. Max := Tilinha;

Reset(Nomearquivo) ;

dm.qrytemp.DisableC ontrols;

while not Eoln(Nomearquivo) do

begin

Form1.Caption := Copy(Entrada, 1,126);

inc(ilinha);

Readln(Nomearquivo, Entrada);

if Copy(Entrada, 1,2) <> '90' then

Begin

dm.qrytemp.Insert;

dm.qrytemp.FieldByn ame('MAQUINA' ).Value := 0;

dm.qrytemp.FieldByN ame('linha' ).AsString := Copy

(Entrada,1,126) ;

if Copy(Entrada, 1,2) = '50' then

Begin

dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 46,6);

End;

if Copy(Entrada, 1,2) = '53' then

Begin

dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 46,6);

End;

if Copy(Entrada, 1,2) = '54' then

Begin

dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 22,6);

dm.qrytemp.FieldByn ame

('produto'). Asstring := Copy(Entrada, 38,14);

dm.qrytemp.FieldByN ame

('ITEM').AsString := Copy(Entrada, 35,3);

End;

if Copy(Entrada, 1,2) = '75' then

dm.qrytemp.FieldByN ame

('Produto'). AsString := Copy(Entrada, 19,14);

dm.qrytemp.Post;

End;

// ProgressBar1. Position := iLinha;

End;

dm.qrytemp.EnableCo ntrols;

Precsisode um ajuda para otimizar o codigo acima para que ele fique

mais leve.

Uso D7 + IBX + FIREBIRD 1.5

sds

Auriston







Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail.yahoo.com/

[As partes desta mensagem que não continham texto foram removidas]









_________________________________________________________________
Conheça o Windows Live Spaces, a rede de relacionamentos do Messenger!
http://www.amigosdomessenger.com.br/

Responder a