总之用事务的宗旨是:

1.不用嵌套事务EnableNested设置为False

2.事务一定要回滚,避免发生异常的情况下,没有回滚 造成,不可估量的错误。

try

frmClientDm.MyMainCon.StartTransaction;

try

//注意,这里不能有Exit;退出函数,因为退出了,Except部分并没有执行,会造成事务没有回滚

except

frmClientDm.MyMainCon.Rollback;

end;

finally

end;

2.用事务一定不要忘记出异常后 回滚事务,避免再次执行 就变成了 嵌套事务,因为上一个事务 虽然有异常,但是 事务已经开启,并没有关闭,如果再次点击按钮 再次调用StartTransaction,就变成了嵌套事务,最好不要用嵌套事务。

3.如上图的代码测试如下:

  1. procedure TForm1.正常Click(Sender: TObject);
  2. var
  3. MyFdq: TFDQuery;
  4. begin
  5. MyFdq := TFDQuery.Create(nil);
  6. try
  7. MyFdq.Connection := FDConnection1;
  8. FDConnection1.StartTransaction;
  9. with MyFdq do
  10. begin
  11. SQL.Add('insert into top_user(top_name,top_pwd,top_open_time) values (''a'',''a'',''1900-01-01 00:00:00'');');
  12. //SQL.Add('insert into top_user(top_name,top_pwd,top_open_time) values (''a'',''a'',''1900-01-01 00:00:00'');');
  13. //SQL.Add('insert into top_user(top_name,top_pwd,top_open_time) values (''a'',''a'',''1900-01-01 00:00:00'');');
  14. ExecSQL;
  15. end;
  16. FDConnection1.Commit;
  17. finally
  18. MyFdq.Free;
  19. end;
  20. end;
  21.  
  22. procedure TForm1.出错Click(Sender: TObject);
  23. var
  24. MyFdq: TFDQuery;
  25. begin
  26. MyFdq := TFDQuery.Create(nil);
  27. try
  28. MyFdq.Connection := FDConnection1;
  29. try
  30. FDConnection1.StartTransaction;
  31. with MyFdq do
  32. begin
  33. SQL.Add('insert into top_user(2top_name,top_pwd,top_open_time) values (''a'',''a'',''1900-01-01 00:00:00'');');
  34. //SQL.Add('insert into top_user(top_name,top_pwd,top_open_time) values (''a'',''a'',''1900-01-01 00:00:00'');');
  35. //SQL.Add('insert into top_user(top_name,top_pwd,top_open_time) values (''a'',''a'',''1900-01-01 00:00:00'');');
  36. ExecSQL;
  37. end;
  38. FDConnection1.Commit;
  39. except
  40. //FDConnection1.Rollback;
  41. end;
  42.  
  43. finally
  44. MyFdq.Free;
  45. end;
  46. end;

4.事务的正确使用方法:

  1. ADOConnection1.BeginTrans; //开始事务
  2. try
  3. with ADOCommand1 do
  4. begin
  5. Connection:=ADOConnection1;
  6. commandtext:='update [country] set [population]=10000 where [name]=''Venezuela''';//正确的SQL语句
  7. Execute;
  8. CommandText:='Wrong SQL Command';//错误的SQL
  9. Execute;
  10. ADOConnection1.CommitTrans; //提交事务
  11. end;
  12. except
  13. on E: Exception do
  14. begin
  15. ADOConnection1.RollbackTrans; //如有异常,事务回滚
  16. ShowMessage(E.Message);
  17. end
  18. end;
  19. end;

FDConnection的事务测试讲解。。的更多相关文章

  1. MYSQL 事务测试

    mysql 事务测试 创建张表 lock1 增加字段 id,name . 增加两条记录 1,a 2,b 启动第一个会话 BEGIN; update lock1 set name='c' where i ...

  2. mysql事务测试

    mysql事务测试 打开mysql的命令行,将自动提交事务给关闭 --查看是否是自动提交 1表示开启,0表示关闭 select @@autocommit; --设置关闭 set autocommit ...

  3. fio性能测试-环境搭建,功能介绍,测试讲解

    fio性能测试-环境搭建,功能介绍,测试讲解 Fio介绍:FIO(Flexible I/O Tester)是一个用于测试磁盘.文件系统.块设备和网络设备性能的工具.它可以模拟不同类型的I/O负载,包括 ...

  4. oracle 事务测试

    此文章是根据官方改变 模拟帐户转账流程 1.JOHN帐户扣除-DAVID帐户增加-记录日志-事务提交 三个操作必须全部完成此事务才完成,否则失败 创建帐户余额表自增字段自增序列:    ; 创建支票表 ...

  5. SpringTest 使用说明 -构建无污染纯绿色事务测试框架 (记录用)

    @ContextConfiguration({"classpath:applicationContext.xml","classpath:spring/buyer/app ...

  6. springboot 与 mybatis 中事务特性讲解

    1 MyBatis自动参与到 spring 事务管理中,无需额外配置,只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源与 DataSourceTrans ...

  7. Spring编程式和声明式事务实例讲解

    Java面试通关手册(Java学习指南):https://github.com/Snailclimb/Java_Guide 历史回顾: 可能是最漂亮的Spring事务管理详解 Spring事务管理 S ...

  8. 多测试讲解_009肖sirRF自动化框架安装教程

    robot framework:自动化测试框架 Python3.7 RIDE(可视化界面).  Wxpython  pip(在线下载) . setuptools(在线安装) . 第三方库 第三方库:s ...

  9. transaction 用tx事务 测试时 报错:Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/mvc]

    Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/sc ...

  10. 【SpringBoot】数据库操作之整合Mybaties和事务讲解

    ========================8.数据库操作之整合Mybaties和事务讲解 ================================ 1.SpringBoot2.x持久化数 ...

随机推荐

  1. channel 是怎么走上死锁这条路的

    本篇文章接着 hello world 的并发实现一文介绍 Go 的 channel 类型,同时进一步介绍 channel 的几种死锁情况,这些都是代码中很容易遇到的,要重点摘出来讲,防止一不留神程序就 ...

  2. Java标签在循环中的使用

    定义 标签,类似--label1: 放在循环外部,用于内部多重循环语句的跳出 例子 public static void main(String[] args) { Scanner sc = new ...

  3. PR 调整时间线宽度

    1.问题 这里的宽度太小,不好进行下一步的调整 2.解决方法 方法一 按下=可以放宽 按下-(=左边的那个键)可以缩小宽度 方法二 拖动下方的滑动条即可 方法三 按住ALT+滚轮,即可调节

  4. [转帖]小米Redis的K8s容器化部署实践

    https://juejin.cn/post/6844904196924276743     背景 Why K8S How K8s Why Proxy Proxy带来的问题 K8s带来的好处 遇到的问 ...

  5. Harbor的逻辑备份与学习

    Harbor的逻辑备份与学习 背景 一直想处理一下一个有网络冲突的Harbor镜像服务器 但是因为网络层自己水平一直是不是非常自信 加上Harbor容器使用的compose的玩法, 自己不敢直接处理. ...

  6. [转帖]Oracle客户端与Oracle数据库兼容矩阵

    https://www.cnblogs.com/kerrycode/p/17666025.html Oracle客户端与Oracle数据库之间是有兼容支持关系的,有些低版本的Oracle Client ...

  7. [转帖]Mysql 常用命令行,持续补充

    https://www.cnblogs.com/wzj1223/p/13152446.html 1.常用命令行 # 登录Mysql mysql -uroot -proot # 查看所有数据库 show ...

  8. 华城金锐申威SW64服务器重装过程

    华城金锐申威SW64服务器重装过程 背景 这边为了进行兼容性验证新进了两套申威的服务器. 一台机器带着安装好的操作系统了. 但是另外一套没有对应的系统. 端午期间想着趁着上班的人少, 加吧给处理一下. ...

  9. [转帖]细说Redis监控和告警

    https://blog.csdn.net/sD7O95O/article/details/78096956 对于任何应用服务和组件,都需要一套完善可靠谱监控方案.尤其redis这类敏感的纯内存.高并 ...

  10. [转帖]ubuntu下配置iptables、ufw端口转发

    iptables 端口转发(CentOS) 注意:一来一去 在中转服务器操作 iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT -- ...