线程采用ADO操作数据库,用一个子线程进行数据库的读写.最好提供一个实例(急)

解决方案 »

  1.   

    线程中调用ADO之前首先要CoInitialize一下,否则会出错
      

  2.   

    最好每个线程都用自己的query否则可能出错.
      

  3.   

    //线程类
    type
      Thread = class(TThread)
        Query: TADOQuery;
        ASql: string;
      public
        Constructor Create;
        Destructor Destroy;override;
        procedure Execute;override;
      protected
        property FSql: string read ASql write ASql;
      end;{ Thread }Constructor Thread.Create;
    begin
      //
    end;Destructor Thread.Destory;
    begin
      //
      inherited;
    end;
      
    procedure Thread.Execute;
    begin
      Query.Close;
      Query.SQL.Clear;
      Query.SQL.Text := FSql;
      Query.Open;
    end;initialization
      CoInitialize(nil);finalization
      CoUninitialize;end.//调用
    procedure QueryFromData;
    var
      hQuery: THread;
      mySql: string;
    begin
      hQuery := THread.Create;           //创建实例
      mySql := 'Select * from Table';    //编写Sql语句
      hQuery.ASql := mySql;              //为属性赋值
      hQuery.Execute;                    //运行线程
      hQuery.Free;                       //释放
    end;
      

  4.   

    忘写了,最好创建一个
    Constructor Thread.Create; 
    begin 
      Query := TADOQuery.Create(nil); 
    end; 
      

  5.   

    4楼的代码有没搞错,那样写?
    1:要将CoInit写在Execute循环内,这个是常识
    2:Execute,是由子线程自动调用,不是由主线程手工调用,这,也是常识。