Ajuda com um laço WHILE no delphi

Delphi

18/07/2016

Bom dia, estou trabalhando na importação de um banco antigo para um banco novo e no momento o trabalho se concentra na tabela de clientes. No banco antigo alguns registros não apresentam o CPF ou CNPJ quando estou migrando para o banco novo esse Field de CPF_CNPJ é not null, a ideia é que ao encontrar um registro antigo sem valor no campo o while pule para o próximo registro.

segue o código de importação da tabela de Clientes

try
Application.ProcessMessages;

Sleep(0);
lblStatus01.Caption := 'Sincronizando tabela CLIENTES...';
Application.ProcessMessages;

DtMdl.FDClientesVelho.Active := False;
DtMdl.FDClientesVelho.Active := True;
DtMdl.FDClientesVelho.First;
DtMdl.FDClientesNovo.Active := False;
DtMdl.FDClientesNovo.Active := True;

status := Ler_chave_reg('tabelas','clientes', '', verifica_ini);
if status = 'OK' then
Next
else
begin
contador := 999999;
while not DtMdl.FDClientesVelho.Eof do
begin
DtMdl.FDClientesNovo.Insert;

if DtMdl.FDClientesVelho.FieldByName('CODIGO').IsNull then
begin
inc(contador);
DtMdl.FDClientesNovoCL_NUMERO.Value:= contador;
end
else
DtMdl.FDClientesNovoCL_NUMERO.Value := (strtoint(DtMdl.FDClientesVelhoCODIGO.Value));

DtMdl.FDClientesNovoCL_CNPJ_CPF.Value := DtMdl.FDClientesVelhoCNPJ_CPF.Value; <<<<NESSE PONTO O FIELD NOVO RECEBE O VALOR DO FIELD ANTIGO

if inttostr(Length(DtMdl.FDClientesVelhoCNPJ_CPF.Value)) = '14'then
begin
DtMdl.FDJuridica.Active:= False;
DtMdl.FDJuridica.ParamByName('cnpj').Value:= DtMdl.FDClientesVelhoCNPJ_CPF.Value;
DtMdl.FDJuridica.Active:= True;
if (DtMdl.FDJuridicaINSC_ESTADUAL.Value) = '.' then
DtMdl.FDClientesNovoCL_INSCRICAO.Value := '.'
else
if (DtMdl.FDJuridicaINSC_ESTADUAL.Value) = '' then
DtMdl.FDClientesNovoCL_INSCRICAO.Value := '.'
else
begin
DtMdl.FDClientesNovoCL_INSCRICAO.Value := DtMdl.FDJuridicaINSC_ESTADUAL.Value;
DtMdl.FDClientesNovoCL_INSC_MUNIC.Value:= DtMdl.FDJuridicaINSC_MUNICIPAL.Value;
end;
end
else
if inttostr(Length(DtMdl.FDClientesVelhoCNPJ_CPF.Value))= '11'then
begin
DtMdl.FDFisica.Active:= False;
DtMdl.FDFisica.ParamByName('cpf').Value:= DtMdl.FDClientesVelhoCNPJ_CPF.Value;
DtMdl.FDFisica.Active:= True;
DtMdl.FDClientesNovoCL_INSCRICAO.Value := 'ISENTO';
DtMdl.FDClientesNovoCL_INSC_MUNIC.Value:= 'ISENTO';
end;
DtMdl.FDClientesNovoCL_NOME.Value := DtMdl.FDClientesVelhoNOME.Value;
DtMdl.FDClientesNovoCL_FANTASIA.Value := DtMdl.FDClientesVelhoNOME_FANTASIA.Value;

if (DtMdl.FDClientesVelhoENDERECO.Value = '') then
DtMdl.FDClientesNovoCL_ENDER.Value := '.'
else
DtMdl.FDClientesNovoCL_ENDER.Value := DtMdl.FDClientesVelhoENDERECO.Value;

if (DtMdl.FDClientesVelhoEND_NUMERO.Value = '') then
DtMdl.FDClientesNovoCL_END_NUMERO.Value := '.'
else
DtMdl.FDClientesNovoCL_END_NUMERO.Value := DtMdl.FDClientesVelhoEND_NUMERO.Value;

if (DtMdl.FDClientesVelhoCOMPLEMENTO.Value = '') then
DtMdl.FDClientesNovoCL_COMPLEMENTO.Value:= '.'
else
DtMdl.FDClientesNovoCL_COMPLEMENTO.Value := DtMdl.FDClientesVelhoCOMPLEMENTO.Value;

if (DtMdl.FDClientesVelhoBAIRRO.Value = '') then
DtMdl.FDClientesNovoCL_BAIRRO.Value:= '.'
else
DtMdl.FDClientesNovoCL_BAIRRO.Value := DtMdl.FDClientesVelhoBAIRRO.Value;

if (DtMdl.FDClientesVelhoCEP.Value = '') then
DtMdl.FDClientesNovoCL_CEP.Value:= '000000000'
else
if DtMdl.FDClientesVelho.FieldByName('CEP').IsNull then
DtMdl.FDClientesNovoCL_CEP.Value:= '000000000'
else
if DtMdl.FDClientesVelhoCEP.Value = ' 0' then
DtMdl.FDClientesNovoCL_CEP.Value:= '000000000'
else
DtMdl.FDClientesNovoCL_CEP.Value := DtMdl.FDClientesVelhoCEP.Value;

DtMdl.FDClientesNovoCL_CODCIDADE.Value := DtMdl.FDClientesVelhoCODCIDADE.Value;


if (DtMdl.FDClientesVelhoSTATUS.Value) = '' then
DtMdl.FDClientesNovoCL_STATUS.Value:= 'S'
else
DtMdl.FDClientesNovoCL_STATUS.Value := DtMdl.FDClientesVelhoSTATUS.Value;

DtMdl.FDClientesNovoCL_LIMITE_CREDITO.Value := DtMdl.FDClientesVelhoLIMITE_CREDITO.Value;
DtMdl.FDClientesNovoCL_LIMITE_NOTA.Value := DtMdl.FDClientesVelhoLIMITE_NOTA.Value;
DtMdl.FDClientesNovoCL_TIPO.Value := DtMdl.FDClientesVelhoTIPO.Value;
DtMdl.FDClientesNovoCL_AGREGA_NOTAS.Value := DtMdl.FDClientesVelhoAGREGA_NOTAS.Value;
DtMdl.FDClientesNovoCL_PRAZO_MEDIO.Value := DtMdl.FDClientesVelhoPRAZO_MEDIO.Value;
DtMdl.FDClientesNovoCL_DIA_VENC.Value := DtMdl.FDClientesVelhoDIA_VENC.Value;
DtMdl.FDClientesNovoCL_UNID_COBRANCA.Value := DtMdl.FDClientesVelhoUNID_COBRANCA.Value;
DtMdl.FDClientesNovoCL_DESC_PADRAO.Value := DtMdl.FDClientesVelhoDESC_PADRAO.Value;
DtMdl.FDClientesNovoCL_FONE.Value := DtMdl.FDClientesVelhoFONE_1.Value;
DtMdl.FDClientesNovoCL_CELULAR.Value := DtMdl.FDClientesVelhoFONE_2.Value;
DtMdl.FDClientesNovoCL_CELULAR2.Value := DtMdl.FDClientesVelhoCELULAR.Value;
DtMdl.FDClientesNovoCL_FAX.Value := DtMdl.FDClientesVelhoFAX.Value;
DtMdl.FDClientesNovoCL_EMAIL.Value := DtMdl.FDClientesVelhoEMAIL.Value;
DtMdl.FDClientesNovoCL_EMAIL_NFE.Value := DtMdl.FDClientesVelhoEMAIL_NFE.Value;
DtMdl.FDClientesNovoCL_ULT_ATUALIZA.Value := DtMdl.FDClientesVelhoULT_ATUALIZACAO.Value;
DtMdl.FDClientesNovoCL_DATA_CAD.AsDateTime := Now;
DtMdl.FDClientesNovoDESATIVADO.Value := DtMdl.FDClientesVelhoDESATIVADO.Value;
DtMdl.FDClientesNovo.Post;
DtMdl.FB_DataBaseNew.CommitRetaining;
Grava_Chave_Reg('tabelas','clientes', 'OK', verifica_ini);
DtMdl.FDClientesVelho.Next;
end;
end;
DtMdl.FB_DataBaseNew.CommitRetaining;
Sleep(0);
lblStatus01.Caption := 'Sincronização tabela de CLIENTES concluída.';
Inc(cont);

StringGrid1.Cells[0,16]:= inttostr(cont)+'. Clientes Ok!';
Application.ProcessMessages;
pbStatus01.Position := pbStatus01.Position + 1;
except
on E : Exception do
begin
DtMdl.FB_DataBaseNew.RollbackRetaining;
application.MessageBox(pchar('Problemas durante a migração dos dados' +#13+#13+
'Descrição do erro: '+#13+#13+E.Message+inttostr(DtMdl.FDClientesNovoCL_NUMERO.asinteger)+#13+#13+'Tentativa de sincronização cancelada'), 'AVISO', mb_OK + MB_ICONERROR);
if DtMdl.FDClientesNovo.State = dsInsert then
DtMdl.FDClientesNovo.Cancel;
end;
end;
Emanuel Gonçalves

Emanuel Gonçalves

Curtidas 0

Melhor post

Marco Antônio

Marco Antônio

21/07/2016

faltou pular o ponteiro da query


if (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').AsString = EmptyStr) then
       begin
          DtMdl.FDClientesNovo.cancel;   // aqui precisa cancelar o modo de inserção
          DtMdl.FDClientesVelho.next;      // pulando o registro
          Continue;                                    // voltando ao inicio do While
       end;





Agora se você tem uma condição a qual um determinado registro pode ou não ser importado acredito que esta condição deverá ser
validada primeiro para só depois colocar a sua query em modo de inserção, não há o porque de dentro de um loop você fazer vários procedimentos
se no meio da rotina essa inserção será interrompida. É só uma dica de práticas de programação.


if (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').AsString = EmptyStr) then
       begin
          DtMdl.FDClientesVelho.next;
          Continue;
       end;

// se não pulo o registro é porque podemos continuar, logo poderá colocar em modo de inserção
DtMdl.FDClientesNovo.insert; 

GOSTEI 1

Mais Respostas

Natanael Ferreira

Natanael Ferreira

18/07/2016

Use o comando [b]Continue[/b] para forçar o laço a ir para o próximo registro:

Exemplo:

if DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull then
    Continue;

  DtMdl.FDClientesNovoCL_CNPJ_CPF.Value := DtMdl.FDClientesVelhoCNPJ_CPF.Value; // NESSE PONTO O FIELD NOVO RECEBE O VALOR DO FIELD ANTIGO
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

18/07/2016

Use o comando [b]Continue[/b] para forçar o laço a ir para o próximo registro:

Exemplo:

if DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull then
    Continue;

  DtMdl.FDClientesNovoCL_CNPJ_CPF.Value := DtMdl.FDClientesVelhoCNPJ_CPF.Value; // NESSE PONTO O FIELD NOVO RECEBE O VALOR DO FIELD ANTIGO



Obrigado, vou testar e te passo um feedback
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

18/07/2016

Use o comando [b]Continue[/b] para forçar o laço a ir para o próximo registro:

Exemplo:

if DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull then
    Continue;

  DtMdl.FDClientesNovoCL_CNPJ_CPF.Value := DtMdl.FDClientesVelhoCNPJ_CPF.Value; // NESSE PONTO O FIELD NOVO RECEBE O VALOR DO FIELD ANTIGO



Obrigado, vou testar e te passo um feedback


Bom dia, não deu certo
O banco tem 75000 registros e apenas um não tem CPF , não posso remover pois o mesmo faz referencia a outras tabelas. O seu código é o 68589, a ideia é ao varrer a tabela salvando no banco novo se deparar com esse registro o laço pule e continue do código 68590
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

18/07/2016

Bom dia,

Você chegou a debugar o código para saber qual o comportamento do programa ao chegar no [b]IF[/b]?

Se ele está passando pelo comando [b]Continue[/b] ou não?

Talvez o campo informado não esteja nulo e sim vazio.

Tente dessa maneira:

if (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').AsString = EmptyStr) then
    Continue;

  DtMdl.FDClientesNovoCL_CNPJ_CPF.Value := DtMdl.FDClientesVelhoCNPJ_CPF.Value;
  // NESSE PONTO O FIELD NOVO RECEBE O VALOR DO FIELD ANTIGO
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

18/07/2016

Bom dia,

Você chegou a debugar o código para saber qual o comportamento do programa ao chegar no [b]IF[/b]?

Se ele está passando pelo comando [b]Continue[/b] ou não?

Talvez o campo informado não esteja nulo e sim vazio.

Tente dessa maneira:

if (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').AsString = EmptyStr) then
    Continue;

  DtMdl.FDClientesNovoCL_CNPJ_CPF.Value := DtMdl.FDClientesVelhoCNPJ_CPF.Value;
  // NESSE PONTO O FIELD NOVO RECEBE O VALOR DO FIELD ANTIGO


vou testar
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

18/07/2016

faltou pular o ponteiro da query


if (DtMdl.FDClientesVelho.FieldByName(''CNPJ_CPF'').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName(''CNPJ_CPF'').AsString = EmptyStr) then
       begin
          DtMdl.FDClientesNovo.cancel;   // aqui precisa cancelar o modo de inserção
          DtMdl.FDClientesVelho.next;      // pulando o registro
          Continue;                                    // voltando ao inicio do While
       end;





Agora se você tem uma condição a qual um determinado registro pode ou não ser importado acredito que esta condição deverá ser
validada primeiro para só depois colocar a sua query em modo de inserção, não há o porque de dentro de um loop você fazer vários procedimentos
se no meio da rotina essa inserção será interrompida. É só uma dica de práticas de programação.


if (DtMdl.FDClientesVelho.FieldByName(''CNPJ_CPF'').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName(''CNPJ_CPF'').AsString = EmptyStr) then
       begin
          DtMdl.FDClientesVelho.next;
          Continue;
       end;

// se não pulo o registro é porque podemos continuar, logo poderá colocar em modo de inserção
DtMdl.FDClientesNovo.insert; 





if (DtMdl.FDClientesVelho.FieldByName(''CNPJ_CPF'').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName(''CNPJ_CPF'').AsString = EmptyStr) then
       begin
          DtMdl.FDClientesVelho.next;
          Continue;
       end

else// se não pulo o registro é porque podemos continuar, logo poderá colocar em modo de inserção
DtMdl.FDClientesNovo.insert; 


Marco acredito que a segunda opção seria a mas recomendada, após entrar no while, verificar se existe algum registro sem informação no field de CNPJ_CPF para depois prosseguir.

Só uma duvida, não seria necessário colocar um ELSE para se a condição no IF for falsa ele entrar em inserção e executar todo o resto ?
GOSTEI 0
Eduardo Silva.

Eduardo Silva.

18/07/2016

Não seria mais fácil você fazer uma consulta SQL excluído o campo nulo e depois exportar, tipo:

Select * From ClientesVelho Where CNPJ_CPF Is Not Null



Eduardo Belo
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

18/07/2016

vou testar as opções

mantenho todos informados
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

18/07/2016

faltou pular o ponteiro da query


if (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').AsString = EmptyStr) then
       begin
          DtMdl.FDClientesNovo.cancel;   // aqui precisa cancelar o modo de inserção
          DtMdl.FDClientesVelho.next;      // pulando o registro
          Continue;                                    // voltando ao inicio do While
       end;





Agora se você tem uma condição a qual um determinado registro pode ou não ser importado acredito que esta condição deverá ser
validada primeiro para só depois colocar a sua query em modo de inserção, não há o porque de dentro de um loop você fazer vários procedimentos
se no meio da rotina essa inserção será interrompida. É só uma dica de práticas de programação.


if (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull) or
    (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').AsString = EmptyStr) then
       begin
          DtMdl.FDClientesVelho.next;
          Continue;
       end;

// se não pulo o registro é porque podemos continuar, logo poderá colocar em modo de inserção
DtMdl.FDClientesNovo.insert; 




Resolvido!! Segue o código para importação da tabela de clientes. Obrigado a todos!!



try
        Application.ProcessMessages;

        Sleep(0);
        lblStatus01.Caption := 'Sincronizando tabela CLIENTES...';
        Application.ProcessMessages;

        DtMdl.FDClientesVelho.Active := False;
        DtMdl.FDClientesVelho.Active := True;
        DtMdl.FDClientesVelho.First;
        DtMdl.FDClientesNovo.Active := False;
        DtMdl.FDClientesNovo.Active := True;

        status := Ler_chave_reg('tabelas','clientes', '', verifica_ini);
        if status = 'OK' then
            Next
        else
        begin
            contador := 999999;
            while not DtMdl.FDClientesVelho.Eof do
            begin
                if (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').IsNull) or
                (DtMdl.FDClientesVelho.FieldByName('CNPJ_CPF').AsString = EmptyStr) then
                begin
                    DtMdl.FDClientesVelho.next;
                    Continue;
                end

                else    // se não pulo o registro é porque podemos continuar, logo poderá colocar em modo de inserção
                DtMdl.FDClientesNovo.insert;

                if DtMdl.FDClientesVelho.FieldByName('CODIGO').IsNull then
                begin
                    inc(contador);
                    DtMdl.FDClientesNovoCL_NUMERO.Value:= contador;
                end
                else
                    DtMdl.FDClientesNovoCL_NUMERO.Value := (strtoint(DtMdl.FDClientesVelhoCODIGO.Value));

                DtMdl.FDClientesNovoCL_CNPJ_CPF.Value := DtMdl.FDClientesVelhoCNPJ_CPF.Value;

                if inttostr(Length(DtMdl.FDClientesVelhoCNPJ_CPF.Value)) = '14'then
                begin
                    DtMdl.FDJuridica.Active:= False;
                    DtMdl.FDJuridica.ParamByName('cnpj').Value:= DtMdl.FDClientesVelhoCNPJ_CPF.Value;
                    DtMdl.FDJuridica.Active:= True;
                    if (DtMdl.FDJuridicaINSC_ESTADUAL.Value) = '.' then
                        DtMdl.FDClientesNovoCL_INSCRICAO.Value := '.'
                    else
                    if (DtMdl.FDJuridicaINSC_ESTADUAL.Value) = '' then
                        DtMdl.FDClientesNovoCL_INSCRICAO.Value := '.'
                    else
                    begin
                    DtMdl.FDClientesNovoCL_INSCRICAO.Value := DtMdl.FDJuridicaINSC_ESTADUAL.Value;
                    DtMdl.FDClientesNovoCL_INSC_MUNIC.Value:= DtMdl.FDJuridicaINSC_MUNICIPAL.Value;
                    end;
                end
                else
                if inttostr(Length(DtMdl.FDClientesVelhoCNPJ_CPF.Value))= '11'then
                begin
                    DtMdl.FDFisica.Active:= False;
                    DtMdl.FDFisica.ParamByName('cpf').Value:= DtMdl.FDClientesVelhoCNPJ_CPF.Value;
                    DtMdl.FDFisica.Active:= True;
                    DtMdl.FDClientesNovoCL_INSCRICAO.Value := 'ISENTO';
                    DtMdl.FDClientesNovoCL_INSC_MUNIC.Value:= 'ISENTO';
                end;
                DtMdl.FDClientesNovoCL_NOME.Value := DtMdl.FDClientesVelhoNOME.Value;
                DtMdl.FDClientesNovoCL_FANTASIA.Value := DtMdl.FDClientesVelhoNOME_FANTASIA.Value;

                if (DtMdl.FDClientesVelhoENDERECO.Value = '') then
                    DtMdl.FDClientesNovoCL_ENDER.Value := '.'
                else
                    DtMdl.FDClientesNovoCL_ENDER.Value := DtMdl.FDClientesVelhoENDERECO.Value;

                if (DtMdl.FDClientesVelhoEND_NUMERO.Value = '') then
                    DtMdl.FDClientesNovoCL_END_NUMERO.Value := '.'
                else
                    DtMdl.FDClientesNovoCL_END_NUMERO.Value := DtMdl.FDClientesVelhoEND_NUMERO.Value;

                if (DtMdl.FDClientesVelhoCOMPLEMENTO.Value = '') then
                    DtMdl.FDClientesNovoCL_COMPLEMENTO.Value:= '.'
                else
                    DtMdl.FDClientesNovoCL_COMPLEMENTO.Value := DtMdl.FDClientesVelhoCOMPLEMENTO.Value;

                if (DtMdl.FDClientesVelhoBAIRRO.Value = '') then
                    DtMdl.FDClientesNovoCL_BAIRRO.Value:= '.'
                else
                    DtMdl.FDClientesNovoCL_BAIRRO.Value := DtMdl.FDClientesVelhoBAIRRO.Value;

                if (DtMdl.FDClientesVelhoCEP.Value = '') then
                    DtMdl.FDClientesNovoCL_CEP.Value:= '000000000'
                else
                if DtMdl.FDClientesVelho.FieldByName('CEP').IsNull then
                    DtMdl.FDClientesNovoCL_CEP.Value:= '000000000'
                else
                if DtMdl.FDClientesVelhoCEP.Value = '        0' then
                    DtMdl.FDClientesNovoCL_CEP.Value:= '000000000'
                else
                    DtMdl.FDClientesNovoCL_CEP.Value := DtMdl.FDClientesVelhoCEP.Value;

                DtMdl.FDClientesNovoCL_CODCIDADE.Value := DtMdl.FDClientesVelhoCODCIDADE.Value;


                if (DtMdl.FDClientesVelhoSTATUS.Value) = '' then
                    DtMdl.FDClientesNovoCL_STATUS.Value:= 'S'
                else
                    DtMdl.FDClientesNovoCL_STATUS.Value := DtMdl.FDClientesVelhoSTATUS.Value;

                DtMdl.FDClientesNovoCL_LIMITE_CREDITO.Value := DtMdl.FDClientesVelhoLIMITE_CREDITO.Value;
                DtMdl.FDClientesNovoCL_LIMITE_NOTA.Value := DtMdl.FDClientesVelhoLIMITE_NOTA.Value;
                DtMdl.FDClientesNovoCL_TIPO.Value := DtMdl.FDClientesVelhoTIPO.Value;
                DtMdl.FDClientesNovoCL_AGREGA_NOTAS.Value := DtMdl.FDClientesVelhoAGREGA_NOTAS.Value;
                DtMdl.FDClientesNovoCL_PRAZO_MEDIO.Value := DtMdl.FDClientesVelhoPRAZO_MEDIO.Value;
                DtMdl.FDClientesNovoCL_DIA_VENC.Value := DtMdl.FDClientesVelhoDIA_VENC.Value;
                DtMdl.FDClientesNovoCL_UNID_COBRANCA.Value := DtMdl.FDClientesVelhoUNID_COBRANCA.Value;
                DtMdl.FDClientesNovoCL_DESC_PADRAO.Value := DtMdl.FDClientesVelhoDESC_PADRAO.Value;
                DtMdl.FDClientesNovoCL_FONE.Value := DtMdl.FDClientesVelhoFONE_1.Value;
                DtMdl.FDClientesNovoCL_CELULAR.Value := DtMdl.FDClientesVelhoFONE_2.Value;
                DtMdl.FDClientesNovoCL_CELULAR2.Value := DtMdl.FDClientesVelhoCELULAR.Value;
                DtMdl.FDClientesNovoCL_FAX.Value := DtMdl.FDClientesVelhoFAX.Value;
                DtMdl.FDClientesNovoCL_EMAIL.Value := DtMdl.FDClientesVelhoEMAIL.Value;
                DtMdl.FDClientesNovoCL_EMAIL_NFE.Value := DtMdl.FDClientesVelhoEMAIL_NFE.Value;
                DtMdl.FDClientesNovoCL_ULT_ATUALIZA.Value := DtMdl.FDClientesVelhoULT_ATUALIZACAO.Value;
                DtMdl.FDClientesNovoCL_DATA_CAD.AsDateTime := Now;
                DtMdl.FDClientesNovoDESATIVADO.Value := DtMdl.FDClientesVelhoDESATIVADO.Value;
                DtMdl.FDClientesNovo.Post;
                DtMdl.FB_DataBaseNew.CommitRetaining;
                Grava_Chave_Reg('tabelas','clientes', 'OK', verifica_ini);
                DtMdl.FDClientesVelho.Next;
                Application.ProcessMessages;
            end;
        end;
        DtMdl.FB_DataBaseNew.CommitRetaining;
        Sleep(0);
        lblStatus01.Caption := 'Sincronização tabela de CLIENTES concluída.';
        Inc(cont);

        StringGrid1.Cells[0,16]:= inttostr(cont)+'. Clientes Ok!';
        Application.ProcessMessages;
        pbStatus01.Position := pbStatus01.Position + 1;
    except
        on E : Exception do
        begin
            DtMdl.FB_DataBaseNew.RollbackRetaining;
            application.MessageBox(pchar('Problemas durante a migração dos dados' +#13+#13+
            'Descrição do erro: '+#13+#13+E.Message+inttostr(DtMdl.FDClientesNovoCL_NUMERO.asinteger)+#13+#13+'Tentativa de sincronização cancelada'), 'AVISO', mb_OK + MB_ICONERROR);
            if DtMdl.FDClientesNovo.State = dsInsert then
              DtMdl.FDClientesNovo.Cancel;
        end;
    end;

GOSTEI 0
Marco Antônio

Marco Antônio

18/07/2016

Opa, Emanuel boa tarde.

Só respondendo a sua citação anterior....
Não há a necessidade do 'ELSE' uma vez que qdo a condição não for verdadeira automaticamente a sua linha de comando descerá para o 'INSERT', já qdo a sua
condição for verdadeira, o laço voltará ao inicio e não executará o 'INSERT', é para isso que esta utilizando o 'CONTINUE', para que o seu programa saia
da linha de comando que esta e volte para o início do laço.

Abc.
GOSTEI 0
POSTAR