RE: [firebase-br] Importação de carga via arquivo texto para firebird

Rodrigo Teodoro rodrigo_teodoro em hotmail.com
Seg Set 24 17:16:10 -03 2007


Isto é o que estou usando atualmente, bom... de forma parecida! Tenho um parser que quebra e joga no clientDataset,
mas o insert esta demorando muito, mesmo em bloco de 10000 registros (número bom registros em testes com clientdataset).
Queria achar uma forma de chuchar os registros mais rápido pois atualmente esta demorando de 3 minutos em bloco para importar 2,5mb, sem o bloco de 10000 dobra o tempo.
Estou testando usar SQL pronto para ver se melhora alguma coisa.

Obrigado,

Rodrigo Teodoro

> Date: Mon, 24 Sep 2007 15:35:05 -0300
> From: rnribeiro em gmail.com
> To: lista em firebase.com.br
> Subject: Re: [firebase-br] Importação de carga via arquivo texto para firebird
> 
> kra da uma olhada nisso n sei se é o q vc quer mais vamos ver:
> so pra lembrar pro que eu queria funcionou blz
> procedure TF_importar.BitBtn1Click(Sender: TObject);
> var
> Txt: TextFile;
> mtexto: tstringList;
> Entrada: string;
> begin
> BitBtn1.Enabled := False;
> 
> if opendialog1.Execute then
> begin
> screen.Cursor := crSQLWait;
> mtexto := TStringlist.Create;
>                     mtexto.LoadFromFile(opendialog1.FileName);
>                     pb.Max := mtexto.Count - 1;
>                     mtexto.Free;
> //bitbt
>   F_Importar.ClientDataSet1.EmptyDataSet;//zera tabela
>   F_Importar.ClientDataSet1.Open;//abre tabela
>   AssignFile(Txt,(Opendialog1.FileName
> ){'c:\Estudo\Importar\Lista_13P_modelo'});
>  // Animate1.Visible := true;
>  // animate1.Active := true;
>   Reset(Txt);
>   while not Eoln(Txt) do
>   begin
>     ReadLn(Txt,Entrada);
>     //F_Importar.ClientDataSet1.open;
>     F_Importar.ClientDataSet1.insert;
>   //showMessage('-'+copy(entrada,1,13)+'-');
>     F_Importar.ClientDataSet1.FieldByName('codigo').value
> :=copy(entrada,01,13);
> //   showMessage('-'+copy(entrada,1,13)+'-');
>     F_Importar.ClientDataSet1.FieldByName('Descricao').Value
> :=copy(entrada,14,25);
>         F_Importar.ClientDataSet1.FieldByName('desc_complem').Value :=
> copy(entrada,39,29);
>  F_Importar.ClientDataSet1.FieldByName('qtd_min').value :=
> copy(entrada,68,03);
>                 F_Importar.ClientDataSet1.FieldByName('preco_venda').Value
> := copy(entrada,71,12);
>                     F_Importar.ClientDataSet1.FieldByName('cod_proc').Value
> := copy(entrada,83,01);
> 
> F_Importar.ClientDataSet1.FieldByName('perc_red_icms').Value :=
> copy(entrada,84,02);
> 
> F_Importar.ClientDataSet1.FieldByName('perc_ipi').Value :=
> copy(entrada,86,04);
> 
> F_Importar.ClientDataSet1.FieldByName('class_fiscal').Value :=
> copy(entrada,90,10);
> 
> F_Importar.ClientDataSet1.FieldByName('modelo').Value :=
> copy(entrada,100,130);
> 
> F_Importar.ClientDataSet1.FieldByName('hierarq_prod').Value :=
> copy(entrada,230,18);
> 
> F_Importar.ClientDataSet1.FieldByName('terminador').Value :=
> copy(entrada,248,01);
>                     F_Importar.ClientDataSet1.Post;
>                     end;
>                     CloseFile(Txt);
>                     //NeatoMeter1.Caption := 'Importação ralizada com
> sucesso...';
>                     //NeatoMeter1.percent := 100;
>                     BitBtn1.Enabled := true;
>                     F_IMportar.Height := 205;
>                     F_Importar.ClientHeight := 180;
>                     label1.Visible := true;
>     label1.Caption := 'Foi importado um total de' +IntToStr(
> clientDataSet1.RecordCount)+ 'Registros com sucesso';
> screen.cursor :=crdefault;
> 
>   end;
> 
> end;
> 
> Em 24/09/07, Rodrigo Teodoro <rodrigo_teodoro em hotmail.com> escreveu:
> >
> >
> > Alguém faz em seus programas importação de carga via arquivos txt (nao é
> > XML, trata-se de cada linha um registro) para as tabelas no Firebird?
> >
> >
> >
> > Tenho um programa desenvolvido que faz a importação de carga usando
> > DbExpress com ClientDataset já tendei usar importação bloco (reduz
> > metade do tempo) mas ainda está dando gargalo na hora do insert dos
> > registros.
> >
> >
> >
> > Pesquisei um pouco sobre External Tables mas ainda não achei nada de bom
> >    em Delphi para gerar estes external files e até uma forma de gerar
> > isto sem usar o próprio Firebird (ai não vale né! rs... )
> >
> >
> >
> > Alguém tem uma técnica bala para enfiar os registros rápido no * Firebird?
> >
> >
> >
> > Obs.: Quando digo gargalo, digo muitos registros memso, tipo 6 Mb de
> > texto, o banco depois de carregado está ficando em torno de 13MB.
> >
> >
> > Obrigado,
> >
> > Rodrigo Teodoro
> > _________________________________________________________________
> > Encontre o que procura com mais eficiência! Instale já a Barra de
> > Ferramentas com Windows Desktop Search GRÁTIS!
> > http://desktop.msn.com.br/
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para editar sua configuração na lista, use o endereço
> > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa

_________________________________________________________________
Receba GRÁTIS as mensagens do Messenger no seu celular quando você estiver offline. Conheça  o MSN Mobile!
http://mobile.live.com/signup/signup2.aspx?lc=pt-br


Mais detalhes sobre a lista de discussão lista