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;

时间: 2024-10-26 22:44:24

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

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

主从模式(Master/Detail mode)是指建立主表和从表关系的多个数据集集合模式. 1. 关系设置 要设置主从模式,必须有一个主表数据集(TDataSet)和一个从表数据集(TDataSet),且主表数据集关联一个数据源组件(TDataSource),并将从表数据集的MasterSource指向该数据源组件,最后设置关联字段.设置主从表之间关联字段有2种形式: 1.在从表数据集的SQL中设置外键,通过参数指向主表的字段,如: //主表数据集 Master := TOraQuery.Cr

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

名称 类型 说明 DataSet 如果脚本中返回了数据结果,则通过该数据集进行获取 Delimiter string 脚本语句之间的分隔符 EndLine Integer 脚本中最后一行的行号 EndOffset Integer 脚本中最后一行的偏移量 EndPos Integer 脚本中最后一个字符的位置 StartLine Integer 脚本中第一行的行号 StartOffset Integer 脚本中第一行的偏移量 StartPos Integer 脚本中第一个字符的位置 SQL 脚本S

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

直接访问模式(Direct mode)是ODAC最大的特色之一,即不需要安装Oracle客户端,ODAC越过了OCI(Oracle Call Interface ),使用TCP/IP协议就可以直接与Oracle服务器通信,使得ODAC程序的部署非常方便,性能也非常高. 要设置直接访问模式,只需要将连接组件的选择项Direct设为True Session.Options.Direct := True; 其他的参数设置同正常模式.使用直接访问模式的优势是不需要安装Oracle客户端,部署更方便,资源

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

一直在使用ODAC做开发,没时间仔细研究一下,目前采用的是3层结构,ODAC+TDataSetProvider+TClientDataSet做数据处理,也没有多大问题.下一步要开发B/S的程序了,打算用ODAC+uniGUI来完成,数据处理上其实可以按照2层结构,相比3层结构要简单些,性能预计也要好些.所以需要仔细研究一下ODAC的功能.岁数大了,做个笔记免得忘了.以下大部分材料来自于ODAC的帮助文件,E文不是太好,只能大概了解意思,难免有错,阅读和使用时需要进一步核实. 1.1.  简介 O

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

6.Options TCustomDADataSet的选择项为TDADataSetOptions,其成员介绍如下表 : 名称 类型 说明 TDADataSetOptions AutoPrepare Boolean 执行SQL前是否自动执行Prepare CacheCalcFields Boolean 缓冲计算字段(TField.Calculated)和Lookup字段(Tfield.Lookup),能有效提高数据集访问速度,但是也会导致内存使用增加 CompressBlobMode Boolea

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

所有的数据集类组件都是从TMemDataSet继承下来的,该组件实现了内存中对数据的管理,其主要的属性.方法和事件如下. 1.数据更新 名称 类型 说明 CachedUpdates Boolean 数据集是否采用缓冲模式 ApplyUpdates 将缓冲区中未提交的数据提交数据库,但不执行数据库的事务操作.此时缓冲区数据仍然存在,UpdateStatus状态处于修改状态,需要调用CommitUpdates来清除缓存中的数据,并将状态还原成非修改状态.ApplyUpdates没有放在Try Exc

学习笔记十八

vim进入编辑模式 从一般模式进入编辑模式,只需按i.I.a.A.o.O.r和R中的某一个键即可,当进入编辑模式时,在屏幕的尾行显示INSERT字样(若支持中文,则显示插入).按Esc键,从编辑模式回到一般模式. vim命令模式 在一般模式下,输入:或者/即可进入命令模式. :nohl不高亮显示 :x与:wq类似,如果在更改文件之后操作,两者效果一样:如果打开文件,没有任何操作,:wq会更改mtime,但是:x不会. vim扩展 文件加密 Linux用vim/vi给文件加密和解密 利用 vim/

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

ODAC获取数据的效率比较高,在Web程序中希望能够更快获取第一页的数据时,可以有几种方式: 1.在数据库中进行分页处理: 2.获取所有数据,只是快速返回第一页数据. 第一种方案对应用服务器资源消耗最小,对数据库消耗略大,在客户需要对全数据进行灵活过滤.查找.统计时就有些不够用了,另外对耗时较大的SQL查询就不如第二种方案速度快,对数据库压力也要大些,并且需要编写程序来完成.在Delphi下我考虑使用第二种方案,尤其是在使用uniGUI+ODAC配合使用时.第二种方案对应于服务器内存压力略大,并

ODAC(V9.5.15) 学习笔记(十九)主键值自动生成

ODAC支持通过Oracle的序列来自动生成表的主键功能.这个过程允许在客户端自动完成,不需要过多代码.这个对一些要求自动增长字段做主键的场合非常有用.其实现步骤为: 1.数据库必须先建立生成主键的序列. 2.设置数据集的KeySequence属性,指向数据库中的序列. 3.设置数据集的SequenceMode属性,明确是在新增时还是修改时生成序列值,并赋值给数据集的主键. 4.设置数据集的KeyFields属性,指向表的关键字段.如果KeyFields中有多个字段时,序列值会自动赋值给第一个字