Delphi中封装ADO之我重学习记录。。。

KeyLife富翁笔记
作者:HongYuan

标题: Delphi中封装ADO之我重学习记录。。。

关键字:

分类:我学习Delphi,我努力

密级: 保护

(评分: , 回复: 0, 阅读: 268) »»

ADO实际上是是微软以COM技术,封装底层的OLE-DB(也是COM)方便开发人员使用的一另数据储蓄技术。

ADO原生对象:

Connection对象,使用方法:

adoc:=CreateOleObject('ADODB.Connection');

adoc.openn(连接串)

Recordset对象,使用方法:

ador:=createoleobject('ADODB.RecordSet');

ador.activeConnection:=adoc;

ador.open('select * from sysobjects',adoc,adopenstatic,adlockoptimistlc,adcmdtext);

command对象,略

2005-11-4 11:43:30

修改笔记发表评语»»»
2005-11-4 12:20:25

Borland ADO 通过封装原生ADO,提供给用户的一套VCL组件。包括:

TADOConnection

ConnectionString 链接字符串

ConnectOptions: coConnectUnspecified 未指明,即同步连接;应用程序在连接执行完成后,才执行后续代码。

coAsyncConnect 异步连接.立刻执行后续代码。

*CursorLocation 代表指针存储的地方。显著影响执行效率。

*IsolationLevel:事务层次

*Mode 连接充许的存取行为

Provider代表ADO驱动程序种类,即连接到什么数据源。

TADOCommand

用于执行不返回数据集指定最佳选择,也可以通过adoDataset返回数据集。

TADODataSet

用于提取数据

TADOTable

相当于TADODataSet,只是相当于CommandType=CmdTable

TADOQuery

TADOStoredProc

TRDSConnection

2005-11-4 12:21:18 CommandType

CmdUnknown 未知的命令类型,它会造成ADO执行变慢

cmdText 文字类型的命令,通常是SQL命令或存储过程的程序cmdTable 数据表的名称

cmdStoredProc 执行的存储过程名称

cmdFile 包含命令的文件名称

cmdTableDirect 指明数据表的名称,数据表所有的字段都会回传在结果数集中

2005-11-4 12:56:53 如何才能使用TADOQuery的BatchUpdate

1.CursorType为ctKeyset/ctStatic

ctStatic:当数据源处理了客户端的SQL命令并回传结果数据集后,这些数据集就由ADO的Cursor引擎来处理。即相当于数据库的副本,是一组静态的数据集(别的用户修改了数据库,这个数据集不反映(即不同步))。Client-Side Cursor+Static是不错的组合。

ctKeyset:不但提供类似Static Cursor的能力,充许浏览结果数据集中的数据,还能在客户端看到被其它用户修改的并储存在数据库中的最新数据。在ADO缓存中只保存键值字段信息,这样在客户端需要数据时,根据键值信息动态到数据源中查询最新数据,回传客户端。(不过只能看到修改的数据,看不到新增的数据,键值一经读出不不在修改,同时会产生较大负何)

2.LockType为ltBatchOptimistic

3.执行的SQL命令是Select.

BatchUpdate的参数

arCurrent 只更新当前记录

arFiltered 只把符合过滤条件的数据修改更新回数据源

arAll 把所有数据修改更新回资源中

arAllChapters 更新所有被影响的Chapters,章?不懂。

CancelBatch 取消未更新数据

Batch方式下可用的数据筛选FilterGroup:

如:Fitered:=true;FilterGroup:=fgNone;

fgUnassigned 不过滤数据

fgNone 相当于Fitered:=false;

fgPendingRecords 显示修改过未更新的数据或未取消的数据

fgAffectedRecords 显示上次更新数据

fgFetchedRecords 显示缓存中的数据。

fgPredicate 显示删除数据

fgConflictingRecords 更新错误的数据

其它CursorType

ctOpenForwardOnly:只能向前读取数据;

ctDynamic:数据源处理客户端SQL命令后,只会把结果数据集的键值传给ADO引擎,并且把客户端Recordset对象指定的CacheSize笔数传回。当客户端需要浏览其他不在目前ADO缓存中的数据时,ADO重新建立一份数据库取出的新的键值字段信息,再根据新键值取得下一个区块的数据。

ado在使用sql server时,其如果采用Client-Side Cursor方式,无论什么Lock Type都将使用Static方式。

2005-11-4 13:15:44 将TADOQuery数据从XML文件中读出或存与XML文件中。

SaveToFile('c:\outdata\test.xml',pfXML)

loadFromFile('c:\outdata\test.xml')

2005-11-4 13:30:27 通过OnFilterRecord事件筛选数据

procedure useFilterRecord(DataSet: TDataSet;var Accept: Boolean);

var

sCompany:string;

begin

sCompany:=DataSet.FieldByName('Company').asString;

if ((pos('银行',sCompany<>0) and

((pos('信托',sCompany<>0) then

Accept:=True

else Accept:=False;

end;

adoquery.filtered:=false;

adoquery.OnFilterRecord:=useFilterRecord;

adoquery.filtered:=true;

说明:如果公司名称包括有银行或信托就通过筛选;在此可以更灵活的使用DELPHI或自定义方法处理更为复杂的本地筛选。

2005-11-4 14:19:50 异步执行能力

ExecuteOptions

eoAsyncExecute 异步执行

eoAsyncFetch 异步提取

eoAsyncFetchNonBlocking 无阻塞方式异步提取

eoExecuteNoRecords 无返回记录执行

onFetchProgress ADO执行过程中会调用此事件,直到结束为止,可用于进度条显示

onFetchComplete ADO执行完成后会调用此事件

2005-11-4 15:51:37 值属性

ADO DELPHI

OriginalValue:原始值 OldValue

NewValue:新值 NewValue

underlyingValue:其它用户修改过的值 currentValue

2005-11-4 16:15:52 关于RecordsSet分页与定位

recordsset可以将数据表中所有的数据以页次的方式切割,程序员可指定页号获最相应数据。

可能通过属性设置相关值

AbsolutePage 改变当前页

PageCount 总页数,只读

PageSize 每页行数

2005-11-4 16:48:00 CacheSize=1000,数据提取最快

CacheSize:数据缓冲区大小,指ADO从OLE-DB提取数据并缓冲数据的笔数。OLE-DB是如何向数据库提取数据的呢?

2005-11-4 17:06:32 ClientDataset的使用

http://www.delphibbs.com/keylife/iblog_show.asp?xid=4566