Fórum Barra de progresso de instrução SQL #261436
10/12/2004
0
Rjun
Curtir tópico
+ 0Posts
10/12/2004
Bruno_fantin
Nem o banco sabe quantos porcentos já foi... Seu programa menos ainda...
Gostei + 0
10/12/2004
Bon Jovi
Só um problema q vejo, se na produção da empresa tiver atualizações muito intensas, o COUNT feito antes pode nao bater com a quantidade de registros que estao sendo abertos, fazendo ficar incorreto o Max da barra de progresso.
Exemplo, usando midas/ClientDataSet (+ ADO ou qualquer outro):
procedure AbreClientDataSet(AClientDataSet: TClientDataSet; APacketRecords: integer; AProgressBar: TProgressBar; ACount: integer); var FormRepaint: TCustomForm; begin if not Assigned(AClientDataSet) then Exit; if Assigned(AProgressBar) then begin AProgressBar.Position := 0; AProgressBar.Max := ACount; end; Screen.Cursor := crHourGlass; try if AClientDataSet.Active then AClientDataSet.Close; AClientDataSet.PacketRecords := APacketRecords; AClientDataSet.Open; while (AClientDataSet.GetNextPacket <> 0) do begin if Assigned(AProgressBar) then begin FormRepaint := Forms.GetParentForm(AProgressBar); AProgressBar.Position := AClientDataSet.RecordCount; if Assigned(FormRepaint) then FormRepaint.Update; end; end; finally Screen.Cursor := crDefault; end; end;
Ve aí, só compilei, to sem base aqui pra rodar.
Tem tb o evento OnFetchProgress do ADODataSet/ADOQuery, nunca usei e nem sei se ele pode te ajudar nesse caso, não sei na prática em que situação ele ocorre.
Gostei + 0
10/12/2004
Bon Jovi
... SELECT COUNT(ID_PRODUTO) FROM PRODUTO
Count := ....;
//Exemplo: Count veio igual a 100000
//trará do servidor de 200 em 200....
AbreClientDataSet(ClientDataSet1, 200, ProgressBar1, Count);
Gostei + 0
11/12/2004
Rjun
Gostei + 0
11/12/2004
Bon Jovi
O count é rápido. Sendo um bom servidor não há risco, o count vai ser processado lá e apenas uma linha será trafegada pela rede.
Vc sabe como fazer pra ocorrer o OnFetchProgress? Gostaria de saber. Aí nele nem precisaria ver o count, só fazer algo assim:
procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus); begin ProgressBar1.Max := MaxProgress; ProgressBar1.Position := Progress; Self.Update; end;
Gostei + 0
18/12/2004
Rjun
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)