我的程序从SQL里查询数据显示是汇总后的,记录数少,但花的时间大约30秒左右(视不同的查询),我想在这个过程中加上ProgressBar进度条显示查询过程,最好有百分比显示,中途可以取消查询.
我要网上找了半天也没有找到答案!?
我要网上找了半天也没有找到答案!?
解决方案 »
- 谁有《Delphi精要》罗小平著的书转让
- 关于mediaplayer的问题
- 关于Mscomm串口的通信延时问题,求教了
- 压缩Access数据库
- 在StringDrid中添加數據時,如果防止不能添加同樣的一行?
- 哪里可以找到qrctrls.pas
- 我想做一个知识管理的东东,各位大侠有什么好的经验传授。来者有分
- wanderung(扬清)请进
- 各位,为了交流方便,共同进步,留下自己的信息和联系方式好吗?
- 请问大家有没有从exe文件中找出一个窗口中写入数据与数据库中表的字段相对应的工具???
- 有没有像QQ聊天记那样显示文本控件啊
- PageControl的TabSheet能否实现SpeedButton的按下效果?
然后在OnFetchProgress中处理显示进度2,做一个线程窗体专用显示进度条,查询是打开 if Pbar1.Position>=Pbar1.Max then
Pbar1.Position:=0;
Pbar1.Position:=Pbar1.Position+1;查完关了
if Pbar1.Position>=Pbar1.Max then
Pbar1.Position:=0;
Pbar1.Position:=Pbar1.Position+1;
查询时进度条并没有动作,而且窗体中的文字或Button按钮都不显示了,当查询完之后进度条只显示了一块,是怎么回事?
procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
ProgressBar1.Position := Progress;
ProgressBar1.Max := MaxProgress;
end;procedure TForm1.ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error; var EventStatus: TEventStatus);
begin
ProgressBar1.Position := ProgressBar1.Max;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Text := 'select * from ft_ab_stock';
open;
end;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, DBGrids, DB, ADODB;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Panel1: TPanel;
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
procedure ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error; var EventStatus: TEventStatus);
procedure ADOQuery1FetchProgress(DataSet: TCustomADODataSet; Progress,
MaxProgress: Integer; var EventStatus: TEventStatus);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
ProgressBar1.Position := Progress;
ProgressBar1.Max := MaxProgress;
end;procedure TForm1.ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error; var EventStatus: TEventStatus);
begin
ProgressBar1.Position := ProgressBar1.Max;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Text := 'select * from YCSINVBF';
open;
end;
end;end.
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
ProgressBar1.Position := Progress;
ProgressBar1.Max := MaxProgress;
Application.ProcessMessage;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery2.ExecuteOptions := [eoAsyncFetch] //异步方式
end;
前面没有反应,是来不及显示出来,里面没有加Application.ProcessMessages;
加上显示不出来。
ADOQuery2.ExecuteOptions := [eoAsyncFetch] //异步方式 这个设置了没有。应该没有道理的。仔细检查一下的
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, ExtCtrls, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
ProgressBar1: TProgressBar;
ADOQuery2: TADOQuery;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error; var EventStatus: TEventStatus);
procedure ADOQuery1FetchProgress(DataSet: TCustomADODataSet; Progress,
MaxProgress: Integer; var EventStatus: TEventStatus);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
ProgressBar1.Position := Progress;
ProgressBar1.Max := MaxProgress;
Application.ProcessMessages;
end; procedure TForm1.ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error; var EventStatus: TEventStatus);
begin
ProgressBar1.Position := ProgressBar1.Max;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Adoquery1.Open;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery2.ExecuteOptions := [eoAsyncFetch] ;
end;end.
这个过程无法是想告诉用户,你的程序没有死掉,所以,只需要显示一个窗口就行了。查询完成之后Hide这个窗口。