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;

  

TStream实现多表提交的更多相关文章

  1. firedac引擎DATASNAP多表查询和多表提交

    firedac引擎DATASNAP多表查询和多表提交 属性设置FDTableAdapter1.SchemaAdapter := FDSchemaAdapter;FDTableAdapter1.DatS ...

  2. TStream实现多表查询

    TStream实现多表查询 function TynFiredac.QuerySQLS(const ASQL, ASQL2: string; AStorageFormat: string = 'bin ...

  3. DATASNAP多表提交之事务控制之通用方法

    ERP系统的单据,总是些主从表结构,有一个主表,N个子表,子表又有子表,形成N层,单据数据提交时,主从表数据都要提交,为了保证数据的完整性,必须提供事务控制,要么都提交成功,有一个提交失败所有的提交都 ...

  4. mysql锁表机制及相关优化

    (该文章为方便自己查阅,也希望对大家有所帮助,转载于互联网) 1. 锁机制 当前MySQL支持 ISAM, MyISAM, MEMORY (HEAP) 类型表的表级锁,BDB 表支持页级锁,InnoD ...

  5. oracle 数据库备份、还原、和使用心得(表丢失、视图丢失的解决办法)

    一.oracle数据备份:exp 关键字     说明(默认值)                  关键字      说明(默认值) --------------------------------- ...

  6. pycharm 直接删掉数据表之后,makemigration和migrate 之后,数据库中依然没有生成数据表的问题

    综合分析一下行程这个问题的原因: 在终端中运行 select * from django_migrations; 查看 提交的记录,如果你的表删掉了,记录还在,那么数据库会觉得,这个表依然是存在的,所 ...

  7. DATASNAP数据提交之FIREDAC的TFDJSONDeltas

    DATASNAP数据提交之FIREDAC的TFDJSONDeltas FIREDAC的TFDJSONDeltas相当于CLIENTDATASET的DELTA,是作为CLIENTDATASET.DELT ...

  8. 在oracle存储过程中创建暂时表

    在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create o ...

  9. IIS6.0使用冒号上传漏洞利用

    利用条件: 1.iis版本为6.0  2.上传文件名不会重命名 利用: 上传一个jpg木马图片 名字为:cs.asp:.jpg 注意是: 默认windows是不允许文件字含:(冒号)的 所以需要抓包后 ...

随机推荐

  1. makefile 中 foreach

    四.foreach 函数 foreach函数和别的函数非常的不一样.因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语 ...

  2. centos7.2环境yum方式快速搭建lnmp环境nginx+mariadb+php-fpm

    centos7.2环境yum方式安装nginx+mariadb+php-fpm 1.安装lnmp环境 安装epel源 yum install -y epel-release 安装 MySQL + PH ...

  3. python之Anaconda版本管理

    首先安装Anaconda,当其安装成功后,可以在cmd中测试是否安装成功,conda --version conda的环境管理 Conda的环境管理功能允许我们同时安装若干不同版本的Python,并能 ...

  4. AJAX请求时status返回状态明细表(转)

    转自:http://www.cnblogs.com/wangking/p/6530904.html AJAX请求时status返回状态明细表 readyState的五种状态2010-03-04 18: ...

  5. Elasticsearch常用最全最常用工具清单

    https://blog.csdn.net/ZYC88888/article/details/82872558

  6. 000 SpringMVC介绍

    1.介绍 2.MVC 模型(Model)封装了应用程序数据,通常它们将由POJO类组成. 视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出. 控制器(Controlle ...

  7. 020 shuffle的重要作用,以及分区的实践

    一:学shuffle原理的必要性 1.说明 学习shuffle的作用是可以对程序进行优化. 在shuffle这个部分有三个部分需要注意: 分区 排序 分组 这个可以进行优化. 二:分区的实践 1.说明 ...

  8. Python join() 方法与os.path.join()的区别

    Python join() 方法与os.path.join()的区别 pythonJoinos.path.join 今天工作中用到python的join方法,有点分不太清楚join() 方法与os.p ...

  9. Web大前端面试题-Day3

    1. javascript的typeof返回哪些数据类型? 答案: undefined string boolean number symbol(ES6) Object Function 2. 列举3 ...

  10. Wannafly 22A

    题解 另g = gcd(a1,a2,a3....) 那么k * g % m的方案书就是答案 这个式子子显然是有循环节的 x * g = 0 mod m ,x * g + y * m = 0 exgcd ...