三层模式中的事务处理问题(分数只给答案最简洁的一人)(300分)

  • 主题发起人 主题发起人 cxcsy
  • 开始时间 开始时间
各位大侠:
我的三层模式有许多表,table1,table2,table3,table4......相互之间并无关联,
有时需要同时修改table1,table3,table8有时需要同时修改table3,table8等等
因此为了保证数据的一致性必须使用事务处理,否则table1被修改而table3未被修改
数据则不能保证一致。
如果让系统自己进行事务处理,只能使用master/detail,但我认为master表和detail表
必须具有一种关系使其相连接,而我的表之间无任何关系,应该如何处理???


兄弟,不是挑你毛病,既然相互间并无关联,又哪里来的一致性?
你的问题,其实可以在中间层一次性处理,就是更新过程可以自己写,然后传递内容到中间层
事务在中间层进行处理。

处理方法还要说么?
 
在服务器端声明三个方法,一个BeginTrans,一个CommitTrans,rollbacktrans;
adoconnection1.appserver.begintras;
table1.edit;
table1['客户号']:=1;
table2.edit;
table2['客户号']:=1;
i:=clientdataset1.applyupdates(0);
j:=clientdataset2.applyupdates(0);
if (i=0) and (j=0) then
adoconnection1.committrans
else
adoconnection1.appserver.rollbacktrans
 
我想所說的是
你的問題提問就錯了,,不知道如何來答
[8D][8D][8D][8D][8D][8D][8D]
中間層怎麼不見datasetprovider ?
一.如果你的數據是獨立的
加上兩個datasetprovider ,
1.設定各自的resolvetodataset := false;
運用自動更新即可..........由datasetprovider所連接的query來更新

2. 採用 datasetprovider.onupdatedata 來處理
設定各自的resolvetodataset := true;
二.如果你的數據是join 出來的就採用datasetprovider.beforeupdateRecord 方法


[8D][8D][8D][8D][8D][8D][8D]
 
如果更新中有錯採用:
tdatasetprovider.OnUpdateError 事件處理
 
前端不用dbgrid,clientdataset之流,传字符串到后台,在后台开始无。
如使用mts,ado的事务模式,不用开事务
 
在中间层写一个保存方法,里面加载事务就OK了。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部