在中间层TDataSetProvider.BeforeUpdateRecord更新多个表时,事务为何不起作用.(100分)

  • 主题发起人 主题发起人 king.gray
  • 开始时间 开始时间
K

king.gray

Unregistered / Unconfirmed
GUEST, unregistred user!
我在TDataSetProvider.BeforeUpdateRecord事件中分别用
UpdateAdjEmployee(DeltaDS, UpdateKind);//更新表1
UpdateAdjSalary(DeltaDS, UpdateKind);//更新表2
Applied := True;
当其中有一个表更新失败时,事务没有被回滚.
有何解决方法
 
为何不在中间层用adoconnection的事务的方法来同步
中间层写三个方法给客户端调用(以com接口方式来调用: socketcon.appserver.method)
procedure mystart;
begin
adocon.begin
trans;
end;

procedure mycommit;
begin
adocon.commit;
end;

procedure myrollback;
begin
adocon.rollback;
end;

客户端调用:
try
socket.appserver.mystart;
socket.appserver.mycommit;
except
socket.appserver.myrollback;
end;
 
To:lisongmagic
我现在的情况是ClientDataSet连接DataSetProvider使用ApplyUpdate更新.
不适用你的方式
 
这个可能是你没有控制好,我都是这样控制的
 
TO:ycluo
不知道有什么地方,需要设置的呢?
 
失败是exception
try
if applyupdates(0) <> 0
raise exception.create('error');
setcomplete;
except
setabort;
end;
可以试试
 
ado.begin
tran;
try
更新1
...
ado.commit
except
ado.rollback
end
 
To:ycluo
你的方法在TDataSetProvider.BeforeUpdateRecord事件中不适用.
TO:andrew57
你的方法适用于COM+组件,我的程序不属于此类
 
后退
顶部