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