[firebase-br] Importação de TXT para FB, lenta...

Moacir - GMail prismars em gmail.com
Ter Set 29 10:13:26 -03 2009


Mr. Marshall,

Uma sugestão:

- Substitua o uso de Tables por Querys , com isto vc já estara obterá 
ganho de velocidade.

Por Ex.:

 if((arqRead = fopen("clientes.txt"),"rt")) == NULL)
 {
   ShowMessage("Problema ao abrir o arquivo de importação plano.");
 }
 //-- AQUI
 With DM->IBQuery1 do
 begin
    SQL.text:='Insert into MinhaTabela (NOMECLIENTE) values (:NOME)';
 end;
//---------------
 fseek(arqRead, 0, SEEK_SET);
 while (!feof(arqRead))
 {
    fgets(str, 2048, arqRead);
    StrAnsi = AnsiString(str);
    //-- AQUI
    With DM->IBQuery1 do
     begin
          ParamByName('NOME').AsString := StrAnsi;
          ExecQuery;
     end;

     a cada 1000 da uma commit e reabre banco
     DM->IBTransaction1->Commit();
     DM->IBTransaction1->Active = true;
}
fclose(arqRead);

Sucesso !!

Moacir

Mr. Marshall escreveu:
> Qual a maneira mais rápida de fazer uma importação de um arquivo textto
> contendo registros ?
>
> Tenho um arquivo com dois milhões de registros que sempre vou precisar
> importar para dento do FB, tenho varrido este arquivo do inicio ao fim e
> tenho colocado os campos direto na tabela e a cada 100 mil faço um COMMIT
>
>  if((arqRead = fopen("clientes.txt"),"rt")) == NULL)
>  {
>    ShowMessage("Problema ao abrir o arquivo de importação plano.");
>  }
>  fseek(arqRead, 0, SEEK_SET);
>  while (!feof(arqRead))
>  {
>     fgets(str, 2048, arqRead);
>     StrAnsi = AnsiString(str);
>      DM->IBTable1->Append();
>      DM->IBTable1->FieldValues["NOMECLIENTE"] = StrAnsi ;
>      DM->IBTable1->Post();
>
>      a cada 1000 da uma commit e reabre banco
>      DM->IBTransaction1->Commit();
>      DM->IBTransaction1->Active = true;
> }
> fclose(arqRead);
>
> Está técnica funciona mas tem se demonstrado meio lenta, alguma sujestão
> para melhorar a performance da importação ?
>
>
> Mr. Marshall
> PS:
> Já li o artigo do Cantú sobre importação de TXT utilizando a técnica 
> de EXTERNAL FILE mas preciso fazer verificações antes de incluir os 
> dados poderia utilizar UDF mas...
>
>
> ______________________________________________
> 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