Como disse o nosso amigo Rubem, usa StringList, é bem mais rápido e prático.

Em 14/02/08, Rubem Nascimento da Rocha <[EMAIL PROTECTED]> escreveu:
>
>
> 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 <delphi-br%40yahoogrupos.com.br>
> From: [EMAIL PROTECTED] <gyncowboy%40yahoo.com.br>
> 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]<auriston.delphi%40yahoo.com.br>
> >
> Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.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/
>
> 
>



-- 
Willian Leal
Desenvolvedor de Softwares
MSN: [EMAIL PROTECTED]
Celular:(32) 8409 - 3077


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

Responder a