1、第 10章 数据库高级应用技术本章主要内容: 事务的概念 Delphi中的事务控制 Delphi中使用存储过程 主从结构的数据库应用程序10.1 事务处理10.1.1 事务的概念当用 Delphi创建数据库应用时, Delphi提供了用于所有数据库访问的事务控制。一个事务( transaction)是指在一个数据库中的一张或多张表上执行的一组相关动作,在这一组动作被永久提交前,必须成功完成所有动作,如果该组动作中有一个动作操作失败,那么所有动作就会被取消。 10.1.2 事务的特性事务具有不可分性、一致性、隔离性和持续性。 1. 不可分性事务是一个工作单元,是在应用程序的 BEGIN TRAN
2、SACTION 和 END TRANSACTION 语句之间发生一系列操作。事务只执行一次,且是不可分的,即完成全部工作或者不做任何工作。10.1 事务处理2. 一致性事务是一个完整的单元,因为它保持数据的一致性,将数据从一种数据一致状态转换到另一种数据一致状态。3. 隔离性事务是一个隔离单元,允许可并行执行的事务表现得像是在系统中运行的唯一事务。隔离性要求即使同时可能有其他事务正在运行,每个事务也像是操作数据存储区的唯一事务一样。事务应从不查看其他事务的中间阶段。4. 持续性事务也是一个恢复单元。如果事务成功,则即使在提交后计算机立即崩溃,系统仍将保证更新该事务。专用记录允许系统的重新启动过
3、程完成未完成的操作,以使事务可持续。10.1 事务处理10.1.3 Delphi中事务控制的方式1. Delphi中事务控制的方式Delphi中事务控制的方式有两种:一种是隐式事务控制,一种是显式事务控制。在默认情况下, Delphi通过 ADO为应用程序提供隐式事务控制。当应用程序处于隐式事务控制时, Delphi为数据集中的每个记录的写操作进行隐式事务控制。它提交每一个独立的写操作,如 Post和 AppendRecord。有两种显式控制事务方式:一种是使用 Delphi组件(如 TADOConnection)所提供的方法和属性进行事务控制。另一种是直接发送 SQL命令到支持事务的数据库服
4、务器进行事务控制。许多数据库都提供自己的事务处理方式。10.1 事务处理2. 使用 TADOConnection控制事务( 1) 事务处理过程通常事务处理有以下这样一个过程:BeginTrans; /开始一个新事务处理try /捕捉异常. 数据库更新操作(如 delete、 insert、 update等).CommitTrans;/操作成功,提交事务except /异常处理RollBackTrans;/操作失败,回退事务end;10.1 事务处理( 2) 开始一个事务开始一个事务使用 BeginTrans方法。当开始一个事务时,后来的所有读写数据库的操作都发生在那次事务的环境中,直到事务被明
5、确地终止或提交了新事务。 使用例句:Level := ADOConnection1.BeginTrans;BeginTrans方法返回该事务的嵌套级别。 ( 3) 提交一个事务为了做永久性修改,事务完成后必须使用 CommitTrans方法提交。 例如,下列语句将终止在上例中开始的事务:ADOConnection1.CommitTrans( 4) 回退一个事务为了取消对数据库的修改,必须用 RollbackTrans方法回退一个事务。10.1 事务处理例如:下列语句将回退一个事务:ADOConnection1.RollbackTrans;( 5) 判断是否正在处理事务判断是否正在处理事务,可以
6、通过 InTransaction属性。例:IF ADOConnection1.InTransaction THENADOConnection1.RollbackTrans;( 6) 使用 IsolationLevel属性IsolationLevel属性描述 TADOConnection组件事务的独立级别,事务的独立级别决定了事务与其它作用于相同表的事务是如何相互作用的。10.1 事务处理10.1.4 事务处理的实例下面以一个简单的例子说明事务的处理过程。【 例 10-1】Delphi对 TDBGrid组件使用的是默认的隐含事务控制,在表格修改一条记录后,当记录指针移动以后,数据就被写入到数据库
7、中了。若表格很大、修改项目又很多时,如果中途想要放弃所作的修改,很难使表格恢复原样。这时就可以使用事务处理来解决这样的问题。编程实现对数据库dbdemos.mdb的表 employee的事务操作。【 实现步骤 】1. 首先建立应用程序。2. 定制窗体10.1 事务处理图 10-1 程序设计界面10.1 事务处理组 件名 属 性 属 性 值 说 明ADOConnection1 ConnectionString 使用 ConnectionString设 置 对话 框 设 置该属性, 连 接到数据 库 dbdemos.mdb。ADOTable1 Connection ADOConnection1 指
8、定使用的数据 连 接 组 件。TableName employee 指定打开的数据表名Active True 打开数据集。DataSource1 DataSet ADOTable1 指定使用的数据集。DBGrid1 DataSource DataSource1 为 表格指定数据源。ReadOnly True 表格 设 置 为 只 读btnBegin Caption 开始事 务Enable True 允 许 使用按 钮btnCommit Caption 提交事 务Enable False 禁止使用按 钮btnRollBack Caption 回退事 务Enable False 禁止使用按 钮btnClose Caption 关 闭Enable True 允 许 使用按 钮表 10-2 各组件属性设置