[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