在mts对象调用另一个mts对象不成功,关于MTS的问题 (50分)

  • 主题发起人 主题发起人 小甘
  • 开始时间 开始时间

小甘

Unregistered / Unconfirmed
GUEST, unregistred user!
(这是李维的《ADO/MTS/COM+书的第八章一个例子)
一.在mts对象调用另一个mts对象不成功
情况是这样:MTS数据模块对象mtsBookObj有一个conn,adoquery,dsp
MTS对象TmtsSecurityObj则调用mtsBookObj,利用mtsBookObj的dsp接口来获取数据包
在客户端则有ClientDataSet接收数据包,流程就是这样的
调试时在OleCheck中停下来不继续执行;
客户端出错信息为"invlid data Packet"
按李维的说法,在mts中调用mts 组件效率比直接在客户端中调要高,但是这样为什么不行呢?调试他给的
源码也不行

服务器
procedure TmtsSecurityObj.GetBooks(vCookie: OleVariant;
var vDatas: OleVariant);
var bookObj:ImtsBookObj;
aps:IAppServer;
Options:TGetRecordOptions;
iRecOut:Integer;
OwnerData:OleVariant;
Params:OleVariant;
begin
if VerifyCookie(vCookie)then
begin
try
OleCheck(ObjectContext.CreateInstance(CLASS_mtsBookObj,IID_ImtsBookObj,bookObj));
aps:=bookObj as IAppServer;
Options:=[grMetaData,grReset];
vDatas:=aps.AS_GetRecords('DataSetProvider',-1,iRecOut,Byte(Options),'',Params,OwnerData);
SetComplete;
except
SetAbort;
end;
end;
end;
以下为客户调用源码
LoginObj:ImtsSecurityObj;
procedure TForm1.Button3Click(Sender: TObject);
var vDatas:OleVariant;
begin
LoginObj:=ComtsSecurityObj.CreateRemote('Chinatec-laj');
LoginObj.GetBooks(Edit3.Text,vDatas);
ClientDataSet1.Data:=vDatas;
end;
[
本人初涉mts三层编程,请各们大侠指正
 
怎么没有人肯帮助我呢?我很着急,有劳各位学友了,谢谢!
 
我也想知道
 
问题我已经解决了,装上DELPHI5的补丁和ADO补丁即可。
如果以后学友在学习此书时碰上此问题,可以用此方法
解决。
 
哦,请问一下,那里有delphi5.0和ADO的补丁?那里有下载?
 
在mts中调用mts 组件效率比直接在客户端中调要高?
真的???????
 
sure.
应为在mts中调用(同一套件中的)mts只是建立相应mts的wapper,所以速度飞快啦!
不过有一个小问题要注意:当数据封包为空时,必须处理这种情况,否则不管获取还是
更新数据都会出错。
不过,不知小甘有没有注意到,这种架构的系统在客户端更新数据时有问题:
比如说,我在客户端使用ClientDataSet1.ApplyUpdates(-1);更新数据时,当其
Delta不为空时,无任何反映。更新动作也不成功。我在m$ sql 7中观察,没有任何sql
语句到达服务端,为什么??
根据我的实验,必须用到mts数据模块中TDataSetProvider的ApplyUpdates才能成功
更新后端数据库。为什么??
希望有高手能赐教!
 
to : 小猪
补丁下载 : http://www.gzlove.net
to: txmaster
这种架构的系统在客户端更新数据时确实有问题。刚开始我也向你
一样,观察过SQL2000,也发现没有任何变化。没办法,只好换了种
方法来更新数据。利用 createInstance()解决了这个问题。

我和你一样,想知道这种架构的数据更新为什么不能成功?
 
不能成功的原因是由于接口不一致,所以调用失败。
因此要createInstance()。
 
接受答案了.
 
txmaster,Tense 两位 ,本来分是要给你们的,但发分时,发错了对象!
真对不起!不过,我会记住你们的,会补给你们的!决不失言!
 
后退
顶部