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;
    

      

  • 相关阅读:
    AJAX获取服务器当前时间
    Struts2的入门实例
    Java 测试技术3 Struts框架驱动(StrutsTestCase)
    Java单元测试技术1
    软件测试自动化:自动化工厂
    MySQL优化原理
    fetch_array()与fetch_assoc()的用法
    sometimesever js中创建数组,并往数组里添加元素
    将三维数组中的同名的键拆分成三维数组的每个数组中包括原来不同的二维数组的键...
    php serialize讲解与json性能测试
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9947656.html
Copyright © 2011-2022 走看看