小弟建立了一个线程,我在线程中定义一个
ADOQuery:TADOQuery;
并在Begin后写了AdoQey:=TADOQuery.Create(Application);
但是它运行的时候总报EOLESysError,请问这是为什么呢?
是不是在线程内是不可以创建ADO组件的呢?望各位大哥指点指点!

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DB, ADODB, StdCtrls;type
      TThreadADOQuery = class(TThread)
      private
        FQuery: TADOQuery;
      protected
        procedure Execute; override;
      public
        constructor Create(Query: TADOQuery); virtual;
      end;  TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TThreadQuery }
    procedure TThreadADOQuery.Execute;
    begin
      try
        ShowMessage(FQuery.ClassName);
      except
        ShowMessage('Error');
      end;
    end;constructor TThreadADOQuery.Create(Query: TADOQuery);
    begin
      FQuery := Query;
      inherited Create(True);//创建后不立即执行
      FreeOnTerminate := False;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      test: TThreadADOQuery;
      Query: TADOQuery;
    begin
      Query := TADOQuery.Create(Application);
      test := TThreadADOQuery.Create(Query);
      try
        test.Execute;
      finally
        test.Free;
      end;
    end;end.
      

  2.   

    EOleSysError with message 'CoInitialize has not been called'.