unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB,ActiveX;type
  TForm1 = class(TForm)    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TThreadQuery = class(TThread) { 声明线程类 }
  private
   FQuery: TADOQuery; { 线程中的查询组件 }
   FDataSource: TDataSource; { 与查询组件相关的数据感知组件 }
   procedure ConnectDataSource;{ 连接数据查询组件和数据感知组件的方法 }
  protected
   procedure Execute; override;{ 执行线程的方法 }
  public
   constructor Create(Query: TADOQuery;
   DataSource: TDataSource); virtual; { 线程构造器 }
end;
var
  Form1: TForm1;
  Q1,Q2:TThreadQuery;
implementation{$R *.dfm}
procedure TThreadQuery.ConnectDataSource;
begin
FDataSource.DataSet := FQuery;{ 该方法在查询结束后才调用 }
end;procedure TThreadQuery.Execute;{ 执行线程的方法 }
begin
Try
  try//加
    CoInitialize(nil);//加    FQuery.Open; { 打开查询 }
    Synchronize(ConnectDataSource);{ 线程同步 }  finally//加
    CoUninitialize;//加
   end;//加except
ShowMessage('Query Error'); { 线程异常 }
end;end;{ 线程查询类的构造器 }
constructor TThreadQuery.Create(Query: TADOQuery; DataSource: TDataSource);
begin
FQuery := Query;
coInitialize(nil);
FDataSource := DataSource;
inherited Create(True);
FreeOnTerminate := False;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
 Q1 := TThreadQuery.Create(ADOQuery1, DataSource1); Q2 := TThreadQuery.Create(ADOQuery2, DataSource2);end;procedure TForm1.FormDestroy(Sender: TObject);
begin
 Q1.Terminate; { 销毁之前终止线程执行 }
Q1.Destroy;
 Q2.Terminate; { 销毁之前终止线程执行 }
 Q2.Destroy;end;procedure TForm1.Button1Click(Sender: TObject);
begin
 if Q1.Suspended then Q1.Resume else Q1.Suspend;
 if Q2.Suspended then Q2.Resume else Q2.Suspend;
end;end. 运行后第一次执行(Button1Click)查询可以,第二次执行(Button1Click)查询。错误
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EThread with message 'Thread Error: 拒绝访问。 (5)'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------