ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Demora na importacao de tabelas inteiras

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Mai 07, 2019 2:22 pm    Assunto: Demora na importacao de tabelas inteiras Responder com Citação

Boa tarde,

Criei um importador de dados de tabelas inteiras de arquivos DBF (clipper) para um BD SQL Server.

O grande problema é que essa importação demora bastante, visto que as tabelas DBF são imensas (tem tabela com quase 900 mil registros).

O grande motivo da demora é que, atualmente, faço um loop na tabela de origem e vou inserindo cada registro, individualmente, na tabela de destino.

Há alguma maneira de tornar mais rápido este processo?
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qua Mai 08, 2019 9:24 am    Assunto: Responder com Citação

eu uso cachedUpdates na query, e qdo insere 100 registros, dou um applyUpdates
isso melhorou bastante a velocidade. faz o teste com 100, 50, 200 registros por vez

fica mais ou menos assim:

Código:
Query1.Close;
Query1.sql.Text := 'SELECT * FROM tabela WHERE 1 = 0';
Query1.Open;
Table1.First;
while not Table1.Eof do
begin
  query1.append;
  Query1.FieldByname('campo1').Value := Table1.FieldByname('campo1').Value;
  Query1.FieldByname('campo2').Value := Table1.FieldByname('campo2').Value;
  Query1.FieldByname('campox').Value := Table1.FieldByname('campox').Value;
  Query1.Post;
  Table1.Next;
  if (Table1.Eof) or (Query1.RecordCount = 100) then
  begin
    Query1.ApplyUpdates;
    Query1.Close;
    Query1.Open;
  end;
end;

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB