建立一个新工程,并建立一个线程,引用DB,ADODB单元,
然后代码如下:
procedure Tthread.Execute() override
var
DBConn:TAdoconnection;
Begin
DBConn:=TAdoconnection.Create(nil);
end;程序执行到DBConn:=TAdoconnection.Create(nil);
时,系统报错:类未初试化,不知道是什么意思,但在其他单元引用ADODB,并执行DBConn:=TAdoconnection.Create(nil);就没有问题,也就是说,不能在线程中创建CONNECTION对象,要做什么处理么?

解决方案 »

  1.   

    你可以这样写试一下。
    type
      Tthread = class(TThread)
      Con1:TADOConnection;
    .....
    constructor Tthread.Create(DBCon:TADOConnection);
    begin
    Inherited Create (True);
    Con1:=DBCon;
    end;procedure Tthread.Execute() overrideBeginSynchronize(过程名);
    end;
    procedure tthread.过程名;
    var
    DBConn:TAdoconnection;
    Begin
    DBConn:=TAdoconnection.Create(nil);
    end;
      

  2.   

    是的,这个跟你在initialization中初始化TAdoconnection一样的,都会报错
    你可以在创建线程时把TAdoconnection引入
    create(Adoconnection:TAdoconnection)
      

  3.   

    有哪些的VCL组件在线程中创建有这个问题?谢谢二位
      

  4.   

    有人说过在线程中不能使用ado,我想未必,只是要注意一下对象的序列化和同步问题。
      

  5.   

    线程中使用ADO只是COM技术常识问题。
      

  6.   

    那我想问一下各位,怎么样处理才能在线程中直接创建COM对象,需要手工调用API么?