[firebase-br] Leitura de arquivo texto

Vinicius Barreira vinibarr em gmail.com
Qui Fev 14 18:10:27 -03 2008


Conforme você vai incluindo novos registros, ocorre um progressivo 
consumo de memória por parte do firebird. Se o volume de insert é muito 
grande, pode ocorrer estouro de memória.

O ideal seria inserir registros em blocos. Por exemplo, a cada 300 
registros, "comite" a transação, feche a conexão, abra novamente e 
continue. Faça o teste.

Vinicius Barreira
Check-In Informática
Software Para Hotéis / Pousadas / Moteis
São Bernardo do Campo - SP
http://www.check-in.com.br
Fone (11) 4330-3148
msn / e-mail: vinicius em check-in.com.br
skype: vinibarr



Auriston Lopes escreveu:
> 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;
> Preciso de 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! 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>   





Mais detalhes sobre a lista de discussão lista