CoInitialize错误使用线程内的数据库

时间:2013-01-13 07:26:31

标签: database multithreading delphi delphi-7 ado

使用Delphi 7,每当我尝试在线程内部进行任何数据库工作时,我都会收到此错误:

  

“CoInitialize尚未被称为”

我在线程中使用了一个包含ADOConnection.Open的简单代码。

但如果在形式中使用任何想法,相同的代码可以正常工作吗?

3 个答案:

答案 0 :(得分:14)

@mjn:我不允许在上一个答案中评论你的评论,所以我创建了一个新的答案:从构造函数中调用CoInitialize是典型的错误程序员之一。

构造函数在另一个线程的上下文中执行,但是您需要在当前线程上初始化COM(当线程过程正在运行时,即作为Execute方法的一部分)see

答案 1 :(得分:10)

procedure TYourThread.execute;
begin
  CoInitialize(nil); 
  FConnection:=TConnection.Create(...);
  try
    ThreadCode ....
  finally
    FConnection.free;
    CoUninitialize;
  end;
end;

答案 2 :(得分:0)

另一个原因是Application.Initialize;在主应用程序DPR中丢失或注释掉。