ODAC(V9.5.15) 学习笔记(十八) 数据集缓冲模式
数据集的缓冲模式(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) 学习笔记(十八) 数据集缓冲模式的更多相关文章
- ODAC(V9.5.15) 学习笔记(十七)主从模式
主从模式(Master/Detail mode)是指建立主表和从表关系的多个数据集集合模式. 1. 关系设置 要设置主从模式,必须有一个主表数据集(TDataSet)和一个从表数据集(TDataSet ...
- ODAC(V9.5.15) 学习笔记(八)TOraScript
名称 类型 说明 DataSet 如果脚本中返回了数据结果,则通过该数据集进行获取 Delimiter string 脚本语句之间的分隔符 EndLine Integer 脚本中最后一行的行号 End ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- ODAC(V9.5.15) 学习笔记(十六)直接访问模式
直接访问模式(Direct mode)是ODAC最大的特色之一,即不需要安装Oracle客户端,ODAC越过了OCI(Oracle Call Interface ),使用TCP/IP协议就可以直接与O ...
- ODAC(V9.5.15) 学习笔记(一)总论
一直在使用ODAC做开发,没时间仔细研究一下,目前采用的是3层结构,ODAC+TDataSetProvider+TClientDataSet做数据处理,也没有多大问题.下一步要开发B/S的程序了,打算 ...
- ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(4)
6.Options TCustomDADataSet的选择项为TDADataSetOptions,其成员介绍如下表 : 名称 类型 说明 TDADataSetOptions AutoPrepare B ...
- ODAC(V9.5.15) 学习笔记(四)TMemDataSet (1)
所有的数据集类组件都是从TMemDataSet继承下来的,该组件实现了内存中对数据的管理,其主要的属性.方法和事件如下. 1.数据更新 名称 类型 说明 CachedUpdates Boolean 数 ...
- (C/C++学习笔记) 十八. 继承和多态
十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...
- ODAC (V9.5.15) 学习笔记(二十)大数据量获取处理
ODAC获取数据的效率比较高,在Web程序中希望能够更快获取第一页的数据时,可以有几种方式: 1.在数据库中进行分页处理: 2.获取所有数据,只是快速返回第一页数据. 第一种方案对应用服务器资源消耗最 ...
随机推荐
- WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部曲:(一)WinDbg 命令手册> <WinDb ...
- paip.解决问题Unable to access jarfile E:\resin-4.0.22\lib\resin.jar
paip.解决问题Unable to access jarfile E:\resin-4.0.22\lib\resin.jar 作者Attilax 艾龙, EMAIL:1466519819@qq. ...
- iOS开发——高级技术&内购服务
内购服务 大家都知道做iOS开发本身的收入有三种来源:出售应用.内购和广告.国内用户通常很少直接 购买应用,因此对于开发者而言(特别是个人开发者),内购和广告收入就成了主要的收入来源.内购营销模式,通 ...
- hdu 2955 01背包
http://acm.hdu.edu.cn/showproblem.php?pid=2955 如果认为:1-P是背包的容量,n是物品的个数,sum是所有物品的总价值,条件就是装入背包的物品的体积和不能 ...
- jquery实现简单的Tab切换菜单
实现tab切换的主要html代码: <div class="container"> <ul class="tabs"> <li c ...
- Android ImageView圆形头像
转载自:http://m.oschina.net/blog/321024 Android ImageView圆形头像 图片完全解析 我们在做项目的时候会用到圆形的图片,比如用户头像,类似QQ.用户在用 ...
- [推荐]DataX、DbSync和Timetunnel学习贴
[推荐]DataX.DbSync和Timetunnel学习贴 一 DataX 二 DbSync 三 Timetunnel TimeTunnel :http://code.taobao.org/p/T ...
- Activiti 部署流程定义及相关的表(classpath部署、zip部署)
package com.mycom.processDefinition; import org.activiti.engine.ProcessEngine; import org.activiti.e ...
- Javascript:常用函数封装
//cookie function setCookie(name, value, iDay) { if(iDay!==false) { var oDate=new Date(); oDate.setD ...
- 搭建windows的solr6服务器
准备工作: 目前最新版本6.0.下载solr 6.0:Solr6.0下载 JDK8 下载jdk1.8:jdk1.8[solr6.0是基于jdk8开发的] tomcat8.0 下载:tomcat8 ## ...