COM+分布式,一个数据更新组件调用远程数据模块的IAppServer.AS_ApplyUpdates,但是在客户端总是出现‘根事务要提交,但是事务终止了操作’

Z

zxtko

Unregistered / Unconfirmed
GUEST, unregistred user!
COM+分布式,一个数据更新组件调用远程数据模块的IAppServer.AS_ApplyUpdates,但是在客户端总是出现‘根事务要提交,但是事务终止了操作’为什么啊?(50分)<br />COM+分布式,一个数据更新组件调用远程数据模块的IAppServer.AS_ApplyUpdates,但是在客户端总是出现‘根事务要提交,但是事务终止了操作’为什么啊?
数据更新对象:
Fobj := CoRDM.Create ;
ServerObj := Fobj as IAppServer;
try
ServerObj.AS_ApplyUpdates('DataSetProvider1', vDatas, iMaxErrors, iErrorCount, OwnerData);
SetComplete;
except
SetAbort;

end;

 
你试一下修改COM+组件对象的事务属性为"支持事务",也把其所在的Package包Contrainer的事务属性改为"支持事务"。
 
应该是你所提交的数据中存在问题,导致事务失败
 
试一下捕获异常,看看在哪里出错:
Fobj := CoRDM.Create ;
ServerObj := Fobj as IAppServer;
try
ServerObj.AS_ApplyUpdates('DataSetProvider1', vDatas, iMaxErrors, iErrorCount, OwnerData);
SetComplete;
except
on e:exceptiondo

begin
showmessage(e.message);
SetAbort;

end;
end;
 
是呀,数据更新的 一定要支持事物的
 
更新的要求是需要事务,不是支持事务,我跟过代码,在DatasetProvider中有对delta复制到内嵌ClientDataSet.Data的语句,出错,估计是Data Snap(Midas)对事务的支持不好,应该是Delphi自己的Bug,李维也讨论过这个问题,但是按照他的说法做也没有用。我也在找解决的办法,没有办法!!
 
似乎把类型库中vDatas的定义从Variant该成Variant*就可以了,再不行就给成In,Out类型
 
顶部