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

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

新来的菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADOQuery1连接数据库,现在我想在进度条里显示读取数据的进度该如何实现!请各位大哥告知,谢谢
 
可以用Samples面板下的Gauge控件
 
[:D]显然楼主问的不是这个嘛
 
因为用的SQL语句比较长,读的数据比较多,我想在用SQL查询的时候在进度条里显示数据读取的进度,这个高手应该经常用到的吧,请告知小弟,谢谢!!!
 
根据记录数设置进度条的Position(好像是这个属性),每处理一条Position递增一次
 
to saith
当用SQL查询的时候返回的是一个数据集,如何知道每条数据的处理情况呢?请告知,谢谢!
 
用sql语句读取显然是不可能的,用程序循环或用存储过程倒是可以考虑;
不过,如果是多个sql语句的执行到也可以;
否则只能做个假的;
 
超高难度问题,300分都没人会答。[:(]
 
读取几条?多条的话,先count,
然后一条条读,按比例从进度条上增加.
如果是一下子读取,那可能真不知道了...
 
ADODataSet.
 
说实话,就是模拟一下,其实是假的进度来着,
这东西用在数据量非常大的情况下还可以,用另外一个线程来管理进度,
要不就是用什么NextPacket(??是不是这个搞不清了),
 
ADOQuery1FetchProgress
这个事件怎么样
 
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的,想达到这样的效果,也只有使用异步的方式了.
 
上面的方法我测试了,没有达到效果.while (stFetching in ADOQuery1.RecordsetState)do
这个循环没有执行啊?
 
[:D][:D]
我用来测试的数据有30万条,不知道楼上的有几条数据
FetchProgress事件传递过来的进度值依赖于底层驱动,可能不太准确,如果知道总的记录有多少条,那么做出来的效果就比较好看了.
PBar.Max := 300000;
PBar.Position := Progress;
如果数据太少,根本不会触发FetchProgress事件.
 
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;
 
這種實現的可能性好小,不過SQL2000是不支持的,連SQL2000自己都測不出,不知SQL2005是否支持.
 
多人接受答案了。
 
顶部