一个关于数据库的问题。

settingsun 2002-07-06 11:11:39
连接到服务器进行数据查询,如何在这一段时间内用ProgressBar来进行时间的同步显示,即用ProgressBar来显示查询的进度。

望指教。
...全文
31 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
honey_001 2002-07-06
  • 打赏
  • 举报
回复
同意debussy(debussy)的说法.
debussy 2002-07-06
  • 打赏
  • 举报
回复
使用ADO的异步查询方式
对于较长时间执行的查询操作,可以使用异步方式
在查询过程中,ADO会以OnFetchProgress事件来通知应用程序正在处理
用OnFetchComplete事件来通知应用程序已经处理完毕

详细情况请参考李维《Delphi 5.x ADO/MTS/COM+高级程序设计》第110页,有非常详细的例子
crazyz 2002-07-06
  • 打赏
  • 举报
回复
定义一个progressBar的Form
unit ProgressForm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls;

type
TProgressFrm = class(TForm)
ProgressBar1: TProgressBar;
lblPrompt: TLabel;
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private

{ Private declarations }
public

{ Public declarations }
end;

procedure ProgressShow(aHint: string = '正在运行请等待');
procedure SetPos(aPos: extended; isOver: boolean);
procedure ProgressHide;

var
ProgressFrm: TProgressFrm;
FFormTop: integer;

implementation

{$R *.dfm}

{ TProgressFrm }

procedure ProgressShow(aHint: string = '正在运行请等待');
begin
if not Assigned(ProgressFrm) then
begin
ProgressFrm := TProgressFrm.Create(Application);
end;
setPos(1, False);
ProgressFrm.lblPrompt.Caption := aHint + '......';
progressFrm.Show;
ProgressFrm.Update;
Screen.Cursor := crHourGlass;
end;

procedure ProgressHide;
begin
SetPos(100, True);
end;

procedure SetPos(aPos: extended; isOver: boolean);
begin
progressFrm.ProgressBar1.Position := trunc(aPos);
ProgressFrm.ProgressBar1.Update;
//Application.ProcessMessages;
if IsOver then
begin
Screen.Cursor := crDefault;
ProgressFrm.Hide;
end;
end;

procedure TProgressFrm.FormActivate(Sender: TObject);
begin
SetWindowPos(ProgressFrm.handle, HWND_TOPMOST,
ProgressFrm.Left, ProgressFrm.Top, ProgressFrm.Width, ProgressFrm.Height, 0);
end;

procedure TProgressFrm.FormCreate(Sender: TObject);
begin
Top := trunc(Screen.Height / 3);
left := trunc((Screen.Width - Width) / 2);
end;

end.

在查询时先调用
ProgressShow
try
Setpos(recno/recordcount
finally
ProgressHide
end;
WnEunfn 2002-07-06
  • 打赏
  • 举报
回复

不可能的,因为查询所花时间未知……
robinhunter 2002-07-06
  • 打赏
  • 举报
回复
你的问题已经众多高手分析,结论是:此题无解 :(
settingsun 2002-07-06
  • 打赏
  • 举报
回复
怎么没人知道吗。
debussy 2002-07-06
  • 打赏
  • 举报
回复
使用ADO的异步查询方式
对于较长时间执行的查询操作,可以使用异步方式
在查询过程中,ADO会以OnFetchProgress事件来通知应用程序正在处理
用OnFetchComplete事件来通知应用程序已经处理完毕

详细情况请参考李维《Delphi 5.x ADO/MTS/COM+高级程序设计》第110页,有非常详细的例子

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧