delphi TStream实现多表提交  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

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


来源:https://www.cnblogs.com/hnxxcxg/p/9947656.html


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.043061971664429 seconds