zoukankan      html  css  js  c++  java
  • TStream实现多表提交

    TStream实现多表提交

    function TynFiredac.SaveDatas(const ATableName, ATableName2: string; ADeltas: TStream; AStorageFormat: string = 'binary'): string;
    var
      LStream1, LStream2: TStream;
    begin
      Result := 'false';
      if (ATableName = '') or (ADeltas = nil) or (ATableName2 = '') then
        Exit;
    
      LStream1 := TMemoryStream.Create;
      LStream2 := TMemoryStream.Create;
      TynStream.SplitStream(ADeltas, LStream1, LStream2);
      LStream1.Position := 0;
      LStream2.Position := 0;
      try
        try
          if not FDConnection1.InTransaction then
            FDConnection1.StartTransaction; // 开启事务
          FDQuery1.Close;                   // 保存表一
          FDQuery1.sql.Clear;
          FDQuery1.CachedUpdates := True;
          FDQuery1.UpdateOptions.UpdateTableName := ATableName;
          FDQuery1.sql.Text := 'select * from ' + ATableName + ' where 1=2';
          FDQuery1.LoadFromStream(LStream1, TynStream.GetFDStorageFormat(AStorageFormat));
          if FDQuery1.ApplyUpdates = 0 then
          begin
            Result := 'true';
          end
          else
          begin
            Result := 'false';
            FDConnection1.Rollback; // 回滚事务
            Exit;                   // 保存表一发生错误,表二就不用再提交
          end;
    
          FDQuery1.Close;                // 保存表二
          FDQuery1.sql.Clear;
          FDQuery1.CachedUpdates := True;
          FDQuery1.UpdateOptions.UpdateTableName := ATableName2;
          FDQuery1.sql.Text := 'select * from ' + ATableName2 + ' where 1=2';
          FDQuery1.LoadFromStream(LStream2, TynStream.GetFDStorageFormat(AStorageFormat));
          if FDQuery1.ApplyUpdates = 0 then
          begin
            Result := 'true';
            FDConnection1.Commit;  // 提交事务
          end
          else
          begin
            Result := 'false';
            FDConnection1.Rollback; // 回滚事务
          end;
        except
          on E: Exception do
          begin
            Result := 'false';
            FDConnection1.Rollback; // 回滚事务
            Log.WriteLog('TynFiredac.SaveDatas ' + E.Message);
          end;
        end;
      finally
        LStream1.Free;
        LStream2.Free;
        FDQuery1.Close;
        FDConnection1.Close;
      end;
    end;
    

      

  • 相关阅读:
    Qualcomm download 所需要的 contents.xml
    “临界知识”的3个底层思维与方法,98%的人都不知道!
    什么是临界知识
    做一个会学习的人
    有效的结构化思维训练,MECE分析法
    那些一眼看透本质的人,逻辑都是这样形成的!
    js设计模式--策略模式
    数学——抽象与具体相结合
    使用POI解析Excel
    合成复用原则——面向对象设计原则
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9947656.html
Copyright © 2011-2022 走看看