ProgressBar para cada registro atualizado

Delphi

23/04/2009

Uso TOracleQuery e TOracleDataSet

Tenho uma OracleDataSet onde eu dou um While nela e dentro um OracleQuery somente para dar um Update caso determinadas condição seja satisfeita. Gostaria de colocar um ProgressBar aí, de forma que para cada Update a barra fosse me mostrando o progresso. Do jeito que eu fiz, a barra vai até o fim ante de cada linha ser comitada. Veja abaixo meu código.

function TfrmManobras.ExecutaManobraAutamatica(ano_ocor,num_ocor: String): boolean;
var
  status,ano,
  num,seq: String;
  qry: TOracleQuery;
  incremento: Integer;
begin
  qry := TOracleQuery.Create(nil);
  qry.Session := frmDTMPrincipal.OraAtualizaGD;
  ProgressBar1.Min := 0;
  ProgressBar1.Max := qry.RowCount;
  incremento := 0;
  qryManobras.First;
  while not qryManobras.Eof do
  begin
    incremento := incremento + 1;
    status := qryManobras.FieldByName(´FLAG´).AsString;
    ano    := qryManobras.FieldByName(´ANO_OCORRENCIA´).AsString;
    num    := qryManobras.FieldByName(´NUM_OCORRENCIA´).AsString;
    seq    := qryManobras.FieldByName(´SEQUENCIAL´).AsString;
    try
      if status = ´PM´ then
      begin
        qry.Close;
        qry.Sql.Clear;
        qry.SQL.Add(´UPDATE MANOBRAS SET FLAG = ´´EM´´ WHERE ANO_OCORRENCIA = ´ + ano +
        ´ AND NUM_OCORRENCIA = ´ + num + ´ AND SEQUENCIAL = ´ + seq);
        qry.Execute;
        qry.session.commit;
        Progressbar1.Position := incremento;
        barManobras.Repaint;
        Sleep(50);
      end
      else if status = ´PN´ then
      begin
        qry.Close;
        qry.Sql.Clear;
        qry.SQL.Add(´UPDATE MANOBRAS SET FLAG = ´´EN´´ WHERE ANO_OCORRENCIA = ´ + ano +
        ´ AND NUM_OCORRENCIA = ´ + num + ´ AND SEQUENCIAL = ´ + seq);
        qry.Execute;
        qry.session.commit;
      end;

    except
      On E:Exception do
      begin
        MessageDlg(´Erro ao tentar gravar no banco de dados´ + #13 + E.Message, mtInformation, [mbOk], 0);
        qry.Cancel;
        qry.Session.Rollback;
        Break;
      end;
    end;
    qryManobras.Next;
  end;
  qryManobras.Close;
  qryManobras.Open;
  Sleep(500);
  ProgressBar1.Position := ProgressBar1.Min;
  barManobras.Repaint;
  FreeAndNil(qry);
end;



Paulo

Paulo

Curtidas 0

Respostas

Marcosrocha

Marcosrocha

23/04/2009

Existe uma propriedade da ProgressBar chamada ´Step´ onde ela já deve possuir o valor 10, coloque 1.
No seu código, antes do Next, coloque o código ProgressBar1.StepIt;


GOSTEI 0
POSTAR