使用 Delphi 7,每当我尝试在线程内执行任何数据库工作时,都会收到此错误:
“尚未调用 CoInitialize”
我在线程内使用了一个包含 ADOConnection.Open 的简单代码。
但是,如果以任何想法的形式使用相同的代码,它可以正常工作吗?
使用 Delphi 7,每当我尝试在线程内执行任何数据库工作时,都会收到此错误:
“尚未调用 CoInitialize”
我在线程内使用了一个包含 ADOConnection.Open 的简单代码。
但是,如果以任何想法的形式使用相同的代码,它可以正常工作吗?
@mjn:我不允许在上一个答案中评论您的评论,因此我创建了一个新答案:从构造函数调用 CoInitialize 是程序员所做的典型错误之一。
构造函数在另一个线程的上下文中执行,但您需要在当前线程上初始化 COM(当线程过程正在运行时,即作为 Execute 方法的一部分)请参阅
procedure TYourThread.execute;
begin
CoInitialize(nil);
FConnection:=TConnection.Create(...);
try
ThreadCode ....
finally
FConnection.free;
CoUninitialize;
end;
end;
另一个原因是 Application.Initialize; 在主应用程序 DPR 中丢失或注释掉。