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]