数据离线模式(Disconnected Mode)是指数据库只有在需要的时候才连接,数据的处理放在客户端内存缓冲区中完成。这样做最大的好处是减少了网络资源依赖,对数据库服务器的资源开销和压力也减少。如果客户端需要经常反复地连接和关闭数据库连接,也可以采用ODAC的连接池模式。

要实现数据离线模式,需要完成以下几个步骤:

1、设置连接组件的选择项,将离线模式设为True,自动提交属性保持缺省值True,如下:

TCustomDAConnection.Options.DisconnectedMode := True;

TCustomDAConnection. AutoCommit := True;

此时数据库连接会在数据集进行数据获取、SQL执行等动作时自动开启,并在执行完成后自动关闭,所做的数据变更操作自动提交事务。

2、开启连接组件的连接池功能,将Pooling设置为True,如下:

TCustomDAConnection.Pooling := True;

3、可以设置数据集的参数,开启本地缓存,包括:

//启动本地缓存模式

TDataSet.CachedUpdates := True;

//一次性获取全部数据,对数据量大的表格慎用

TCustomDADataSet.FetchAll := True;

//开启主从关系的本地缓冲

TCustomDADataSet.Options.LocalMasterDetail := True;

//开启网络自动连接功能

TCustomDAConnection.Options.LocalFailover := True;

//批量提交数大于缺省值1,减少网络通信次数

TCustomDADataSet.Options.UpdateBatchSize := 10;

需要说明的有几点:

1、数据集的FetchAll为True时,会一次性获取全部数据,然后自动关闭连接,对已数据量少的表可以这样做,但是对于大数据量的表要慎重,或消耗较长时间。当FetchAll为False时,如果数据没有全部获取到本地,则连接不会关闭,连接会持续到所有数据均获取到本地后才自动关闭。

2、如果数据库连接手动显性开启了事务,则连接不会在SQL执行后自动关闭,而是要等待手动显性事务提交或回滚后再关闭。

3、当一个Query类控件手动显性执行了Prepare命令,连接不会在SQL执行后自动关闭,而是要等待手动显性UnPrepare命令后或SQL变动后再关闭。

4、如果数据集采用了Lock模式锁定当前记录(TCustomDADataSet.LockMode = lmLockImmediate),则连接会在用户编辑记录期间一直开启,直到用户Post或Cancel记录编辑。

以上2、3、4说明:凡是显性手动动作将影响数据库连接的自动关闭功能,需要手动显性反向操作后,数据库连接才会自动关闭。

5、如果数据库连接的网络不稳定,可以开启网络自动连接功能(LocalFailover := True),如果网络很稳定则可以不要。

6、在数据提交数据库服务器时,可以通过设置批量处理的数量(UpdateBatchSize := 10),让客户端一次性提交多个处理,减少网络通信次数,从而减少网络风险,对网络不稳定的情况有用。

ODAC(V9.5.15) 学习笔记(十五)数据离线模式的更多相关文章

  1. ODAC(V9.5.15) 学习笔记(五)TSmartQuery

    TSmartQuery是相对于TOraQuery更简洁的数据集,其成员如下 名称 类型 说明 Expand Boolean 缺省为False,如果为True,则表示无论SQL中罗列的字段是哪些,数据集 ...

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

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

  3. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

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

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

  5. ODAC(V9.5.15) 学习笔记(三)TOraSession(3)

    3. 选项 TOraSession的Options有如下内容 名称 类型 说明 CharLength TCharLength 单个字符的长度,缺省0,表示从服务器获取对应的字符集中单个字符长度 Cha ...

  6. ODAC(V9.5.15) 学习笔记(三)TOraSession(1)

    1. 连接相关 名称 类型 说明 ConnectDialog 执行连接对话框控件 Connected Boolean 连接状态,通过函数Connect和Disconnect连接或关闭数据库连接,并触发 ...

  7. (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)

    一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...

  8. (C/C++学习笔记) 十五. 构造数据类型

    十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...

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

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

随机推荐

  1. 使用 Microsoft Fakes 进行单元测试

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 在编写单元测试时,我们会遇到不同的外部依赖项,大体上可以分为两类: 依赖于接口或抽象类 依赖于具体类 ...

  2. [游戏模版5] Win32 折线 弧线

    >_<:first build some points put in poly1[],poly2[] and poly3[] in the function of InitInstance ...

  3. .NET Core尝试

    Dotnet Github网站 http://dotnet.github.io/getting-started/   微软ASP.NET站点 https://docs.asp.net/en/lates ...

  4. Oracle 函数中动态执行语句

    函数: 1 create or replace function fn_test(tablename in varchar2) return number is sqls ); rtn ):; beg ...

  5. React组件系统、props与状态(state)

     多个组件合成一个组件: var style = { fontSize: 20, color: '#ff0000' }; var WebSite = React.createClass({ rende ...

  6. 出现Bad command or the file name的原因

    出现Bad command or file name的原因 中文释义:错误的命令或文件名 . 错误原因:不能识别输入的命令 . 方法:检查所输入的指令是否正确,包括拼写和大小写等情况.

  7. js异步加载的三种解决方案

    默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页 ...

  8. android: permission和uses-permission

    首先,先看一下permission定义的格式: <permission android:description="string resource" android:icon= ...

  9. 虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?

    最近研究虚拟化技术,不可避免遇到一个问题:如何评估物理主机上虚拟主机的容量?下面这篇文章的思路有一定的启发性,转发一下. 如何确定一个CPU核上部署的虚拟机数量? 摘要:本文说明一个CPU核上部署虚拟 ...

  10. ios之VFL的补充(二)

    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[languageI ...