GARANTIR DESCONTO

Fórum Problema com ClientDataSet em Loop #342821

19/06/2007

0

o select é esse:
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

Fabiano Góes

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar