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);