如何用ADO处理对两个分布在异地计算机上的数据库的同步提交(回滚)。-急,在线等待!!!(100分)

  • 主题发起人 主题发起人 davidtech
  • 开始时间 开始时间
D

davidtech

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器是SQL SERVER2000(A),客户端是ACCESS数据库(B),A、B分别位于不同城市,
A上有表sl,B上有表cl,要求如下:
1、客户端输入ID,在A的sl上查找key=ID,flag=0的记录。
2、修改sl上该记录的flag,由0改为1。
3、将该记录写入B数据库的cl中。
2和3必须同时成功提交或回滚。
关键问题:
1、如果2提交成功,3失败怎么办,当然可以用程序将2中的flag改回来,但如果又失败呢?
2、ADO的Transation只能在一个数据库中实现,有没有办法在这种情况下实现类似的功能呢?
 
COM+应该提供这样的分布式事务功能。
 
这个问题应该是会经常遇到的?怎么大家都不说话了,真的这麽难吗?
to xeen:
可以详细说说吗?
 
用一般的三层应该也可以:
adc1.BeginTrans;
adc2.begintrans;
try
i ;= dataset1.applyupdates(-1);
if i>0 then
raise Exception.Create('dataset1 update error!');
i:= dataset2.applyupdates(-1);
if i>0 then
raise Exception.Create('dataset2 update error!');
adc1.committrans;
adc2.committrans;
except
adc1.RollbackTrans;
adc2.RollbackTrans;
end;
 
to xeen:
如果adc1.committrans成功,
但adc2.committrans失败,则必须:
adc1.RollbackTrans;//但是adc1已committrans成功,不可能rollback!!!
adc2.RollbackTrans;
 
to davidtech:
对,我也没想明白如果commitrans失败该怎么办,比如第二台服务器突然
崩溃了,或路由器出了问题,这在internet上很有可能发生。不过我
想commitrans还是比较可靠的,毕竟只是发送条指令给服务器而没有
什么大量的数据传输.
 
遗憾啊遗憾!看的人多答的人太少。
难道没有人遇到过类似的问题吗?有没有那位高人实际解决过此类问题,
分不够可以加。
 
这麽有意义的问题没人感兴趣?
提前。
 
这个问题看来短期内难于解决,暂时放一边,现在希望大家帮我看看下面这个问题吧,
恐怕也有相当难度:

SQLSTR:='select ssno,'+dynstr+',sum(amount) as sumamount from A group by ssno,'
+dynstr;
要求:dynstr由用户动态选择,现在希望能增加一个lookup字段显示表B中的sstype:where
A.ssno=B.ssno,或者其他办法,只要能达到要求(显示表B中的sstype)即可。
问题:如果用字段编辑器加入LOOKUP字段,则SQLSTR中的新的dynstr字段不显示数值(在
程序运行时决定,无法在设计时加入)。如何解决这个问题?
难点:在B中ssno不是唯一键,并且ssno和sstype有可能是一对多的关系,只希望显示找到
的满足A.ssno=B.ssno的第一个sstype即可(和用lookup字段一样)。由于有这一条,
用SQL语句很难解决这个问题。
 
后退
顶部