如何处理查询数据时的屏幕鼠标状态?(200分)

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

LevinPeng

Unregistered / Unconfirmed
GUEST, unregistred user!
在定时查询数据时,每查询一次数据时鼠标都会变成漏沙状态,由于我是想让它在后台查询数据,不想改变其鼠标形态,我放在另一个线程中做查询,同样也有这个问题。我用的是SQL Direct。
 
查询时设置鼠标指针。
 
在线等待。
 
也不行啊。试过了。
 
搜索一下,以前的回答:
========================
来自 Iknow (2001-2-27 11:06:00)
session.sqlHourGlass:=false;
^^^^^^^
(此变量是Delphi缺省的全局变量)
或者放一个tsession控件, 将SQLHourGlass设为false,
将所有的tdatabase, tquery, ttable等控件的sessionname都设成tsession的name
也是可以的.

 
你是说在执行查询之前设置Screen鼠标指针吧?我觉得可能是SQL Dirent在做数据库操作时设置过鼠标指针。如果在线程调用主线程方法时不加Synchronize方法就没有这个问题,但查询时会出现错误。
 
ZRWeng :
你好!谢了。用Delphi缺省的全局变量session.sqlHourGlass:=false鼠标形状问题倒可以解决,我还想请问下,我现在是放在另外的线程中查询,每次查询时,我单击其它控件时反应比较慢,我现在是单击左边的树,如果是在查询中的话,选定节点就反应很慢了。有什么办法可以解决。
 
"或者放一个tsession控件, 将SQLHourGlass设为false,
将所有的tdatabase, tquery, ttable等控件的sessionname都设成tsession的name
也是可以的. "
我试了下好象不行。
 
这样节点反应肯定会迟缓的了,一般的话如果查询的时间比较长,你可以
通过一个信息框如:数据检索中……,或是进度条显示查询进度
诸如此类的显示信息,查询结束后再显示,可以避免用户末明的等待。。

 
降低执行查询的线程的优先级
 
"降低执行查询的线程的优先级",肯定是不可取的。
 
ZRWeng :
我要的是可能在后台不断更新数据,不想显示什么更数据之类的信息框或进度条,因为可能更新的次数比较频繁,更新时间间隔是由用户设置的。有没有其它好方法 ?
 
在查询更新,其它控件响应十分慢。下面我的代码,各位帮帮忙看下这样写有什么不妥?
注:还有显示其它信息线程,都是采用同样方法创建线程。
这是线程中的代码:
constructor TSysSQLInfoThread.Create(CreateSuspended: boolean);
begin
inherited Create(CreateSuspended);
FreeOnTerminate := True;
end;

procedure TSysSQLInfoThread.DisplayInfo;
begin
frmMain.DisplaySysSQLInfo;
end;

procedure TSysSQLInfoThread.Execute;
begin
Synchronize(DisplayInfo);
end;

这主程序中的代码:
procedure TfrmMain.TimerSysSQLTimer(Sender: TObject);
begin
if SysSQLInfoThread= nil then
SysSQLInfoThread := TSysSQLInfoThread.Create(False);
end;

这是线程调的方法:
procedure TfrmMain.DisplaySysSQLInfo;
var
Query : TQuery;
begin
Query := TQuery.Create(self);
try
Query.DatabaseName := dbMain.DatabaseName;
try

while not Query.Eofdo
begin
..........
Query.Next;
end;

except
on E : Exceptiondo
showmessage(E.Message);
end;
finally
Query.Free;
SysSQLInfoThread := nil;
end;
end;
 
你的代码的效果应该和没有使用线程一样,因为你的线程中所有的操作都放在Synchronize中了,这样的话执行Synchronize(DisplayInfo)的时候主线程其实是等待的,所以此时其他其它控件响应不是很慢,而应该是没有响应。
除了可能引起线程冲突的操作,线程中能不同步就尽量不要同步。
 
可是不同步的话在运行中会出错的。
 
多人接受答案了。
 
后退
顶部