Blue
Red
Green
Orange
Voilet
Slate
Dark

如何用进度条表示读取数据的进度!(30分)

  • 主题发起人 新来的菜鸟
  • 开始时间

新来的菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADOQuery1连接数据库,现在我想在进度条里显示读取数据的进度该如何实现!请各位大哥告知,谢谢
 
F

fred_jing

Unregistered / Unconfirmed
GUEST, unregistred user!
可以用Samples面板下的Gauge控件
 
C

Corn3

Unregistered / Unconfirmed
GUEST, unregistred user!
[:D]显然楼主问的不是这个嘛
 

新来的菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
因为用的SQL语句比较长,读的数据比较多,我想在用SQL查询的时候在进度条里显示数据读取的进度,这个高手应该经常用到的吧,请告知小弟,谢谢!!!
 
S

saith

Unregistered / Unconfirmed
GUEST, unregistred user!
根据记录数设置进度条的Position(好像是这个属性),每处理一条Position递增一次
 

新来的菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
to saith
当用SQL查询的时候返回的是一个数据集,如何知道每条数据的处理情况呢?请告知,谢谢!
 

清新空气

Unregistered / Unconfirmed
GUEST, unregistred user!
用sql语句读取显然是不可能的,用程序循环或用存储过程倒是可以考虑;
不过,如果是多个sql语句的执行到也可以;
否则只能做个假的;
 
M

man8888

Unregistered / Unconfirmed
GUEST, unregistred user!
超高难度问题,300分都没人会答。[:(]
 
F

fanboynet

Unregistered / Unconfirmed
GUEST, unregistred user!
读取几条?多条的话,先count,
然后一条条读,按比例从进度条上增加.
如果是一下子读取,那可能真不知道了...
 
S

sunnyfairy

Unregistered / Unconfirmed
GUEST, unregistred user!
N

Neo_leaf

Unregistered / Unconfirmed
GUEST, unregistred user!
说实话,就是模拟一下,其实是假的进度来着,
这东西用在数据量非常大的情况下还可以,用另外一个线程来管理进度,
要不就是用什么NextPacket(??是不是这个搞不清了),
 
F

ftlifeng

Unregistered / Unconfirmed
GUEST, unregistred user!
ADOQuery1FetchProgress
这个事件怎么样
 
P

penal

Unregistered / Unconfirmed
GUEST, unregistred user!
ExecuteOptions := [eoAsyncFetch];
procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer;
var EventStatus: TEventStatus);
begin
PBar.Max := 100;
PBar.Min := 0;
PBar.Position := Trunc(Progress / MaxProgress * 100);
Application.ProcessMessages;
end;

procedure TForm1.ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error;
var EventStatus: TEventStatus);
begin
PBar.Position := 0;
end;


ADOQuery1.Close;
ADOQuery1.Open;
while (stFetching in ADOQuery1.RecordsetState)do
Application.ProcessMessages;
ShowMessage('OK');
我估计使用ADO的,想达到这样的效果,也只有使用异步的方式了.
 
W

wuzhonglinquan

Unregistered / Unconfirmed
GUEST, unregistred user!
上面的方法我测试了,没有达到效果.while (stFetching in ADOQuery1.RecordsetState)do
这个循环没有执行啊?
 
P

penal

Unregistered / Unconfirmed
GUEST, unregistred user!
[:D][:D]
我用来测试的数据有30万条,不知道楼上的有几条数据
FetchProgress事件传递过来的进度值依赖于底层驱动,可能不太准确,如果知道总的记录有多少条,那么做出来的效果就比较好看了.
PBar.Max := 300000;
PBar.Position := Progress;
如果数据太少,根本不会触发FetchProgress事件.
 
S

saith

Unregistered / Unconfirmed
GUEST, unregistred user!
Bar.Max := DataSet.RecordCount;
Bar.Min := 0;
Application.ProcessMessages;
DataSet.First;
while not DataSet.Eofdo
begin
//.......
Bar.Position := Bar.Position + 1;
Application.ProcessMessages;
DataSet.Next;
end;
 
D

delphigbg

Unregistered / Unconfirmed
GUEST, unregistred user!
這種實現的可能性好小,不過SQL2000是不支持的,連SQL2000自己都測不出,不知SQL2005是否支持.
 

新来的菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部 底部