注册 登录
编程论坛 Delphi论坛

[求助][讨论][高人赐教]在ADO中如何实现多线程查询

mazheng75 发布于 2004-05-26 16:58, 1407 次点击

2 回复
#2
hanpengshan_002004-07-27 13:03

type file://查询线程定义 TMultiQuery = class(TThread) private ADOQry :TADOQuery; fDatasource :TDataSource; { Private declarations } protected procedure Execute; override; procedure ConnectDataSource; public constructor create(qry :TADOQuery;datasource :TDataSource);virtual; end;

var

t1,t2,t3,t4 :TMultiQuery;

procedure TForm1.btnThreadClick(Sender: TObject); begin t1 :=TMultiQuery.create(adoquery1,datasource1); t2 :=TMultiQuery.create(adoquery2,datasource2); t3 :=TMultiQuery.create(adoquery3,datasource3); t4 :=TMultiQuery.create(adoquery4,datasource4

end;

constructor TMultiQuery.create(qry :TADOQuery;datasource :TDataSource); begin ADOQry :=qry; fDataSource :=datasource; inherited create(true); file://挂起线程 freeonterminate :=false; end;

procedure TMultiQuery.ConnectDataSource; begin FDataSource.DataSet := ADOQry; file://vcl是非安全线程代码,执行完后要再次连接dataset_____ end;

procedure TMultiQuery.Execute; begin ADOQry.Open; Synchronize(ConnectDataSource); end;

procedure TForm1.btnStartStopClick(Sender: TObject); begin if t1.Suspended then t1.Resume; if t2.Suspended then t2.Resume; if t3.Suspended then t3.Resume; if t4.Suspended then t4.Resume; end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin t4.Terminate; t4.Destroy; t3.Terminate; t3.Destroy; t2.Terminate; t2.Destroy; t1.Terminate; t1.Destroy; end;

#3
hanpengshan_002004-07-27 13:05

窗体和线程单元在一起,四个adoquery,datasource,dbgrid,一个adoconnection,

设置好属性

1