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

  • 主题发起人 主题发起人 cxcsy
  • 开始时间 开始时间
C

cxcsy

Unregistered / Unconfirmed
GUEST, unregistred user!
三层模式中,中间层有如下控件:
adoconnection1
query1 (SQL内容select * from table1 where id=1)
query2 (SQL内容select * from table2 where id=2)
客户层中有如下控件:
decomconnection1
clientdataset1 (数据指向中间层的query1)
clientdataset2 (数据指向中间层的query2)
我对两个表同时进行修改,如何保持数据一致(即事务处理问题)
table1.edit;
table1['客户号']:=1;
table2.edit;
table2['客户号']:=1;
i:=clientdataset1.applyupdates(0);
j:=clientdataset2.applyupdates(0);
如果在一层模式下我知道可以如下处理:
adoconnection1.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.rollbacktrans;
请问各位大侠,三层模式应该如何处理?
 
我反对这样做.我认为应该这样做:
在服务器端写一个方法 UpdateDB,传入二个参数,分别是clientdataset1和
clientdataset2的delta.
在函数内动态生成二对接头和Query,设置二者的关联,然后开始事务,用接头的更新方法
更新数据,成功则递交事务,失败则回退.
在客户端直接调用这个方法,传入二个delta即可
 
服务器端如何识别客户端传来的参数?
 
中间应用放到MTS中,用事物的支持方法。
 
if ( ClientDataSet1.ApplyUpdates(-1)>0 and ClientDataSet2.ApplyUpdates(-1)>0 ) then
begin
.......
end else
begin
......
end;
 
你可参阅李维的midas书籍。三层的事务处理应在中间层的provider自动处理,
所以你不必另外考虑。当然,也可以自己在provider的有关事件中写入代码。
 
那儿可下李维D5 ADO COM+电子书,不是只有前三章的那一个[:D]
 
超星有系统篇。不过要收费。ss:10203374
你可从网上读书论坛寻找破解,或者购买超星的读书卡。
 
>>同意lunu的意见
 
使用组件服务即 COM+,让系统自己进行事务处理,写服务层和中间层
不必要用事务的可以选择支持事务,需要事务的就先需要事务
 
//(分数只给答案最简洁的一人)
不如先把分给大家分了,再给你答案 [:D]
 
各位大侠:
我的三层模式有许多表,table1,table2,table3,table4......相互之间并无关联,
有时需要同时修改table1,table3,table8有时需要同时修改table3,table8等等
因此为了保证数据的一致性必须使用事务处理,否则table1被修改而table3未被修改
数据则不能保证一致。
如果让系统自己进行事务处理,只能使用master/detail,但我认为master表和detail表
必须具有一种关系使其相连接,而我的表之间无任何关系,应该如何处理???
 
你可以把这几个表的更新写的一个函数或过程里面,这个函数是需要事务的
 
用的什么数据库啊? 既然要求这么高,为什么不用存储过程,想在客户端“偷懒”。
 
sql server 2000
 
我把问题在细说一下:
table1有一个字段fp_id(发票编号)
table2有两个字段fp_id(发票编号),hj(合计)
table3有一个字段zhj(总合计)
假如有一发票包含3条记录,
第一步:从table1中取出当前发票号,然后再加1;
第二步:将取出的发票号付给录入的发票的三条记录,然后写入table2;
第三步:将三条记录求和,结果写入table3
为了保证数据的一致性,我应如何处理???谢谢!!!
 
这明显设计的不合理。可以取消Table1,这样我想你应该会处理了。
至于Table3也不是必要的,你统计的时候,根据发票号统计出合计就可以了。
也不会出现你所说的数据一致性问题,简单清晰,不会出错,多好。^_^
 

Similar threads

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