delphi 事务处理SQL语句

2024-09-06 14:38

本文主要是介绍delphi 事务处理SQL语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方法一(利用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的LockType
 今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是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语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142289

相关文章

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL磁盘空间不足问题解决

《MySQL磁盘空间不足问题解决》本文介绍查看空间使用情况的方式,以及各种空间问题的原因和解决方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录查看空间使用情况Binlog日志文件占用过多表上的索引太多导致空间不足大字段导致空间不足表空间碎片太多导致空间不足临时表空间