Fórum Problema com ClientDataSet em Loop #342821
19/06/2007
0
o select é esse:
como a tabela já vem ordenada por BANCO_DES, NUMERO_LOTE_APRES, SEQ_LOTE:
o primeiro banco_des = 1, NUMERO_LOTE_APRES = 3
como existem 350 registros como banco_des 1 e NUMERO_LOTE_APRES = 3, teoricamente o sistema deveria fazer as 350 alterações pra depois cair no if que testa se mudou o banco ou o lote.
só que a cada alteração ele ja esta pulando de banco ou seja quando executo:
na primeira linha ele está pulando as 349 linhas e já caindo no proximo banco.
será que tem alguma coisa errada no meu código que não estou percebendo ???
select BANCO_DES, NUMERO_LOTE_APRES, SEQ_LOTE from PROCESSADOS order by BANCO_DES, NUMERO_LOTE_APRES, SEQ_LOTE
function TDMProcessados.RenumeraLotes: Boolean; var iNewLote: integer; iSequenciaLote: integer; iMenorBanco: integer; iOldLote: integer; begin iNewLote := 0; iSequenciaLote := 0; iNewLote := 401; try try DMPrincipal.conProcessamento.Close; cdsRenumeraLotes.Open; cdsRenumeraLotes.First; iMenorBanco := cdsRenumeraLotes.FieldByName(´BANCO_DES´).AsInteger; iOldLote := cdsRenumeraLotes.FieldByName(´NUMERO_LOTE_APRES´).AsInteger; while not cdsRenumeraLotes.Eof do begin if (cdsRenumeraLotes.FieldByName(´BANCO_DES´).AsInteger <> iMenorBanco) or (cdsRenumeraLotes.FieldByName(´NUMERO_LOTE_APRES´).AsInteger <> iOldLote) then begin iNewLote := iNewLote + 1; iSequenciaLote := 1; iMenorBanco := cdsRenumeraLotes.FieldByName(´BANCO_DES´).AsInteger; iOldLote := cdsRenumeraLotes.FieldByName(´NUMERO_LOTE_APRES´).AsInteger; end; iSequenciaLote := iSequenciaLote + 1; cdsRenumeraLotes.Edit; cdsRenumeraLotes.FieldByName(´NUMERO_LOTE_APRES´).AsString := FormatFloat(´000´, iNewLote); cdsRenumeraLotes.FieldByName(´SEQ_LOTE´).AsString := FormatFloat(´000´, iSequenciaLote); cdsRenumeraLotes.Post; cdsRenumeraLotes.Next; end; cdsRenumeraLotes.ApplyUpdates(0); Result := True; except Result := False; MessageDlg(´ERRO no metodo: RenumeraLotes´, mtError, [mbOK], 0); end; finally DMPrincipal.conProcessamento.Close; cdsRenumeraLotes.Close; end;
como a tabela já vem ordenada por BANCO_DES, NUMERO_LOTE_APRES, SEQ_LOTE:
o primeiro banco_des = 1, NUMERO_LOTE_APRES = 3
como existem 350 registros como banco_des 1 e NUMERO_LOTE_APRES = 3, teoricamente o sistema deveria fazer as 350 alterações pra depois cair no if que testa se mudou o banco ou o lote.
só que a cada alteração ele ja esta pulando de banco ou seja quando executo:
cdsRenumeraLotes.Next;
na primeira linha ele está pulando as 349 linhas e já caindo no proximo banco.
será que tem alguma coisa errada no meu código que não estou percebendo ???
Fabiano Góes
Curtir tópico
+ 0
Responder
Posts
20/06/2007
Emerson Nascimento
a propriedade IndexFieldNames do cds está vazia?
Responder
Gostei + 0
20/06/2007
Fabiano Góes
emerson.en,
está sim.
está sim.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)