多组件协同事务的异常

virtualmfc 2003-05-10 05:41:12
我最近写的一个项目中,使用的是COM+,按照COM+规范的要求,我写了一个协同事务的方法,但在执行时却发现SQL Server 2000会报灾难性故障。下面是摘取出来的代码:

//TGoodsFacade是Require Transaction的COM+对象
procedure TGoodsFacade.DelGoods(GoodsID: Integer; Value: OleVariant);
var
LOnHand: IOnHand;
LGoods: IGoods;
begin
ObjectContext.CreateInstance(CLASS_Goods, IID_IGoods, LGoods);
ObjectContext.CreateInstance(CLASS_OnHand, IID_IOnHand, LOnHand);
LOnHand.DelOnHand(GoodsID); //库存表的DelOnHand方法
LGoods.Save(Value); //调用货品表的Save
end;


//库存表的DelOnHand方法
procedure TOnHand.DelOnHand(GoodsID: Integer);
var
LCommandText: String;
RecordsAffected: Integer;
begin
try
LCommandText := Format('DELETE FROM OnHand WHERE GoodsID=%d',[GoodsID]);
Conn.Execute(LCommandText, RecordsAffected);
SetComplete;
except
SetAbort;
raise;
end;
end;


//货品表的Save方法
procedure TGoods.Save(Value: OleVariant);
begin
try
with DataSet do
begin
Close;
CommandText := 'SELECT * FROM Goods WHERE 1=0';
Open;
end;
ClientDataSet.Data := Value;
if ClientDataSet.ApplyUpdates(0) > 0 then
raise Exception.Create('更新货品表错误,请与管理员联系!');
SetComplete;
except
SetAbort;
raise;
end;
end;
...全文
32 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
猛禽 2003-05-14
  • 打赏
  • 举报
回复
昨天发了,被退回,我再发一次试试

放到我主页上了:http://mental.mentsu.com/down/dev/complus1.zip
virtualmfc 2003-05-14
  • 打赏
  • 举报
回复
对不起,我犯了个低级错误!我的ClientDataset是个动态创建的,与后台数据表不一致,所以发生了这个问题。 Raptor(猛禽) 兄,辛苦你了,不好意思!这分全部给你了。
另外,能否交个朋友?行的话,请给我的邮箱发封信。OK?
virtualmfc 2003-05-13
  • 打赏
  • 举报
回复
是吗?我使用的SQL Server2000 Personal、Windows 2000 Professional。而且所有的组件在
开发时为了省事全部使用缺省的Apartment模型。不知道与这个有没有关系?
Raptor(猛禽)兄,你的环境是如何的?
猛禽 2003-05-13
  • 打赏
  • 举报
回复
我昨天按你的代码写了一个DEMO,完全没有问题啊。:(

我也不知道你为什么出错了,不然你写一个能出错的DEMO代码给我看看
virtualmfc 2003-05-13
  • 打赏
  • 举报
回复
我的邮件地址:
guowenrui@yeah.net

谢谢!!!
猛禽 2003-05-13
  • 打赏
  • 举报
回复
给我发个MAIL:raptorz@163.com
我把我那个DEMO给你看看。
virtualmfc 2003-05-13
  • 打赏
  • 举报
回复
Raptor(猛禽) 兄,我除了数据库与你的不一样之外,COM+都和你的一样,怎么还是在客户端
调用了CoGoodsFacade.Create.DelGoods(xx,Delta);方法时会出现“灾难性故障”,而且在 事件查看器中没有错误日志,仅在使用SQL SERVER跟踪时会发现错误。到底是怎么回事呢?我都急死了。帮忙问一下各位大侠有没有碰到过这个问题的。解决立即给分!!!
virtualmfc 2003-05-13
  • 打赏
  • 举报
回复
等我试一下你这种配置再说。
猛禽 2003-05-13
  • 打赏
  • 举报
回复
我是Windows 2k svr/SQL 2k EntSvr
所有COM+都是STA 都是Require Transaction
GoodsFacade是一个Transactional Object
Goods和OnHand是两个Transactional Data Module
客户端通过CoGoodsFacade.CreateRemoteInstance(...)来创建COM+ Object的。
virtualmfc 2003-05-12
  • 打赏
  • 举报
回复
希望各位踊跃发言,分数不是问题。Raptor(猛禽)兄,赶快帮忙!!!急。。。。。
猛禽 2003-05-11
  • 打赏
  • 举报
回复
研究一下再说:)
longlonger 2003-05-10
  • 打赏
  • 举报
回复
有人回答么
ReplyRobot 2003-05-10
  • 打赏
  • 举报
回复
UP

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧