時間のかかる処理(データベースのバックアップ)の進行状況をProgressBarで表示したいのですが、Max値はどう推定すればよいのでしょうか?
WebのDownloadのやCD-Rの書き込みなどで見かけるProgressBarはMax値をどのように取得しているのでしょうか?
バックアップはTransact-SQLのBACKUP を使っています。(Win-Xp,D7-pro,MSDE2000)
ADOQuery1.SQL.clear;
ADOQuery1.SQL.add('BACKUP DATABASE 〜);
ADOQuery1.ExecSQL;
>WebのDownload
おそらく容量を取得し、
Max=全体の容量
Position=ダウンロードした容量
です。
forでStringListを処理する場合なんかは、
ProgressBar1.Max:=SL1.Count-1;
for i:=0 to SL1.Count-1 do
begin
//処理
ProgressBar1.Position:=i+1;
end;
とかです。
今回アドバイスではなく、単なるグチ--;
エクスプローラーでファイルコピーの想定時間とかも、
ちゃんとやってくれないかなぁ〜当てにならなさすぎ。
P.S.
IEのダウンロードはやっまり当てにならないけど、普通のソフトは
MAX=ファイルサイズ
Position=ダウンロードした容量
時間=物によるけど大抵は、
直前のダウンロードバイト数(ビット単位もあり)/(ファイルサイズ − ダウンロードした容量)×sec
だと思います。(計算した訳じゃないから式があってるか不明ぉ)
ProgressBar1.Position:=i+1;
は
ProgressBar1.StepIt;
や
ProgressBar1.StepBy(1);
等とすることが多いようです。
Max=ファイルサイズとしてもT-SQLのBACKUPをBlackBoxで使っていたらPosition値がとれないですね。バックアップ方法を変えないと・・・
TtPIPICHさん、bobさん、貴重なアドバイスをありがとうございました。
ツイート | ![]() |