急!急!急!Delphi编写ASP的组件如何访问数据库? 我用Delphi编写了一个组件,在ASP中调用也正常。后来需要增加一点数据库查询的功能,所以在project中增加了一个DataMudule,里面放了一个ADOConnection,一个ADOQuery,可是在ASP中一调用该DataMudule及其相关数据库读取的操作,页面就显示“灾难性故障”。请问这是怎么回事? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 编译通过没问题,就是在asp中调用出错。 解决了,发布成COM+组件就没有问题了。 代码贴出来,侃侃应该增加一个接口方法在其中动态调用DataModule我作过,可以的,给个例子:unit Eric;{$WARN SYMBOL_PLATFORM OFF}interfaceuses ComObj, ActiveX, AspTlb, EricCom_TLB, StdVcl;type TEricDB = class(TASPObject, IEricDB) protected procedure OnEndPage; safecall; procedure OnStartPage(const AScriptingContext: IUnknown); safecall; procedure Test; safecall; end;implementationuses ComServ,DataMod;procedure TEricDB.OnEndPage;begin inherited OnEndPage;end;procedure TEricDB.OnStartPage(const AScriptingContext: IUnknown);begin inherited OnStartPage(AScriptingContext);end;procedure TEricDB.Test;var ss:String; Dm:TDataModuleAsp;begin ss:=Request.Form.Item['Name']; Response.Write('Hello,'+ss+'!'); Response.Write('<P>'); try Dm:=TDataModuleAsp.Create(Nil); Response.Write(Dm.DataSetTableProducer1.Content); finally Dm.Free; end;end;initialization TAutoObjectFactory.Create(ComServer, TEricDB, Class_EricDB, ciMultiInstance, tmApartment);end. 因为ASP Object是COM模型,所以需要使用线程。两种方法可以选择:1)最佳方案,不要自动生成DataModule,因为它会被作为全局变量,你除非保证它是Thread-free,否则,最好不要自动生成。在你需要得方法中,动态生成,虽然消耗资源,但很安全。2)如果自动生成DataModule,将TDatabase得HandleShared属性设为True 不因该用DataModule ,要用Remote Data Module (远程数据模块)!!!!!!! chechy(简简单单的活)兄不愧有这么多星星,楼主听他的没错.当然,如果你愿意麻烦一点用COM+或RDM来做成三层结构也是可以的. bpl文件如何打开 delphi登录代码问题 求正解,在delphi中异或封包的操作语句. 散分,2分钟后结帖。 各位高手请进来帮帮忙 问个ComboBox的简单问题,在线等~ 一个自大的上海女大学生的自白及网上的回帖! 怎样删除一个含有文件与子文件的文件夹。 超级奇怪问题:自编的ACTIVFORM在DELPHI中TAB和放向键失效!但用在IE或VB中正常!! Delphi开发分布式Web系统时能用PHP或是JSP吗? 如下语句为什么错? 三层体系结构中,客户端与应用服务器通信的问题????
应该增加一个接口方法
在其中动态调用DataModule
我作过,可以的,给个例子:
unit Eric;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
ComObj, ActiveX, AspTlb, EricCom_TLB, StdVcl;type
TEricDB = class(TASPObject, IEricDB)
protected
procedure OnEndPage; safecall;
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure Test; safecall;
end;implementationuses ComServ,DataMod;procedure TEricDB.OnEndPage;
begin
inherited OnEndPage;
end;procedure TEricDB.OnStartPage(const AScriptingContext: IUnknown);
begin
inherited OnStartPage(AScriptingContext);
end;procedure TEricDB.Test;
var ss:String;
Dm:TDataModuleAsp;
begin
ss:=Request.Form.Item['Name'];
Response.Write('Hello,'+ss+'!');
Response.Write('<P>');
try
Dm:=TDataModuleAsp.Create(Nil);
Response.Write(Dm.DataSetTableProducer1.Content);
finally
Dm.Free;
end;
end;initialization
TAutoObjectFactory.Create(ComServer, TEricDB, Class_EricDB,
ciMultiInstance, tmApartment);
end.
两种方法可以选择:
1)最佳方案,不要自动生成DataModule,因为它会被作为全局变量,你除非保证它是Thread-free,否则,最好不要自动生成。在你需要得方法中,动态生成,虽然消耗资源,但很安全。
2)如果自动生成DataModule,将TDatabase得HandleShared属性设为True