李维《Delphi5.x分布式多层应用电子商务篇》书中的的第一个使用ASP的MTS对象的例子的问题??(50分)

  • 主题发起人 主题发起人 zlmark
  • 开始时间 开始时间
Z

zlmark

Unregistered / Unconfirmed
GUEST, unregistred user!
李维《Delphi5.x分布式多层应用电子商务篇》书中的的第一个使用ASP的MTS对象的例李维《Delphi5.x分布式多层应用电子商务篇》书中的的第一个使用ASP的MTS对象的例子执行不了
在脚本中可以创建对象,但调用方法时总显示ASP灾难性故障,这是怎么回事???
请大虾解决!!!!
 
我也试过这个例子,没问题。
能否再讲清楚。
 
你自己的程序错误,可能是连接数据库之类的问题。
建议在win2000 Server下面单步调试一下。
 
我怎么调试也调试不出来,应该怎么办?我并没有连接数据库,只是定义了一个方法。只有
一行代码:response.write ('hellow world');
 
这个问题我也碰到。如果是ObjectContext,好像在Professional版本就不行,在Server版本就行。可能是2000的问题。
如果是Page_level就一点问题都没有。
 
我就是在win2000 server版本下编译执行的。到底哪位大虾可以帮我?!
 
我也想知道
 
iis的版本是多少?
 
iiS5.0 Win2000
 
<<总显示ASP灾难性故障
上次遇到这样的问题,没有解决,换了台机器就好了
 
我需要解决问题,而不是回避问题,如果我几万大洋的一台服务器有这样的问题,
可不是能说换就换的呀!
 
我解决了这个问题。猜猜怎么回事?简单地安装企业版升级包和ADO升级包。嘿嘿。
 
在那里有升级包??
 
我试过这个问题,你可以到李维的ADO/MTS方面的书上找到修改comobj.pas,就可以完成!
 
在borland.com上有升級包下的。《程序員大本營》也有。
 
to gaoronghui:
能给出具体的内容吗?comobj.pas修改的具体代码片断
 
修改过的三个函数如下:
function CreateComObject(const ClassID: TGUID): IUnknown;
begin
if(GetObjectContext=nil) then
OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IUnknown, Result))
else
begin
GetObjectContext.CreateInstance(ClassID,IUnknown,Result);
end;
end;

function CreateRemoteComObject(const MachineName: WideString;
const ClassID: TGUID): IUnknown;
const
LocalFlags = CLSCTX_LOCAL_SERVER or CLSCTX_REMOTE_SERVER or CLSCTX_INPROC_SERVER;
RemoteFlags = CLSCTX_REMOTE_SERVER;
var
MQI: TMultiQI;
ServerInfo: TCoServerInfo;
IID_IUnknown: TGuid;
Flags, Size: DWORD;
LocalMachine: array [0..MAX_COMPUTERNAME_LENGTH] of char;
begin
if (GetObjectContext=nil) then
begin
if @CoCreateInstanceEx = nil then
raise Exception.CreateRes(@SDCOMNotInstalled);
FillChar(ServerInfo, sizeof(ServerInfo), 0);
ServerInfo.pwszName := PWideChar(MachineName);
IID_IUnknown := IUnknown;
MQI.IID := @IID_IUnknown;
MQI.itf := nil;
MQI.hr := 0;
{ If a MachineName is specified check to see if it the local machine.
If it isn't,do
not allow LocalServers to be used. }
if Length(MachineName) > 0 then
begin
Size := Sizeof(LocalMachine);
// Win95 is hypersensitive to size
if GetComputerName(LocalMachine, Size) and
(AnsiCompareText(LocalMachine, MachineName) = 0) then
Flags := LocalFlags else
Flags := RemoteFlags;
end else
Flags := LocalFlags;
OleCheck(CoCreateInstanceEx(ClassID, nil, Flags, @ServerInfo, 1, @MQI));
OleCheck(MQI.HR);
Result := MQI.itf;
end else
begin
GetObjectContext.CreateInstance(ClassID,IUnknown,Result);
end;
end;

上面两个是comObj.pas里面的
下面这个是Provider.pas里面的
function TDataSetProvider.InternalApplyUpdates(const Delta: OleVariant;
MaxErrors: Integer;
out ErrorCount: Integer): OleVariant;
var
TransactionStarted: Boolean;
begin
CheckDataSet;
TransactionStarted := not IProviderSupport(DataSet).PSInTransaction;
if TransactionStarted and (GetObjectContext=nil) then
IProviderSupport(DataSet).PSStartTransaction;
try
CheckResolver;
Resolver.FUpdateTree.InitData(DataSet);
try
Result := inherited InternalApplyUpdates(Delta, MaxErrors, ErrorCount);
finally
Resolver.FUpdateTree.InitData(nil);
end;
finally
if TransactionStarted and (GetObjectContext=nil) then
IProviderSupport(DataSet).PSEndTransaction((ErrorCount <= MaxErrors) or (MaxErrors = -1));
end;
end;

 
多人接受答案了。
 
为什么我按照上面改了comobj.pas,编译时说GetObjectContext未定义?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部