我是IntraWeb的新手。我想制作一个简单的应用程序,该应用程序使用ADO控件连接并显示访问数据库。当我执行服务器时,它给了我
“尚未调用CoInitialize”
错误。我在互联网上搜索后发现许多文字
更改的ComInitialization属性
IWServerController为ciMultiThreaded。
我尝试在IWAppFormCreate事件中执行此操作。然后我得到编译错误:
“未声明的标识符ciMultiThreaded”
我在行IWServerController.ComInitialization:=ciMultiThreaded;
上输入了运行时错误:
“地址访问冲突 。 。 。”
由于我不知道自己在做什么,所以找不到问题。请帮我。
最佳答案
CoInitialize error on IntraWeb using ADO为您提供正确的答案。
当我从对@David answer的评论中捕获到该问题时,剩下两件事了:
在哪里声明了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;
点击按钮,将产生以下结果:
希望这对您足够。