|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2004/4/20 14:44:40 |
标题: |
|
加入我的收藏 |
楼主: |
如题...
----------------------------------------------
- |
作者: |
|
2004/4/20 15:02:26 |
1楼: |
精确定地进行显示不大可能,连SQL Server都没有,Microsoft自己都做不出来,何况我们?
----------------------------------------------
www.acreport.com
|
作者: |
|
2004/4/20 15:07:58 |
2楼: |
那要做的相当精确呢?有可能吗?做的比较精确的有方法没?
----------------------------------------------
-
|
作者: |
|
2004/4/20 15:23:51 |
3楼: |
用定时器凑合着骗骗用户可以,真的要显示实际进度是不可能的事情。
----------------------------------------------
www.acreport.com
|
作者: |
|
2004/4/21 9:00:59 |
4楼: |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls, ComCtrls;
type TForm1 = class(TForm) DataSource1: TDataSource; DBNavigator1: TDBNavigator; DBGrid1: TDBGrid; ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; Button1: TButton; Button2: TButton; ProgressBar1: TProgressBar; ADOQuery2: TADOQuery; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus); procedure ADODataSet1FetchComplete(DataSet: TCustomADODataSet; const Error: Error; var EventStatus: TEventStatus); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; l_Star:Double; l_End:Double; implementation
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject); begin ADOQuery2.Close; ADOQuery2.Open; ProgressBar1.Max:= ADOQuery2.Fields[0].Value; Self.Caption:=IntToStr(Progressbar1.Max); end;
procedure TForm1.Button1Click(Sender: TObject); begin try ADODataSet1.Active:=false; ADODataSet1.ExecuteOptions:=[eoAsyncFetchNonBlocking]; finally l_Star:=GetTickCount; ADODataSet1.Active:=true; end; end;
procedure TForm1.Button2Click(Sender: TObject); begin try ADODataSet1.Active:=false; ADODataSet1.ExecuteOptions:=[eoAsyncFetch ]; finally l_Star:=GetTickCount; ADODataSet1.Active:=true; end; end;
procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus); begin progressbar1.Position:=progress; end;
procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet; const Error: Error; var EventStatus: TEventStatus); begin l_End:=GetTickCount; //Sleep(2000); MessageBox(Self.Handle,PChar(FloatToStr((l_End-l_Star)/1000.0)+'秒'),'所用时间',mB_OK);
end;
end.
部分代码,包括两种查询方式,效果不一样 button1的方法适合你
----------------------------------------------
-
|
作者: |
|
2004/4/21 9:01:30 |
5楼: |
超级猛料2003中的一段,大家来探讨一下: ADOQuery查询进度 我一直没有做得满意!请教大家是怎么做的 比如
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from database');
open;
end;
这个过程怎么用进度条显示 ?
用ADOConnection连接数库
设置
adoquery1.executeoptions.eoasyncfetch := True;
adoquery1.CursorLocation :=clUserClient;
这样就可以在OnFetchProgress事件中取得以读入的记录条数了,用进度条显示就可以了
----------------------------------------------
-
|
作者: |
|
2004/4/21 9:01:49 |
6楼: |
有一个问题,为了可移植,我把数据集都放在了datamoduls中,在datamoduls当然不能显示进度条,那各位有好的处理方法吗?如果没有datamoduls可能welllove88(寒林)就是对的。
----------------------------------------------
-
|
作者: |
|
2004/4/21 9:43:59 |
7楼: |
那么复杂的怎么办?如存储过程,或者多个语句的和那些没有返回记录集的的语句,这种情况往往大多数。
----------------------------------------------
www.acreport.com
|
作者: |
|
2004/4/21 9:45:25 |
8楼: |
to:hongama 如果使用welllove88的方法,你可以用动态设置事件来实现。
----------------------------------------------
www.acreport.com
|
|