Como tornar a importação mais rápida de uma tabela para outra com o Delphi
Boa tarde, tenho uma tabela de cheques e estou importando seus registros para uma outra tabela de cheques
esse é o código
o detalhe é a lentidão, em outras tabelas a importação é bem mais rápida inclusive em situações onde se acessa mais de 6 dataset´s.
esse é o código
try
Application.ProcessMessages;
Sleep(0);
LblStatus11.Caption := 'Sincronizando tabela CHEQUES...';
Application.ProcessMessages;
dtMdlsaoLuiz11.FDCHEQUESVelho.Active := False;
dtMdlsaoLuiz11.FDCHEQUESVelho.Active := True;
dtMdlsaoLuiz11.FDCHEQUESVelho.First;
dtMdlsaoLuiz11.FDCHEQUESNovo.Active := False;
dtMdlsaoLuiz11.FDCHEQUESNovo.Active := True;
status := Ler_chave_reg('tabelas','cheques', '', verifica_ini);
if status = 'OK' then
next
else
begin
parcial:= 0;
WaitPanel.Visible := True;
while not dtMdlsaoLuiz11.FDCHEQUESVelho.Eof do
begin
inc(Parcial);
dtMdlsaoLuiz11.FDCHEQUESNovo.Insert;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_GRUPO1.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoGRUPO1.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_GRUPO2.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoGRUPO2.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_GRUPO3.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoGRUPO3.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_NUMERO.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoNUMERO.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_UNIDADE.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoUNIDADE.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_CPF_CNPJ.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoCPF_CNPJ.Value;
dtMdlsaoLuiz11.FDClienteCheque.Active:= False;
dtMdlsaoLuiz11.FDClienteCheque.ParamByName('cnpj_cpf').Value:= dtMdlsaoLuiz11.FDChequesNovoCH_CPF_CNPJ.Value;
dtMdlsaoLuiz11.FDClienteCheque.Active:= True;
dtMdlsaoLuiz11.FDChequesNovoCH_COD_CLIENTE.Value:= dtMdlsaoLuiz11.FDClienteChequeCL_NUMERO.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_EMISSAO.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoEMISSAO.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_VENCIMENTO.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoVENCIMENTO.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_VALOR.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoVALOR.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_OBS.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoOBS.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_SENHA.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoSENHA.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_DATA_MOV.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoDATA_MOV.Value;
dtMdlsaoLuiz11.FDCHEQUESNovoCH_SEQ_MOV.Value := dtMdlsaoLuiz11.FDCHEQUESVelhoSEQ_MOV.Value;
dtMdlsaoLuiz11.FDCHEQUESNovo.Post;
dtMdlsaoLuiz11.FB_DataBaseSaoLuiz11New.CommitRetaining;
Grava_Chave_Reg('tabelas','cheques', 'OK', verifica_ini);
dtMdlsaoLuiz11.FDCHEQUESVelho.Next;
Application.ProcessMessages;
LbParcial.Caption:= IntToStr(Parcial);
end;
end;
dtMdlsaoLuiz11.FB_DataBaseSaoLuiz11New.CommitRetaining;
Sleep(0);
LblStatus11.Caption := 'Sincronização tabela de CHEQUES concluída.';
Inc(cont);
StringGrid1.Cells[1,4]:= inttostr(cont)+'. Cheques Ok!';
Application.ProcessMessages;
pbStatus11.Position := pbStatus11.Position + 1;
WaitPanel.Visible := False;
except
on E : Exception do
begin
dtMdlsaoLuiz11.FB_DataBaseSaoLuiz11New.RollbackRetaining;
application.MessageBox(pchar('Problemas durante a migração dos dados' +#13+#13+
'Descrição do erro: '+#13+#13+E.Message+#13+#13+'Tentativa de sincronização cancelada'), 'AVISO', mb_OK + MB_ICONERROR);
if dtMdlsaoLuiz11.FDCHEQUESNovo.State = dsInsert then
dtMdlsaoLuiz11.FDCHEQUESNovo.Cancel;
end;
end;
o detalhe é a lentidão, em outras tabelas a importação é bem mais rápida inclusive em situações onde se acessa mais de 6 dataset´s.
Emanuel Gonçalves
Curtidas 0