分享
 
 
 

有关ADO专题

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

ADO架构图:

消费者

(Recordset) 提供者 消费者 提供者

程应 ↗ ↘ OLEDB ←→ 服务器件 ←→ OLEDB ←→ 数据库

keyset Cursor与Dynamic Cursor的执行过程:

1、 数据库只把记录的键值放入结果数据集中

2、 ADO Cursor Engine存取客户需要的记录

3、 OLE Provider再根据结果数据集中的键值字段到数据库中存取相应的数据

4、 根据键值找到的数据再放入结果数据集中

事务管理功能:

在使用ADO处理多个数据表的主从架构应用程序中,一定要记得激活事务管理的功能以保护更新的数据。

1、 激活事务管理功能:

Procedure ADODataSetBeforePost (Dataset: Dataset);

Begin

If (not ADOConnection.InTransaction) then

ADOConnection.BeginTrans;

End;

2、 在数据成功更新之后确定事务:

Procedure ADODataSetAfterPost (Dataset: Dataset);

Begin

If (ADOConnection.InTransaction) then

ADOConnection.CommitTrans;

End;

3、 最后,当更新数据发生错误时取消事务,以便正确释放系统资源:

Procedure ADODataSetPostError (Dataset: Dataset; E: EdatabaseError; var Action: TDataAction);

Begin

ADOConnection.RollbackTrans;

Action: =daAbort;

End;

RecordSet 的页面定位功能:例如 学生表中有1000笔数据,当页面的大小[PageSize]为10笔数据时,那么整个数据表就被分割成100个不同的页面[PageCount]。因此程序员指定的页面号码[AbsolutePage]为2,就可以存取到11-20笔的数据。

AbsolutePage:改变当前Page的位置,设定这个属性可以存取特定Page中的数据。这是个可擦写的属性。

PageCount:数据表中所有的记录数除以PageSize后得到的页数。这是个只读属性。

PageSize:指定没一个数据页中包含的数据笔数。这是个可擦写的属性。

RecordSet 的UpdateCriteria动态属性:

AdCriteriaKey:只在SQL命令的Where子句中使用键值字段值来寻找原来的记录。

AdCriteriaAllCols: 只在SQL命令的Where子句中使用所有字段值来寻找原来的记录。

AdCriteriaUpCols: 在SQL命令的Where子句中使用键值字段值以及所有被修改字段值来寻找原来的记录。这是ADO使用的默认的设定。

AdCriteriaTimeStamp: 在SQL命令的Where子句中使用键值字段值以及数据表中字段类型为TimeStamp的字段来寻找原来的记录。

何谓客户端Cursor、服务器端Cursor?

ADO的CursorLocation分为两种:一种是客户端Cursor,另一种是服务器端Cursor。

那么何谓CursorLocation呢?简单的说就是当客户端应用程序存取了一些数据之后,这些数据存储在什么地方?如果这些暂时的数据是存储在客户端的ADO驱动程序内存中,由客户端ADO引擎管理,这就称为客户端Cursor。相反,如果这些暂时的数据是存储在后端的数据库中,由后端数据库本身管理,就称为服务器端Cursor。

结论:使用Client-Side Cursor,再加上少量多次的存取方式,那么你的应用系统会非常有效率。

LockType:对于数据存取行为的影响大于对ADO执行效率的影响。其主要影响数据源服务器如何锁定资源,以及锁定资源的数量。

ReadOnly:只读锁,在使用Locate方法搜寻数据时,使用ReadOnly类型的LockType执行效率最高。

Optimistic:乐观锁

BatchOptimistic:批处理锁

Pessimistic:悲观锁

结论:在分布式多层应用系统或Internet/Intranet以及电子商务中,不要使用Pessimistic的LockType,因为这不但没有意义而且会损失执行效率。更严重的后果会造成系统死锁或发生数据不正确的情形。其次是在调用Locate方法搜寻数据时一般采用Client-Side Cursor、CacheSize的大小大约在100-1000之间、LockType采用Optimistic或BatchOptimistic。以达到最佳效率。

CacheSize:

1、 增加CacheSize可以增加ADO应用程序的执行效率,因为这可以减少网络的RoundTrips。

2、 增加CacheSize也增加了启动数据表的时间,但增加ADO应用程序的执行效率。

3、 当CacheSize接近1000时,ADO应用程序的执行效率在时间/空间比方面似乎是非常好的设定。

ExecuteOptions:

EoAsyncExecute:以异步的方式来执行命令。

EoAsyncFetch:当ADO存取了CacheSize指定的数据后,再以异步的方式存取其他的数据。

EoAsyncFetchNonBlocking:ADO以异步的方式执行命令,而且不会阻碍应用程序的执行。相对效率较高。

EoAsyncNoRecords:执行不会回传结果数据集的存储过程或命令。如果被执行的存储过程或命令回传的任何数据都会被丢弃。

结论:当ADO执行完Action Query之后,会以事件的方式通知客户端应用程序。

OnFetchProgress:以异步存取数据时,会定时触发这个事件处理程序。

OnFetchComplete:当异步存取的数据完全存取完毕后,会触发这个事件处理程序。

Prepared和存储过程:

Prepared属性值会影响数据源在执行这些组件的Action Query时是否先编译这些SQL命令。如果Prepared属性值为True时,数据源只要编译一次即可重复执行这个存储过程。而不需要在没一次这些组件提出SQL命令时都编译一次SQL命令为存储过程,再执行。

排序数据:

ADO数据集.SORT:=’字名 排序,字名 排序……’ (排序有 ASC DESC)

ADO处理错误ERRORS(称错误集合对象)

……….PostError(..)….

Var

Adoerrors:errors;

Adoerror:error;

Icount:integer;

Begin

Adoerrors:=adoconn.errors;

For icount:=0 to adoerrors.count-1 do

Begin

Adoerror:=adoerrors.item[icount];

Adoerror.number[source.description,helpfile.sqlstate];

End;

End;

…..

try…….except

result:=false;

raise;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有