多表更新事务处理(100分)

  • 主题发起人 主题发起人 xbhuang
  • 开始时间 开始时间
X

xbhuang

Unregistered / Unconfirmed
GUEST, unregistred user!
Server;(TRemoveDataModul)
TADODataSet1——TDataSetProvider1
TADODataSet2——TDataSetProvider2
TADODataSet3——TDataSetProvider3
每个数据集对应一个数据表
Client:
TClientDataSet1——TDataSetProvider1
TClientDataSet2——TDataSetProvider2
TClientDataSet3——TDataSetProvider3
当更该TClientDataSet1/TClientDataSet2/TClientDataSet3的数据内容后,如果某一个发生
错误则如何在服务器端进行事务回滚处理,我是一个菜鸟
注:Server端不能用join处理三个数据集,如果解决了的话分数可以再加100'
 
有的数据库(如SYBASE)可以把对不同表的UPDATE写在一起,相信其他数据库在不同表的UPDATE
之间加上特定的符号(如 ;)或许也可以。
在Server端 使用ADOStoredProc+DataSetProvider,把事务放在存储过程里也可以试试啊
 
当更新时可能一次对于不同的表有多条数据内容
例如:
TClientDataSet1:Insert(2),Edit(3),Deleted(1)
TClientDataSet2:Edit(1)
TClientDataSet3:Insert(4),Edit(2)
并且他们必须是联动的,只要有一条内容更新发生错误就全部回滚。
能具体给一个例子吗?(不知我的表述是否明白)
 
对了我的RDBM是SQL 2000
 
//TClientDataSet1:Insert(2),Edit(3),Deleted(1)
//TClientDataSet2:Edit(1)
//TClientDataSet3:Insert(4),Edit(2)
这种更新方式没试过,我不可以随便说的,呵呵
 
能告诉你的QICQ号我们可以聊聊你是哪的人(我的QICQ 653741)
 
加事务处理begin
transation
 
这是我在RDM中的一个方法,可运行后不能实现能谈谈吗
procedure TRDMBirthCertificate.SaveDetail(CDS_CertificateDetail,
CDS_RecordDetail, CDS_TicketDetail, CDS_TicketDetail_Detail: OleVariant;
out ReturnFlag: Integer);
var
Error_Count:Integer;
Flag:Integer;
begin
try
if not DMConnectionSQLServer.ADOC_SQLServer.InTransaction then
DMConnectionSQLServer.ADOC_SQLServer.begin
Trans;
try
if CDS_CertificateDetail<>Null then
DSP_BirthdayRecoVisa.ApplyUpdates(CDS_CertificateDetail,0,Error_Count);
if CDS_RecordDetail<>Null then
DSP_BirthdayReco.ApplyUpdates(CDS_RecordDetail,0,Error_Count);
if CDS_TicketDetail<>Null then
DSP_Ticket.ApplyUpdates(CDS_TicketDetail,0,Error_Count);
if CDS_TicketDetail_Detail<>Null then
DSP_TicketDetail.ApplyUpdates(CDS_TicketDetail_Detail,0,Error_Count);
DMConnectionSQLServer.ADOC_SQLServer.CommitTrans;
Flag:=1;
except
DMConnectionSQLServer.ADOC_SQLServer.RollbackTrans;
Flag:=0;
end;
finally
ReturnFlag:=Flag;
end;
end;
 
我在线等讨论
 
用存储过程吧,这个问题讨论起来很费劲的,查查以前有关三层结构数据更新的帖子就有体会了
 
实现ado的事务接口
在客户端调用服务端的事务过程
 
用存储过程
 
后退
顶部