假定银行的的应用程序,用户试图将其支票账户的钱转到公司储蓄账户中,假定转出这一步顺利完成,第二步是将转出的钱存入到储蓄账户时,系统提示该账户出现故障,不能将钱存入了。糟糕,问题出现了,支票账户的结余不对了,因为您已经将钱转出了。
幸好,数据库中提供了“事务”,如果使用了“事务”,就无需担心上述问题,发生意外时,可以撤消前面的操作。
“事务”允许对数据库中“单条记录的更新”组织起来,形成单一的工作逻辑单元。在执行更新时要么全部成功,要么全部失败。因此,“事务”可以被看作是“原子”的操作。而“原子”则意味着不能够再被分割。
“事务”有三种基本操作:开始事务管理、取消事务管理、结束提交事务。在搭建之星中“事务”的使用非常简单,ADO数据库连接构件的方法中,关于“事务”提供了四种方法,分别是:开始事务管理、结束提交事务、取消事务修改、是否在事务管理内。
开始事务管理:标志一个事务的开始。
结束提交事务:在事务执行期间,确认所有对数据库的更新。
取消事务修改:返回数据库开始执行事务之前的状态。
是否在事务管理内:判断一个事务是否处于激活状态。如果“是”返回布尔值“真”,否则返回布尔值“假”。
下面我们以“工资管理系统”为例帮助读者理解这个概念。假设到了年底必须为每一名职工增加固定的工龄工资,如果在操作期间出现了错误,需要撤消前面的改动,我们就可以把“增长每个职工的工龄工资”当做一步单独的事务管理,总体性的进行操作,或总体性的忽视错误。
在项目窗口中,放置三个普通按钮、浏览编辑网格、ADO数据库连接、ADO数据表、数据源、记录循环等构件。项目窗口构件摆放及属性设置,如图1所示
此主题相关图片如下:

属性设置:基本数据库连接,不再赘述。ADO数据表——操作数据——甲字段名称属性设为“工龄工资”;“撤消”和“确认”按钮的允许属性设为“假”,由于“事务”一个整体不可分割,这样设置以避免按错顺序。
当单击“开始”按钮时,事件设置如图2所示
此主题相关图片如下:

解释:第一步,必须执行方法“开始事务管理”,以启动事务管理功能。第二步,开始记录循环以修改工龄工资。
在循环过程中,事件设置如图3所示
此主题相关图片如下:

解释:假定每年工龄工资的增加值为“100”;特别注意的是最后一条命令提交,由于现在处于“事务”中,并没有真正提交到“数据库表文件”中,而是提交到“数据缓存区”中了。
当单击“撤消”按钮时,事件设置如图4所示
此主题相关图片如下:

解释;第一步,执行“取消事务修改”后,这样总体性的取消了修改内容。第二步,主要启动刷新数据表作用,以便看到取消事务后的结果。
当单击“确认”按钮时,事件设置如图5所示
此主题相关图片如下:

解释:执行“结束提交事务”,将把事务处理的结果提交到数据库表文件中。
实例执行“撤消”操作前后的效果,如图6所示。
此主题相关图片如下:
