使用Delphi 7,每当我尝试在线程内部进行任何数据库工作时,我都会收到此错误:
“CoInitialize尚未被称为”
我在线程中使用了一个包含ADOConnection.Open的简单代码。
但如果在形式中使用任何想法,相同的代码可以正常工作吗?
答案 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中丢失或注释掉。