Lid=862254: 三层中事务处理问题(请大家救救我。。。两天了都没解决好)
分类:数据库-C/S型 qiubole (2002-1-16 15:11:00)
在服务器有两个adoquery,两个datasetprovider
在客户端有两个clientdateset
要求两个clientdataset要么同时提交要么同时回滚;
方案1:在服务器端声明两个方法,一个BeginTrans,一个CommitTrans;
在客户端的保存中进行调用
dcomconnection1.AppServer.begintrans;
DetailDataSet.Post;
DetailDataSet.ApplyUpdates(0);
MasterDataSet.Post;
MasterDataSet.ApplyUpdates(0);
dcomconnection1.AppServer.committran;
不能解决问题;和没调用事务处理一样:(
方案2:在服务端声明一方法;用来处理更新
procedure TTSaleServer.Apply1(Param1, Param2: OleVariant);
var
errorcount:integer;
begin
errorcount:=0;
try
adoconnection1.BeginTrans;
sa_mainquprovider.ApplyUpdates(param1,-1,errorcount);
if errorcount>0 then
raise eadoerror.Create('error');
sa_qutprovider.ApplyUpdates(param2,-1,errorcount);
if errorcount>0 then
raise eadoerror.Create('error');
adoconnection1.CommitTrans;
except
adoconnection1.RollbackTrans;
end;
end;
在客户端调用,也不能解决问题,更新的数据竟然变成插入了:(
请问各位大虾,怎样解决呀?
我看了以前的贴子,没有满意的答案,不要怪我懒,实在是找不到
lovelotus (2002-1-16 15:29:00)
why
qiya (2002-1-16 16:07:00)
up
寻找 (2002-1-16 16:22:00)
什么是三层事务?
qiubole (2002-1-16 22:11:00)
问题已经解决
采用方案1
var
ErrorCount:integer;
begin
ErrorCount:=0;
dcomconnection1.AppServer.begintrans;
DetailDataSet.Post;
inc(ErrorCount+DetailDataSet.ApplyUpdates(0));
MasterDataSet.Post;
inc(ErrorCount+MasterDataSet.ApplyUpdates(0));
if ErrorCount>0 then
dcomconnection1.AppServer.RollBack
else
dcomconnection1.AppServer.committran;
谢谢各位捧场
--------------------------
另: lid=1031990 也是相关讨论。
//学习。关注此题。