ProgressBar para cada registro atualizado
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.
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
Curtidas 0
Respostas
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;
No seu código, antes do Next, coloque o código ProgressBar1.StepIt;
GOSTEI 0