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;
    

      

  • 相关阅读:
    MySQL在DOS界面对database和table增删改查
    js中获取css样式的两种方式
    js for循环中点击事件中无法获取每一个i值的问题
    ps快捷键
    一个简单的动态页面(我的第一个博客)
    Centos7 搭建 hadoop3.1.1 集群教程
    CSS rem与em的运用
    JS进制转换总结
    使用JS生成字符视频/画
    破解字体加密
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9947656.html
Copyright © 2011-2022 走看看