数据集的缓冲模式(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;

ODAC(V9.5.15) 学习笔记(十八) 数据集缓冲模式的更多相关文章

  1. ODAC(V9.5.15) 学习笔记(十七)主从模式

    主从模式(Master/Detail mode)是指建立主表和从表关系的多个数据集集合模式. 1. 关系设置 要设置主从模式,必须有一个主表数据集(TDataSet)和一个从表数据集(TDataSet ...

  2. ODAC(V9.5.15) 学习笔记(八)TOraScript

    名称 类型 说明 DataSet 如果脚本中返回了数据结果,则通过该数据集进行获取 Delimiter string 脚本语句之间的分隔符 EndLine Integer 脚本中最后一行的行号 End ...

  3. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  4. ODAC(V9.5.15) 学习笔记(十六)直接访问模式

    直接访问模式(Direct mode)是ODAC最大的特色之一,即不需要安装Oracle客户端,ODAC越过了OCI(Oracle Call Interface ),使用TCP/IP协议就可以直接与O ...

  5. ODAC(V9.5.15) 学习笔记(一)总论

    一直在使用ODAC做开发,没时间仔细研究一下,目前采用的是3层结构,ODAC+TDataSetProvider+TClientDataSet做数据处理,也没有多大问题.下一步要开发B/S的程序了,打算 ...

  6. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(4)

    6.Options TCustomDADataSet的选择项为TDADataSetOptions,其成员介绍如下表 : 名称 类型 说明 TDADataSetOptions AutoPrepare B ...

  7. ODAC(V9.5.15) 学习笔记(四)TMemDataSet (1)

    所有的数据集类组件都是从TMemDataSet继承下来的,该组件实现了内存中对数据的管理,其主要的属性.方法和事件如下. 1.数据更新 名称 类型 说明 CachedUpdates Boolean 数 ...

  8. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

  9. ODAC (V9.5.15) 学习笔记(二十)大数据量获取处理

    ODAC获取数据的效率比较高,在Web程序中希望能够更快获取第一页的数据时,可以有几种方式: 1.在数据库中进行分页处理: 2.获取所有数据,只是快速返回第一页数据. 第一种方案对应用服务器资源消耗最 ...

随机推荐

  1. 数据库优化实践【TSQL篇】

    在前面我们介绍了如何正确使用索引,调整索引是见效最快的性能调优方法,但一般而言,调整索引只会提高查询性能.除此之外,我们还可以调整数据访问代码和TSQL,本文就介绍如何以最优的方法重构数据访问代码和T ...

  2. 那些年我们一起追过的Linux命令

    1. cd - 作用:返回上次的目录,类似于Windows的后退功能: 2. man ascii 作用:打印出八进制.十六进制和十进制的ASCII码表:(再也不用Google ASCII表啦) 3. ...

  3. 安卓-PC-Arduino3方通信实现

    请仔细理解相关参数,如端口设置.IP设置.COM口设置......等等.....不要盲目COPY.....这涉及手机.电脑和一个单片机,其中一台电脑作为服务器并与单片机相连,负责通过网络与客户端通信( ...

  4. [翻译]-马丁·福勒-page对象

    译者注:这篇文章翻译自马丁·福勒(Martin Flower,对,没错,就是软件教父)官网的一篇文章,原文出处在文底.如果你正在做WEB自动化测试,那么我强烈推荐你看这篇文章.另外透露Martin F ...

  5. 使用SharePoint CSOM 编写高效的程序

    上一篇文章中简单的介绍了使用CSOM进行编程.今天主要讲一下CSOM使用中一些小技巧,可以让你的程序运行的更快. 单独加载某些属性 在上文中的例子,需要返回Web对象信息的时候,我们使用了如下的代码: ...

  6. 通俗易懂的深入理解js闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...

  7. [BTS] The value "" for the property InboundId is invalid

    Microsoft.ServiceModel.Channels.Common.MetadataException: Retrieval of Operation Metadata has failed ...

  8. [BTS] Error biztalk arguments null exception string reference not set to an instance of a string. parameter name

    biztalk arguments null exception string reference not set to an instance of a string. parameter name ...

  9. java web面试题,收集

    java面试题: http://www.codeceo.com/article/java-interview-question.html(很多题都很废) http://www.php100.com/h ...

  10. crossplatform---Nodejs in Visual Studio Code 07.学习Oracle

    1.开始 Node.js:https://nodejs.org OracleDB: https://github.com/oracle/node-oracledb/blob/master/INSTAL ...