高手帮忙,多线程下载数据却无法更新.

mator 2004-09-30 01:41:55
TGetDBThread = class(TThread)
private
{ Private declarations }
Fqry:TAdoquery;
Fsource:Tdatasource;
Fexception:Exception;
procedure HookUI;
procedure qryerror;
procedure timestart;
protected
procedure Execute; override;
public
constructor Create(Q:Tadoquery;S:Tdatasource);virtual;
end;
constructor TGetDBThread.Create(Q: Tadoquery; S: Tdatasource);
begin
inherited Create(true);
Fqry:=q;
Fsource:=s;
FreeOnTerminate:=true;
Resume;
end;

procedure TGetDBThread.Execute;
begin
if Terminated then exit;
try
Fqry.Open;
if Fqry.Locate('a',0,[])=false then Fqry.First;
Synchronize(HookUI);
Synchronize(Timestart);
except
Fexception:=ExceptObject as Exception;
Synchronize(qryerror);
end;

end;

procedure TGetDBThread.HookUI;
begin
Fsource.DataSet:=Fqry;
end;

procedure TGetDBThread.qryerror;
begin
Application.ShowException(fexception);
end;

procedure TGetDBThread.timestart;
begin
mgcfrm.Timer1.Enabled:=true;
end;
以上是线程中接收数据的代码,下面是进入线程前的代码
procedure Tmgcfrm.loadrecord(dtbegin:Tdatetime;value,Recono:string);
var
newThread:Tgetdbthread;
begin
with qrysql do
begin
close;
sql.Clear;
sql.Add('select * from table');
end;
newthread:=Tgetdbthread.Create(qrysql,datasource1);
end;
第一次接收到数据在DBGRID里是正常的,以后就无法更新了
我是用TIMER控件没N秒接收一次的,请高手帮忙,感激不尽
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyxhl 2004-10-14
  • 打赏
  • 举报
回复
procedure TGetDBThread.Execute;
begin
if Terminated then exit;
try
//这里加一句Fqry.DataSource := nil;
//但要写成Synchronize的形式再试试
Fqry.Open;
if Fqry.Locate('a',0,[])=false then Fqry.First;
Synchronize(HookUI);
Synchronize(Timestart);
except
Fexception:=ExceptObject as Exception;
Synchronize(qryerror);
end;

end;
tengxing 2004-10-13
  • 打赏
  • 举报
回复
我也正在搞多线程的DB程序,还帮不了你!!帮你顶顶了!!

2,496

社区成员

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

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