在查询处理大量数据的等待过程中,弹出窗口显示进度条?(100分)

  • 主题发起人 主题发起人 chinausa
  • 开始时间 开始时间
C

chinausa

Unregistered / Unconfirmed
GUEST, unregistred user!
在查询处理大量数据的等待过程中,弹出窗口显示进度条,处理完成,进度条窗口结束,有没有控件或处理方法?
 
在此提问,你应该知道使用多线程的方法。
type
MyThread = class(TThread)
private
{ Private declarations }
FProgress: Integer;
procedure CreateAndShowProgressWin;
procedure UpdateProgressWin;
procedure FreeProgressWin;
protected
procedure Execute;
override;
end;

implementation
{ MyThread }
procedure MyThread.CreateAndShowProgressWin;
begin
...
end;

procedure UpdateProgressWin;
begin
...
end;

procedure FreeProgressWin;
begin
...
end;

procedure MyThread.Execute;
begin
FProgress := 0;
Synchronize(CreateAndShowProgressWin);
try
for ...
begin
...
Inc(FProgress);
Synchronize(UpdateProgressWin);
end;
finally
Synchronize(FreeProgressWin);
end;
end;

 
如果是要查询数据库的话,没有可能显示进度条的,DFW中已经有很多类似的问题了。
 
show一个窗体,“请等待...”
 
如果不是等待数据库操作的话,用
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
Form2.Visible:=True;
for I:=1 to 100000000do
begin
Form2.Gauge1.Progress:=I div 1000000;
Application.ProcessMessages;
// 如果不需要响应消息,如中断操作等该句可不要
end;
Form2.Visible:=False;
end;
 
经典的问题! 经典的的答案:
先暗中处理一遍,记录下所用时间,然后回滚事务,再做一遍,这下可以Show
一下进度条了吧,哈哈哈…………
 
用show time算了,看一下查询的速度用了多长时间!
 
目前我发现只有一个第三方的数据库支持SQL查询提交后显示进度,就是Dbisam。
 
何必非要用进度条呢?!
象WINDOWS一样,用个放大镜晃来晃去就行了
 
我也很想知道有什么好的方法,主要是无法知道究竟要多长时间才能完成操作。
有一些软件是不管怎么,先1%....一直下去,然后到99%就停在那,一直到完成
才出100%
 
造个假象,显示一个进度条,每次进度条的长度都取个随机数,然后运行,进度条到头后在重新来,客户还以为正在做反复筛选工作:)
 
请教:怎样得到ibquery的查询执行时间? 多谢
 
考虑到SQL的查询中返回结果的不确定性,因此查询时间也是不确定的,
所以显示查询进度条只能是,是什么呢?
是骗骗用户啦~~~
 
其实你可以开始的时候快,越往后越慢,到最后就是等完成了才跳到100:)
 
注意
Randolph,提到的多线程的方法才是比较正规的方法
在执行sql语句前,先创建一线程,显示一个无法移动并且最前显示的窗口,
在sql语句执行完以后,关闭线程。
进度条是骗人的东西,用的人就不管了,难道我们写程序的还要自己骗自己吗??
 
或者做几个灯,一闪一闪地更好看
 
做一个动画!
 
使用ADODataset异步查询功能
在OnFetchProgress中
begin
progressbar1.position:=progress;
end;
之前先确定记录总数,就行了[:)]
 
老大,你可以弹出一个窗口,做个假的进度条嘛!!!你的查询结束了就再把这个条子关掉就行了嘛。
 
后退
顶部