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

posted @ 2006-11-22 09:32  云水浮萍  阅读(1920)  评论(0编辑  收藏  举报