各位兄台:
  我现在遇到了如下一个问题:我通过Delphi中的New菜单下面的Thread Object项创建了一个线程,然后在默认的方法Execute下面写了如下一段代码:
procedure TInteractThread.Execute;
var
  i:integer;
  strplan_id:string;
  column1,column2,column3:string;
  bidvalue_caculate:single;
begin
  { Place thread code here }
  form1.biding_flag:=true;
  while form1.biding_flag do
  begin
    //等待readyflag=1;
    if form1.ADODataSet2.Active =true then form1.ADODataSet2.Close;
    form1.ADODataSet2.CommandText:='select * from Serverflag';
    form1.ADODataSet2.Active:=true;    while form1.ADODataSet2.Recordset.RecordCount=0 do
    begin
      if form1.ADODataSet2.Active =true then form1.ADODataSet2.Close;
      form1.ADODataSet2.CommandText:='select * from Serverflag';
      form1.ADODataSet2.Active:=true;
    end;    form1.ADOCommand1.CommandText:='DELETE FROM Serverflag';
    form1.ADOCommand1.Execute ;
    //读取投标值表    if form1.ADODataSet2.Active =true then form1.ADODataSet2.Close;    form1.ADODataSet2.CommandText:=format('select shop_id,plan_id from publish_tt where shop_id=''%s''',[form1.edit1.Text]);;
    form1.ADODataSet2.Active:=true;    strplan_id:=form1.ADODataSet2.Recordset.Fields ['plan_id'].Value;
    //调用算法计算投标值
    bidvalue_caculate:=random(100);
    column1:=form1.edit1.text;    column3:=floattostr(bidvalue_caculate);    form1.ADOCommand1.CommandText :=format('insert into bidvalue_tt(shop_id,bidvalue)values(''%s'',''%s'')',[column1,column3]);
    form1.ADOCommand1.Execute;    column1:=form1.edit1.Text;
    column2:='1';    form1.ADOCommand1.CommandText:=format('insert into Clientflag(shop_id,readyflag)values(''%s'',''%s'')',[column1,column2]);
    form1.ADOCommand1.Execute ;
  end;
end;
并在主界面中入一个按钮,其事件内容如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
  InteractThread:=TInteractThread.Create(false);
  InteractThread.Priority:=tpNormal;
  InteractThread.FreeOnTerminate:=true;
end;在运行时居然会出现在如下错误:
 Project ProjectClient.exe raised exception class EOleException with message‘尚未调用'CoInitialize。Process stopped.Use Step or Run to continue.请各位高手指点啊,在下先谢过了!分数不够,再加!!!!!

解决方案 »

  1.   

    我几天前遇到的一个问题 错误信息和你是一样的exception class EOleException with message‘尚未调用'CoInitialize但是,我的问题是出现在 窗体写如dll后(连接DCOM服务器),然后另外用个测试程序测试它时出现的。后来,把它挂到我们公司产品的主框架下调用时,就正常叻。
      

  2.   

    initialization
      CoInitialize(nil);
    finalization
      CoUninitialize;
    在你的单元最好加上以上代码就行了。因为ado控件必须调用com初始化过程,只是在主线程时TForm或者TDatamodule替你调用而已
      

  3.   

    加在哪个地方啊?我是Delphi的初学者,哪位能说得再清楚点吗?
      

  4.   

    initialization
    CoInitialize(nil);
    finalization
    CoUninitialize;
    这个要放在你单元的末尾,在end.之前。帮助里面有initialization的说明。
      

  5.   

    不行啊,报错,说CoInitialize(nil)和CoUninitialize不能识别?怎么办?兄台,帮帮忙,我先谢过了!是不是要包含什么头文件啊?