• 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

  • 相关阅读:
    MVC的各个部分都有那些技术来实现?如何实现?
    JRE、JDK、JVM 及 JIT 之间有什么不同
    什么是竞态条件?举例说明
    【Spring】No converter found for return value of type: class java.util.ArrayList
    【Spring】org.springframework.web.context.ContextLoaderListen 报错
    【Spring】The matching wildcard is strict……
    【MySQL】目录、文件权限问题
    线程和锁
    【Git】Found a swap file by the name ".git/.MERGE_MSG.swp"
    【Maven】Mac 使用 zsh 后 mvn 命令就无效
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/568206.html
Copyright © 2020-2023  润新知