数据集的缓冲模式(Cached mode)是将数据库服务器的数据缓冲在客户端内存中进行处理,不再依赖服务器。只有当数据需要提交数据库服务器进行保存时,才将变更数据一次性提交数据库服务器。 数据集缓冲模式的最大优点是减少了对数据库服务器的资源消耗,甚至可以在网络断开的情况下,对数据进行处理然后在网络连接后,提交数据库保存。与传统的2层架构数据库软件相比,有巨大的抗网络故障能力。包PB在内的绝大多数2层架构软件,一旦网络临时中断,导致数据库连接中断,客户端所有未能保存的修改将被丢弃,而在ODAC中这个问题不再存在。 开启数据集缓冲模式非常简单,即设置数据集的CachedUpdates属性为True,如下: //启动本地缓存模式 TDataSet.CachedUpdates := True; 开启数据集的缓冲模式后,需要代码显性进行以下操作: 1、查看数据集是否有数据变动,当数据集的UpdatesPending属性为True时表示有数据变动。 2、查看数据集当前记录的变动状态,读取数据集的UpdateStatus属性, 3、将数据集缓冲区中的数据提交数据库保存,调用方法ApplyUpdates,在调用该方法前,需要代码显性调用数据库连接组件的事务开启函数,并在提交成功后提交事务,或提交失败后回滚事务。 4、当ApplyUpdates成功后,还需要调用方法CommitUpdates清除缓冲区。这一点与TClientDataSet不同,需要手工清除缓冲区。 5、当ApplyUpdates失败后,需要调用方法RestoreUpdates恢复已经提交的数据状态标志,以便下一次能够正确提交。 6、使用OnUpdateRecord事件来手工处理需要更新的数据,一旦填写了该事件的代码,ODAC将不再自动处理记录,这一点与TDataSetProvider的事件处理不同。 7、使用OnUpdateError事件来处理更新过程中的错误。 典型代码如下: procedure ApplyButtonClick(Sender: TObject); begin with MyQuery do begin Session.StartTransaction; //启动数据库事务 try ApplyUpdates; //修改数据提交数据库 Session.Commit; //没有报错则提交数据库事务 CommitUpdates; //成功提交后清空缓冲区 except RestoreUpdates; //提交失败,恢复缓冲区数据更新标志 Session.Rollback;//回滚数据库事务 raise; //重新触发异常,显示错误信息 end; end; end; |
|