数据集的缓冲模式(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. 阻塞队列--LinkedBlockingQueue

    什么叫线程安全?线程安全就是每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的. 线程安全就是说多线程访问同一代码,不会产生不确定的结果. 并行和并发区别1.并行是指两者同时 ...

  2. UEditor编辑器上传图片开发流程

    在ueditor目录下找到uedior.config.js,找到如下三行: ,imageUrl: "<%=path %>/controller.json" //图片上传 ...

  3. redis 内存

    ziplist:http://blog.csdn.net/benbendy1984/article/details/7796956 redis 内部存储结构:http://www.searchtb.c ...

  4. paip.语义分析--单字动词表.txt

    paip.语义分析--单字动词表.txt 排除重复  select * from t where word in (SELECT word from t_a)  or   word in (SELEC ...

  5. iOS开发——高级技术&通讯录服务

    通讯录服务 AddressBook iOS中带有一 个Contacts应用程序来管理联系人,但是有些时候我们希望自己的应用能够访问或者修改这些信息,这个时候就要用到 AddressBook.frame ...

  6. iOS开发- 三步快速集成社交化分享工具ShareSDK

    1.前言 作为现在App里必不可少的用户分享需要,社交化分享显然是我们开发app里较为常用的. 最近因为公司App有社交化分享的需要,就特此研究了会,拿出来与大家分享. 想要集成社交会分享,我们可以使 ...

  7. java基础学习总结——java环境变量配置

    前言 学习java的第一步就要搭建java的学习环境,首先是要安装JDK,JDK安装好之后,还需要在电脑上配置"JAVA_HOME”."path”."classpath& ...

  8. cygintl-8.dll 是cygwin的哪个包?|Windows查看man手册的方法-cygwin

    答案是: 是 Release\gettext\libintl8\libintl8-0.18.1.1-2.tar.bz2 应该是gettext 项目的一部分吧. 下载地址 可以直接从 cygwin的镜像 ...

  9. Revit中如何将视图过滤器传递到其它项目

    在Revit中采用过滤器控制视图显示,利用过滤器给图元着色,利用过滤器控制视图显示或隐藏等,那么,在不同的项目中是否每次都要设置相同的过滤器,其实,Revit提供了这么一种在不同项目传递信息的方式,在 ...

  10. C# 修改webbrowser 的 useragent

    Also, there is a refresh option in the function (according to MSDN). It worked well for me (you shou ...