怎么用进度条来显示查询过程? 如题... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据集用的是adoqurey,显示想用进度条:ProgressBar,应该怎么做,你的方法和设想也可以提一下。 用 ADOQuery1 的 Options 的 eoAsyncFetch 設為 true;然後, 處理OnFetchProgress 事件 unit Unit1;interfaceuses 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的方法适合你 那我可以按照数据的条数一直显示进度条在增加,假如到了adoquery.eof 那么就结束,这样总可以吧,是吗?问题是我触发按钮一定要给Ttimer一个标识,这样Ttimer一直在监控是不是有点那个啊?(那个:=欺骗用户?) 超级猛料2003中的一段,大家来探讨一下: ADOQuery查询进度 我一直没有做得满意!请教大家是怎么做的 比如with adoquery1 dobeginclose;sql.clear;sql.add('select * from database');open;end;这个过程怎么用进度条显示 ?用ADOConnection连接数库设置adoquery1.executeoptions.eoasyncfetch := True;adoquery1.CursorLocation :=clUserClient;这样就可以在OnFetchProgress事件中取得以读入的记录条数了,用进度条显示就可以了 用adoquery1的onfetchprogress事件begin progressbar1.position;=progress*100 div maxprogress;end; 有一个问题,为了可移植,我把数据集都放在了datamoduls中,在datamoduls当然不能显示进度条,那各位有好的处理方法吗?如果没有datamoduls可能welllove88(寒林)就是对的。 要动态显示,只能在提取数据的过程中显示,在Open之后写的动态显示都是骗子 是啊,所以才为难啊,要加到用adoquery1的onfetchprogress事件,可adoquery在数据模板上,调用progressbar1好象有点问题啊 大富翁中的回答:来自:Aiirii, 时间:2004-4-21 9:37:21, ID:2571359簡單的, 你可直接procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus);begin Form2.progressbar1.Position:=progress; ////////end;要不, 你也可做成一個 Sendmessage(Form2.Handle, MyMessage, progress, 0);這樣, 發個消息, 讓 Form2 接到, 處理 这样的好象有点问题啊 to Aiirii,你的方法好象有点问题,因为方法1,数据模板中不能简单地调用其他可见的控件或窗口,方法2,你只发送了一个消息,而查询始终在不断的进行。 用 ADOQuery1 的 Options 的 eoAsyncFetch 設為 true;然後, 處理OnFetchProgress 事件 用 ADOQuery1 的 Options 的 eoAsyncFetch 設為 true;然後, 處理OnFetchProgress 事件另,查询最好在线程中作,如果不行,至少也要Fetch一条或n条记录ProcessMesssage一次 如何判断操作系统的类型 气泡提示窗口的问题? 怎么让panel在运行时可以拖动其边界改变大小? delphi下怎么调用java的函数呢? 如何检测一个字符串中包含 大小写英文字母、数字、特殊符号??? 高分求一个简单又困扰人的问题:DBEdit的值怎么赋?急,在线等待。 csdn中没有delphi数据库高手了吗??? 超难度sql语句 EurekaLog 请教数据库高手:用三层数据库结构是否能够实现数据的异地传送? 心情不爽,散分 Shape控件闪动的问题
显示想用进度条:ProgressBar,应该怎么做,你的方法和设想也可以提一下。
然後, 處理
OnFetchProgress 事件
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的方法适合你
ADOQuery查询进度
我一直没有做得满意!请教大家是怎么做的
比如with adoquery1 dobeginclose;sql.clear;sql.add('select * from database');open;end;这个过程怎么用进度条显示 ?用ADOConnection连接数库设置adoquery1.executeoptions.eoasyncfetch := True;adoquery1.CursorLocation :=clUserClient;这样就可以在OnFetchProgress事件中取得以读入的记录条数了,用进度条显示就可以了
begin
progressbar1.position;=progress*100 div maxprogress;
end;
簡單的, 你可直接
procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
Form2.progressbar1.Position:=progress; ////////
end;要不, 你也可做成一個
Sendmessage(Form2.Handle, MyMessage, progress, 0);
這樣, 發個消息, 讓 Form2 接到, 處理
这样的好象有点问题啊
然後, 處理
OnFetchProgress 事件
然後, 處理
OnFetchProgress 事件
另,查询最好在线程中作,如果不行,至少也要Fetch一条或n条记录ProcessMesssage一次