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. elasticsearch常见异常及解决办法

    报错信息:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 20602552 ...

  2. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  3. MySQL安装与初步操作

    MySQL是一款出色的中小型关系数据库,做Java Web开发时,要做到数据持久化存储,选择一款数据库软件自然必不可少. 由于MySQL社区版开元免费,功能比较强大,在此以MySQL为例,演示MySQ ...

  4. APK方法数超过65535及MultiDex解决方案

    以下参考自官方文档配置方法数超过 64K 的应用 随着 Android 平台的持续成长,Android 应用的大小也在增加.当您的应用及其引用的库达到特定大小时,您会遇到构建错误,指明您的应用已达到 ...

  5. 移动端调试利器之vconsole

    说明 由于移动端项目在手机中调试时不能使用chrome的控制台,而vconsole是对pc端console的改写 使用方法 使用 npm 安装: npm install vconsole 使用webp ...

  6. Java Scanner Readable

    通过implements(实现)Readbale interface(接口)的 read() method(方法) 实现自己添加字符到buffer里,然后读取 //策略模式package object ...

  7. 浅谈JavaScript DDOS 攻击原理与防御

    前言 DDoS(又名"分布式拒绝服务")攻击历史由来已久,但却被黑客广泛应用.我们可以这样定义典型的DDoS攻击:攻击者指使大量主机向服务器发送数据,直到超出处理能力进而无暇处理正 ...

  8. Spring Boot 入门案例与配置说明

    一.Spring Boot简介 官网地址:http://spring.io/projects/spring-boot Spring Boot可以轻松创建可以运行的独立的,生产级的基于Spring的应用 ...

  9. 【LOJ】#2549. 「JSOI2018」战争

    题解 仔细分析了一下,如果写个凸包+每次暴力半平面交可以得到70分,正解有点懵啊 然后用到了一个非常结论,但是大概出题人觉得江苏神仙一个个都可以手证的结论吧.. Minkowski sum 两个凸包分 ...

  10. Codeforces 258C Little Elephant and LCM

    Little Elephant and LCM #include<bits/stdc++.h> #define LL long long #define fi first #define ...