zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    2019年江苏大学885编程大题
    2018年江苏大学885编程题
    python-类和对象
    unity游戏框架学习-登录模块
    unity游戏框架学习-AssetBundle
    记 Firebase Crashlytics 接入遇到的坑
    c# 枚举Enum
    unity性能优化-UGUI
    unity性能优化-GPU
    unity性能优化-CPU
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/4136725.html
Copyright © 2011-2022 走看看