多层分布式中的事务怎么写啊?

xsm7702 2003-11-04 11:47:01
小弟在应用层定义了接口方法,如下,在客户端调用时却不能更新回数据库,
1.请各位帮忙看看是怎么回事?
2.procedure Txsm100.turnmoney(var name1, name2, money: OleVariant);
begin
with ADOConnection2 do
begin
try
begintrans;
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('updata xsm2 set money=money-'+money+' where name like %'+name1+'%');
active:=true;
close;
sql.Clear;
sql.add('updata xsm2 set money=money+'+money+' where name like %'+name2+'%');
active:=true;
end;
showmessage('事务执行成功!');
committrans;
except
rollbacktrans;
showmessage('事务执行失败!');
exit;
end;
end;
end;
其中有表xsm2(name,money);
...全文
47 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsm7702 2003-11-09
  • 打赏
  • 举报
回复
谢谢!
eastliangliang 2003-11-07
  • 打赏
  • 举报
回复
开始菜单->管理工具->组件服务
然后点开组件服务里的计算机->我的电脑->COM+应用程序->你的COM+应用程序->组件
用右键看你组件的属性->事务,选择需要。
xsm7702 2003-11-07
  • 打赏
  • 举报
回复
(青苹果),我就是不知道设哪个属性啊.
eastliangliang 2003-11-05
  • 打赏
  • 举报
回复
在组件管理里设置组件的属性为需要事务。
xsm7702 2003-11-05
  • 打赏
  • 举报
回复
谢谢,请问楼上的,组件还需要另外设置什么吗?
wshuo 2003-11-05
  • 打赏
  • 举报
回复
直接用SQL的事务
WGYKING 2003-11-04
  • 打赏
  • 举报
回复
同意楼上用COM+,向导自动会创建一个事务型远程数据模块
不过楼主的方法也应该可以,不知为什么,看看什么错误信息?
eastliangliang 2003-11-04
  • 打赏
  • 举报
回复
多层中建议用COM+的事务,不过ADO的事务好像也可以用,我怎么觉得begintrans;应该写在try外面啊:)
还是建议用COM+的事务,将组件设置成需要事务的,组件创建时事务即开始,提交用setcomplete,回滚用setabort。
eastliangliang 2003-11-04
  • 打赏
  • 举报
回复
procedure Txsm100.turnmoney(var name1, name2, money: OleVariant);
begin
with ADOConnection2 do
begin
try
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('updata xsm2 set money=money-'+money+' where name like %'+name1+'%');
active:=true;
close;
sql.Clear;
sql.add('updata xsm2 set money=money+'+money+' where name like %'+name2+'%');
active:=true;
end;
showmessage('事务执行成功!');
setcomplete;
except
setabort;
showmessage('事务执行失败!');
exit;
end;
end;
end;

你的组件要设置成需要事务的。
xsm7702 2003-11-04
  • 打赏
  • 举报
回复
更正一下,sql语句就不用了,我会,是一时糊涂,别见怪.
xsm7702 2003-11-04
  • 打赏
  • 举报
回复
谢谢。 可我这书上没有讲到COM+,各位能不能给我讲解一下如何用COM+做一个事务最好也有简单的代码我看看)
另外,楼上说的两次提交合为一次提交, 如何能做得到啊能不能给出sql语句看看?
lanjian 2003-11-04
  • 打赏
  • 举报
回复
同意楼上说的,用exec来执行,而不是用active:=true
还有,最好将两次揭交的SQL写成一次提交。
以前我就有过这样的经历,事务未提交,表的中值就取不出来
lvloj 2003-11-04
  • 打赏
  • 举报
回复
将所有的active:=true;改成 ExecSQL;

1,593

社区成员

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

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