• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphi 事务处理SQL语句

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

方法一(利用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;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【matlab】学习笔记 3 函数编写发布时间:2022-07-18
下一篇:
Matlab中用内建函数代替for循环发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap