[firebase-br] Leitura de arquivo texto

Evandro Siqueira vansiqq em gmail.com
Sex Fev 15 08:20:42 -03 2008


Esta é uma ótima maneira de parar o servidor...

Tente algo assim
var contados : integer
begin
  contados := 0;
  while .... do
  begin
    comandos do banco....;
    Inc(contados);
    if contados >= 300 then
    begin
      transacao.commit;
      contados := 0;
    end;
    next;
 end;

Garanto que o servidor vai lhe agradecer.

-- 
Evandro Siqueira
Programador
Aracaju/SE
2008/2/14, Auriston Lopes <auriston.firebird em yahoo.com.br>:
>
> 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