如题,那位能指点一下啊,我是初学,用单线程太慢了!!

解决方案 »

  1.   

    unsigned(僵哥) 你给指点一下啊,我初学啊。
      

  2.   

    只是查询的话,用ADO的异步就可以了
      

  3.   

    高手帮看一下,我的线程啊,怎么查询的时候总没数据啊??
    unit main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB, DBTables, ComCtrls,
      ExtCtrls, Menus,Activex;type
      TForm1 = class(TForm)
        ADODataSet1: TADODataSet;
        DataSource1: TDataSource;
        Button1: TButton;
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        DBGrid1: TDBGrid;
        TabSheet2: TTabSheet;
        DBGrid2: TDBGrid;
        TabSheet3: TTabSheet;
        DataSource2: TDataSource;
        DataSource3: TDataSource;
        Button2: TButton;
        Button3: 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;
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Exit1Click(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;
    begin
    try
    FQuery.Open;
    Synchronize(ConnectDataSource);
    except
    ShowMessage('Query Error');
    end;
    end;
    constructor TThreadQuery.Create(Query: TADOQuery; DataSource: TDataSource);
    begin
    FQuery := Query;
    FDataSource := DataSource;
    inherited Create(true);//true
    FreeOnTerminate := false;  //false
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    {Q1 := TThreadQuery.Create(adoQuery1, DataSource2);
    Q2 := TThreadQuery.Create(adoQuery2, DataSource3);}
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    Q1.Terminate;
    Q1.Destroy;
    Q2.Terminate;
    Q2.Destroy;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Q1 := TThreadQuery.Create(adoQuery1, DataSource2);
      if Q1.Suspended then Q1.Resume else Q1.Suspend;
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Q2 := TThreadQuery.Create(adoQuery2, DataSource3);//add it
      if Q2.Suspended then Q2.Resume else Q2.Suspend;
    end;procedure TForm1.Exit1Click(Sender: TObject);
    begin
    application.Terminate
    end;
    destructor TThreadQuery.Destroy;
    begin
      CoUnInitialize;
      inherited;
    end;
    end.