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(Nomearquivo, OpenDialog1.FileName); Screen.Cursor := crSQLWait; ProgressBar1.Min := 0; ProgressBar1.Max := Tilinha; Reset(Nomearquivo); dm.qrytemp.DisableControls; 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.FieldByname('MAQUINA').Value := 0; dm.qrytemp.FieldByName('linha').AsString := Copy (Entrada,1,126); if Copy(Entrada,1,2) = '50' then Begin dm.qrytemp.FieldByname ('CNPJ').Asstring := Copy(Entrada,3,14); dm.qrytemp.FieldByname ('NOTA').Asstring := Copy(Entrada,46,6); End; if Copy(Entrada,1,2) = '53' then Begin dm.qrytemp.FieldByname ('CNPJ').Asstring := Copy(Entrada,3,14); dm.qrytemp.FieldByname ('NOTA').Asstring := Copy(Entrada,46,6); End; if Copy(Entrada,1,2) = '54' then Begin dm.qrytemp.FieldByname ('CNPJ').Asstring := Copy(Entrada,3,14); dm.qrytemp.FieldByname ('NOTA').Asstring := Copy(Entrada,22,6); dm.qrytemp.FieldByname ('produto').Asstring := Copy(Entrada,38,14); dm.qrytemp.FieldByName ('ITEM').AsString := Copy(Entrada,35,3); End; if Copy(Entrada,1,2) = '75' then dm.qrytemp.FieldByName ('Produto').AsString := Copy(Entrada,19,14); dm.qrytemp.Post; End; // ProgressBar1.Position := iLinha; End; dm.qrytemp.EnableControls; Precsisode um ajuda para otimizar o codigo acima para que ele fique mais leve. Uso D7 + IBX + FIREBIRD 1.5 sds Auriston