DATASNAP多表提交之事务控制之通用方法


ERP系统的单据,总是些主从表结构,有一个主表,N个子表,子表又有子表,形成N层,单据数据提交时,主从表数据都要提交,为了保证数据的完整性,必须提供事务控制,要么都提交成功,有一个提交失败所有的提交都要回滚。看起来是有些难,但我们有OLEVARIANT数组可以利用,解决起来就简单了。上码。

服务端:

function TServerMethods1.SaveDatas(tableNames, deltas: OleVariant;
tableCount: Integer): Boolean;
var
i, errCnt: Integer;
d: TfrmDB;
begin
d := DBPool.Lock;
try
if not d.con.InTransaction then
d.con.StartTransaction; // 开启事务
try
for i := 0 to tableCount - 1 do
begin
d.qry.Close;
d.qry.sql.Clear;
d.qry.sql.Text := 'select * from ' + tableNames[i] + ' where 1=2';
d.qry.Open;
d.dsp.ApplyUpdates(deltas[i], 0, errCnt);
end;
d.con.Commit; // 提交事务
Result := True;
except
d.con.Rollback; // 回滚事务
Result := False;
end;
finally
DBPool.Unlock(d);
end;
end;

客户端:

SaveDatas(VarArrayOf(['table1','table2']),VarArrayOf([ClientDataSet1.Delta,ClientDataSet2.Delta]), 2);


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM