uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB, DBTables, ComCtrls,
  ExtCtrls, Menus,Activex;type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet2: TTabSheet;
    DBGrid2: TDBGrid;
    TabSheet3: TTabSheet;
    DataSource2: TDataSource;
    DataSource3: TDataSource;
    Button2: TButton;
    DBGrid3: TDBGrid;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    hread1: TMenuItem;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    Open1: TMenuItem;
    New1: TMenuItem;
    N1: TMenuItem;
    Close1: TMenuItem;
    Exit1: TMenuItem;
    Memo1: TMemo;
    Label1: TLabel;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    Button1: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Exit1Click(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;
 destructor Destroy; override;
end;
var
Form1: TForm1;
Q1,Q2: TThreadQuery;
implementation{$R *.dfm}
procedure TThreadQuery.ConnectDataSource;
begin
FDataSource.DataSet := FQuery;
end;
procedure TThreadQuery.Execute;
begintry
CoInitialize(nil);
FQuery.Open;
Synchronize(ConnectDataSource);
except
ShowMessage('Query Error');
end;
end;
constructor TThreadQuery.Create(Query: TADOQuery; DataSource: TDataSource);
begin
inherited Create(true);
FQuery := Query;
FDataSource := DataSource;
FreeOnTerminate :=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Q1 := TThreadQuery.Create(adoQuery1, DataSource2);
  if Q1.Suspended then Q1.Resume else Q1.Suspend;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
statusbar1.Panels[0].Text:=timetostr(now);
end;procedure TForm1.Exit1Click(Sender: TObject);
begin
application.Terminate
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Q2 := TThreadQuery.Create(adoQuery2, DataSource3);
  if Q2.Suspended then Q2.Resume else Q2.Suspend;
end;
destructor TThreadQuery.Destroy;
begin
  CoUnInitialize;
  inherited;
end;
end.