系统正在忙(如执行查询)时,如何给出提示。。。。(100分)

  • 主题发起人 主题发起人 liufang1
  • 开始时间 开始时间
L

liufang1

Unregistered / Unconfirmed
GUEST, unregistred user!
各位老师:
我的系统对一个有200多万条记录的库进行查询,需很长一段时间。
我试着在查询期间给出提示(如:”正在查询。。。“),当查询结束
时也给出提示(如:“查询结束!”)。
最简单的方法是什麽???
 
自己作一个图标,代替原来的“沙漏”就行了,这个图标可以用动画的。
 
1:查询之前让鼠标显示沙漏.
Screen.Cursor := crSQLWait;
Try
SqlProcess;
Finally
Screen.Cursor := crDefault;
end;

2:查询之前显示对话框:
ShowWaitDialog;
SqlProcess;
 
最简单的方法:
查询前
showmessage('正在查询。。。');
结束后
showmessage('查询结束。。。');
不过有时系统太忙,连这点时间也不肯施舍.
另一种方法:
查询前将delphi终于定义的sql沙漏光标重载成你自己的动画光标
用以提醒用户.

 
呵,
刚才还冷冷清清的,以为能检个皮夹子,
没想到还是慢了100多秒. 8-<
 
作个进程条最好。
用包的概念,就可以控制查询进程,这时就可用进程条了。
 
用包的概念???能否给出详细代码!!
 
用rxlib里的dbprogress控件,基于bde的回调函数(有源码)可以显示数据库查询
的进度
 
对执行效率有多大影响?
 
请程云大虾解释一下“包”的概念和用法!!
 
用rxlib里的dbprogress控件到哪里去找???我的哭是*。dbf,可用否???
 
满大街都是
http://vcl.vclxx.com/DELPHI/DEFAULT.HTM(delphi深度历险)
教育网到ftp.cs.pku.edu.cn/incoming/rxlib2.75
 
友人说用多线程解决,单我不会。给我一个简单的方法把!!!
 
用ProcessBar+application.processmessage即可
 
Search:
begin
application.processmessage ;
Animate1.Active := True;
Query.Close;
try
Panel1.Caption := '正在查询。。。';
Update;
Query.Open;
Panel1.Caption := '查询结束';
finally
Panel1.Visible := False;
Animate1.Active := False;
end;
 
线程:
//文件1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
mythread:dbthread;
begin
mythread:=dbthread.Create(False);
//your sql code put here
//after query
mythread.suspend;
mythread.Free;
label1.caption:='finish';
end;

end.

//文件2
unit Unit2;
interface
uses
Classes;
type
dbthread = class(TThread)
private
{ Private declarations }
procedure UpdateCaption;
protected
procedure Execute;
override;
end;

implementation

uses
unit1;
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure dbthread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
}
{ dbthread }
procedure dbthread.updatecaption;
var
I:integer;
begin
for I:=0 to 1000000do
form1.label1.Caption:='please wait for query finished '+inttostr(I);
end;

procedure dbthread.Execute;
begin
{ Place thread code here }
synchronize(updatecaption);
end;

end.
 
一个提示搞怎么复杂,真有这个必要么?
 
我觉得也是,精力过剩了. :-)
 
>>我觉得也是,精力过剩了.
不是的,有时是很有必要!
 
难道用进程条不能解决你的问题? 多此一举.
 
后退
顶部