IntraWeb 上使用 ADO的CoInitialize 错误为您提供了正确答案。
正如我从@David对这个问题的回答的评论中了解到的,还有两件事:
- 其中声明了 TComInitialization 类型,该类型又定义了 ciMultiThreaded 标识符。对此的回答是:IWServerControllerBase 单元,Intraweb 的一部分。
- 在哪里更改 IWServerController 对象的 ComInitialization 属性以使其正常工作。
- 您必须知道的第一件事是用于构造 IWServerController 对象的实际类是 IntraWeb 项目的一部分。
- 接下来,尝试在页面上设置这个属性 OnCreate 事件看起来太晚了(必须在要初始化 COM 的线程中创建),我的猜测是此时更改此属性是被禁止的,并且会引发异常,或者会被完全忽略。
- 将 Delphi XE VCL 用于 Web 应用程序向导,我得到了一个名为 ServerController 的单元,其类为 TIWServerController。在重写构造函数失败后,我重写了 AfterConstruction 方法来初始化这样的属性,就像这样
例子:
TIWServerController = class(TIWServerControllerBase)
procedure IWServerControllerBaseNewSession(ASession: TIWApplication;
var VMainForm: TIWBaseForm);
private
protected
//constructor Create; override; //failed!!
public
procedure AfterConstruction; override;
end;
//..
procedure TIWServerController.AfterConstruction;
begin
inherited;
ComInitialization := ciMultiThreaded; //succeded
end;
然后,我添加了一个按钮、一个标签并正确配置了 ADOConnection(如果重要,则针对 SQL Server)并且:
procedure TIWForm2.IWButton1Click(Sender: TObject);
begin
try
ADOConnection1.Connected := True;
IWLabel1.Caption := 'Connected';
except
on E:Exception do
IWLabel1.Caption := E.ClassName + ' ' + E.Message;
end;
end;
点击按钮,产生这个:

希望这对你来说已经足够了。