按李维的书所做的,一个COM+数据模块,提供一个更新方法updatedatas,该方法用DataSetProvider的Applyupdates来实现。再建一个更新对象,也提供一个更新方法updatedatas,它是直接调用COM+数据模块的updatedatas来实现。最后在客户端创建这个更新对象,并调用其方法时,得了个“根事务要提交,但事务终止了操作”的错误,在COM+数据模块的updatedatas中捉到了上面的异常,不知是什么原因?多谢了。附:更新对象是通过一个数据模块用dcomconnection来连接COM+数据模块的,其方法updatedatas也主要是 dm.dcom.AppServer.updatedatas(vdatas,imaxerror,ierrorcount);
var
Delta :OleVariant;
...
Delta := cds.Delta;
Connection.AppServer.UpdateDatas(cds.Delta, ...); // 就是你的错跟踪时会发现, Delta 本应是 array of byte 成了 array of variant, 内容都一样...的确是一件怪事晕啊晕啊了我半天后我想到了在服务器这边定义 Delta 类型为 VARIANT 和 VARIANT * 是一回事,定义成了 VARIANT * 后,那个错误就不会发生了
Connection.AppServer.UpdateDatas(cds.Delta, ...); // 就是你的错这样不行吧,cds.Delta不是只读的吗?
现在我把COM+数据模块的更新COM+对象的updateDatas中的Delta都改成了
Variant*,结果却在更新对象的UpdateDatas方法中捉到了个"Variant does not
reference an automation object"的异常,这是怎么回事?
设为true的。是应该在事务数据模块中把Variant改为Variant*。多谢
那么多位。