方法一(利用adoconnection.exe(sqlstate)):

adoconnection1.begintrans;//开始事务
try
 adoconnection1.execute(sqlstr1);
 adoconnection1.execute(sqlstr2);
 ...
 adoconnection1.execute(sqlstrN);
 adoconnection1.commitrans;//提交事务
 showmessage('操作成功');
except
 adoconnection1.rollbacktrans;//事务回滚
 showmessage('操作失败');
end;
//以上采取事务处理只能用在有支持事务处理的数据库中,适用于对数据记录的修改,插入,删除等操作(只有极少几条SQL语句无事务处理),它的好处就是try..except内的SQL语句全部执行成功时,才会提交到数据库中,不然就全部取消,即使是最后一条出错,出错前的也会被取消,这比较符合现实现求,如银行中的转账就必须用到事务处理!进销存管理/财务账等等都必须要用事务处理

方法二(在con的begintrans中写控件的数据提交):

ADO的事务处理例子(Delphi)

{1、批量数据更新时要将ADOQUERY.LOCKTYPE=ltBatchOptimistic ,然后调用UpdateBatch()更新数据;
2、当ADOQUERY.LOCKTYPE=ltOptimistic 时调用post更新数据(当dbgrid换行时也自动调用post提交数据)
引用一篇博文:
 今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是ADOQuery的一个小属性。

把控件DBGridEh的一列的checkbox设为true,将其绑定DataSourceA和DOQuery。用Button添加了一个事件,用来取消对checkbox的操作:ADOQuery.CancelBatch();可是只能取消最后一步的操作。检查了很长时间才发现在DBGridEh的DataSource的Dataset 下的LockType的属性设置问题,我设置成了:ItOptimistic    后来将此属性改为:ltBatchOptimistic 就可以了

在网上查了一下,有如下说法:

1.ADOQuery.Update;ADOQuery.Delete;不用设置属性.
2.locktype指定用户打开数据集时对数据集的锁定级别:
ltUnspecified 未指定锁定级别
ltReadOnly Read-only    只读
ltPessimistic 记录级别(该记录被编辑时其它用户不能用)
ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
ltBatchOptimistic      批量模式(使用缓存,进行批量提交)

ADOQuery的属性含义:

ltUnspecified          不特別指定
ltReadOnly          选出來的资料表只能读,无法写入
ltPessimistic         选出来的资料表可以写入,当改记录写入时会立刻写入并锁定
ltOptimistic          选出来的资料表可写入,当该记录表写入时不会立刻写入但会锁定,当执行updates时才正式写入改记录
ltBatchOptimistic          选出来的资料表可写入,当该记录写入时不会立刻写入但会锁定,当执行updates才正式整批写入该记录(可以修改多条整批update)}

 
ADOConnection1.BeginTrans;   //开始事务
try 
with ADOCommand1 do 
begin 
Connection:=ADOConnection1; 
commandtext:='update [country] set [population]=10000 where [name]=''Venezuela''';//正确的SQL语句 
Execute; 
CommandText:='Wrong SQL Command';//错误的SQL 
Execute; 
ADOConnection1.CommitTrans; //提交事务
end; 
except 
on E: Exception do 
begin 
ADOConnection1.RollbackTrans; //如有异常,事务回滚
ShowMessage(E.Message); 
end 
end; 
end;

delphi 事务处理SQL语句的更多相关文章

  1. delphi 中sql的语法规范

    1.引号配对:  这是在Delphi使用SQL语句时容易出错的地方,由于delphi规定在字符串中用两个西文的单引号“''”表示一个“'”,在拼装语句的时候就容易疏忽遗漏.  Delphi里有个函数Q ...

  2. 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例

    在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例 (2012-03-13 10:12:48) 转载▼   public ActionResu ...

  3. delphi中的sql语句中空格问题

    sql语句中的冒号 ‘’,在delphi中需要用四个冒号表示 ‘’‘’,delphi中的两个冒号只代表一个冒号

  4. delphi 中如何执行SqlParameter形式的SQL语句

    procedure TForm1.Button1Click(Sender: TObject); begin ADOConnection1.Open('); ADOQuery1.Close; ADOQu ...

  5. delphi连接sql server数据库,并根据sql语句查询出数据显示--初级

    需要用到四个组件,分别为: 1.ADOConnection1 设置Connectionstring属性(连接串),loginPrompt属性控制是否连接记住了密码: 2.ADOQuery1 设置Con ...

  6. Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!

    当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后, ...

  7. Delphi 与SQL编程

    Delphi 与SQL编程 SQL语言作为关系数据库管理系统中的一种通用的结构查询语言, 已经被众多的数据库管理系统所采用,如Oracle.Sybase.Informix等数据库管理系统,它们都支持S ...

  8. MYSQL 基本SQL语句

    复制表结构 CREATE TABLE 新表 SELECT * FROM 旧表 where 1=2 复制表结构和数据CREATE TABLE 新表 SELECT * FROM 旧表 查询重复数据: se ...

  9. SQL语句大全

    经典SQL语句大全(绝对的经典) 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份s ...

随机推荐

  1. # C语言假期学习笔记——6

    C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...

  2. 【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架

    Caliburn.Micro - Xaml made easy. web: https://github.com/Caliburn-Micro/Caliburn.Microdocument: http ...

  3. day6 RHCE

    17.创建一个脚本 在server0上创建一个名为/root/foo.sh的脚本,让其提供下列特性: 当运行/root/foo.sh redhat,输出fedora 当运行/root/foo.sh f ...

  4. CF833E Caramel Clouds

    题面 天上有$n$朵云,每朵云$i$会在时间$[l_i,r_i]$出现,你有$\text C$个糖果,你可以花费$c_i$个糖果让云$i$消失,同时需要保证你最多让两朵云消失.现在有$m$个独立的询问 ...

  5. centos7.4 防火墙设置

    1.关闭默认的firewall防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service ...

  6. MySQL授权root

    1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...

  7. scikit-learn API

    scikit-learn API 这是scikit-learn的类和函数参考.有关详细信息,请参阅完整的用户指南,因为类和功能原始规格可能不足以提供有关其用途的完整指南. sklearn.base:基 ...

  8. VIN码识别/车架号识别独家支持云识别

    VIN码(车架号)对于懂车的人来说并不陌生,不要小看这一串字符,从VIN码中可以读懂车辆的生产厂家.年代.车型.车身型式及代码.发动机代码及组装地点等信息. 一辆汽车的VIN码也是车辆的唯一身份证明, ...

  9. 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型

    人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...

  10. 数据库sql优化总结之1-百万级数据库优化方案+案例分析

    项目背景 有三张百万级数据表 知识点表(ex_subject_point)9,316条数据 试题表(ex_question_junior)2,159,519条数据 有45个字段 知识点试题关系表(ex ...