Delphi数据库处理组件BDE、ADO、InterBase和dbExpress详细说明

文章详细介绍了Delphi中处理数据库的三种主要方法:BDE(BorlandDatabaseEngine)、ADO(ActiveXDataObjects)以及从Delphi6.0开始引入的dbExpress。BDE是较老的技术,适合多种数据库,而ADO基于OLEDB,适用于大流量系统。dbExpress则是快速且跨平台的解决方案。文章还详细讲解了如何使用这些技术中的组件,如ADOConnection、ADODataSet、ADOQuery、ADOCommand等,以及如何建立主从结构的数据库应用程序。此外,还提及了InterBase的使用和dbExpress的单向及可修改数据连接的实现。

 第一节 BDE、ADO、InterBase和dbExpress
    Delphi中处理数据库主要有两种方法,也就是BDE、ADO,从Delphi 6.0开始还加入了一种dbExpress方法。 另外,Delphi还提供了专门处理Borland 公司自己的数据库产品InterBase 数据库的专门的方法。
    BDE(Borland Databas Engine), 是Delphi中最古老的技术,从delphi 2.0加入BDE 技术以后,一直是Delphi处理数据库的事实上的标准。BDE 是一个基于驱动程序的体系结构,每一种数据格式或数据源都有一种驱动程序来驱动相近的数据源。BDE 可以很好的支持现在最流行的ODBC API方法,ODBC是一种C/C++ 应用程序编程接口(API ),无论是对任何一种客户/ 服务器关系型数据库管理系统(RDBMS ),还是最流行索引顺序访问方法(ISAM)数据库(Jet、Foxpro), 都能很好的访问。
    同时,由于BDE 的驱动程序主要直接来自于第三方开发商,所以,对于像Oracle这些非微软的数据库,执行效率上比较高。正是这些特点,使BDE 技术还是得到了很多数据库开发程序员的欢迎。 
    ADO 技术是微软提出来的处理关系型数据库和非关系型数据库的新技术,它基于微软被称为OLE DB的数据访问模式,它是专门为了给大范围商业数据源提供访问而设计的,包括传统的关系型数据表、电子邮件系统、图形格式、Internet资源等。ADO 所需内存更少,更适合大流量和大事务量的网络计算机系统。
    ADO 顶层有三个对象:Connection、Command、Recordset。
    Connection用以指定数据源,建立和数据源的连接。
    Command 对象用以对数剧源执行指定的命令,可以接受SQL 语句,表和存储过程的名称,执行SQL 查询,更新数据,插入纪录等。
    Recordset 对象表示的是来自表或命令执行结果的记录全集,操纵来自提供者的几乎所有数据。
    由于ADO 技术的迅速普及,从Delphi 5.0  开始,加入了ADO 技术的模块,并逐步成为Delphi数据库设计的主流。但是,和VB的ADODC 相比,它还是有所不同的,在数据绑定上,它更多的吸收了BDE 的特点,以做到和原来的程序兼容,同时,它又可以接受标准ADO 技术的各种属
性和方法,在接受这些属性和方法时,它是和数据绑定控件脱离的,当然从某种意义上来说,这种方案提高了执行效率,给设计人员以更多的选择。 
    dbExpress 是Delphi 6.0加入的最新的数据库模块,它不使用缓存,可以快速浏览大量的数据,但是,不使用缓存就不能更改,所以它的标准方式是只读的。它一个重要的特点是交叉平台,可以和Linux 数据库连接,速度相当快。
    下面的讨论,将以ADO 技术为主线,最后再说明BDE 和dbExpress的应用方式。

    第二节  ADO 面板的主要组件
    ADO 面板一共有7 个组件:
   
    ADOConnection: 主要用于建立数据库的连接;
    ADOdataSet:ADO 提取和操作数据库的主要数据集,可以直接连接到数据库,也可以通过 ADOConnection连接到数据库。
    ADOtable:主要用以操作和提取单个基表的数据,可以直接连接到数据库,也可以通过 ADOConnection连接到数据库。
    ADOquery:通过SQL 语言提取数据,其连接数据库的方式和前两种一样。
    ADOStoredProc: 这个组件专门用于运行数据库中的存储过程。
    ADOCommand:该组件用于运行一些SQL 命令,这个组件可以和支持数据集的组件一起使用,也可以直接从一个基表中提取一个数据集。
    RDSConnection: 一个进程或一台计算机传递到另一个进程或计算机的数据集合。
    为了连接数据绑定控件,上述组件往往要和处于Data Access 中的Datasource配合使用。
    可以看出,和VB的ADODC 不同的,Delphi中解决同一个问题提供了多种方案,看起来似乎增加了麻烦,但是却可以给程序员更大的自由空间,便于设计出高效率的数据库程序来。
    下面通过几个例子来说明ADO 控件的用法。

    第三节 ADOtable组件
    ADOtable、ADOdataSet、ADOquery和ADOStoredProc都继承同一个父类TCustomADODataSet,所以,在属性事件和方法上有很多相似的地方,但它主要是针对数据库中的表进行操作。
       
    ADO -〉ADOtable
    属性:
    Name='控件名'
    ConnectionString='连接字符串'
        可以通过点击右边的按钮,通过向导建立数据源。有时候需要知道相对路径,可以用下面的方法找到程序当前的路径:
    
    tpath:=ExtractFilepath(Application.Exename);

    文件名:=Tpath+'../data/Test.mdb'

    表明数据库在当前程序上一层的Data文件夹下。

    TableName='表名'
    Active=true

    这就激活了数据源,为了和绑定控件联系,要增加一个DadaSource控件。事实上,所有的绑定控件都是和DadaSource联系。

    Data Access-〉DadaSource
    属性:
    Dataset=ADOtable.Name
    
    加入绑定控件:
    Data Controls-〉
    
    DBgrid(表格)
    属性
    DadaSource='DadaSource.Name'

    DBNavigator(导航条)
    属性
    DadaSource='DadaSource.Name'

    运行一下可以看出关系

    下面介绍一下ADOtable的一些重要的方法,这些方法大部分和Table是兼容的。
    为了便于叙述,ADOtable控件的Name定为 ADOtable1

   1)移动指针
   第一个:   ADotable1.First;
   最后一个: ADotable1.Last;
   下一个:   ADotable1.Next;
   前一个:   ADotable1.Prior;

   2)从字段中取出数据
   通过如下方法可以访问字段的值

       ADOtable1.FieldValues['字段名']
       ADOtable1.Field[索引值]
  
       在读写字段的时候,又是根据需要可以加上强制类型转换       
       例如:
       Edit1.text:=ADOtable1.Field[0].AsString;
       
       用下面的方法可以去除字段的性质:

       ADOtable1.fielddefs[索引值].name;     字段名
       ADOtable1.fielddefs[索引值].Size;     字段大小
       ADOtable1.fielddefs[索引值].Datatype; 字段属性

    3)修改数据:
       修改数据的时候,需要先建立EDIT方法,然后用Post方法才能真正的写入。
    
   ADOtable1.edit;
   ADOtable1.FieldValues['姓名']:='王秀琴';
   ADOtable1.post;

    4)增加一条空纪录: ADOtable1.append;

       新增纪录也可以用如下方法,在新增纪录的同时输入数据

       ADOtable1.appendRecord(xxx,xxx,xxx,....);
 
    5)删除当前纪录:ADOtable1.delete;
       如果在ADOtable1的OnBeforeDelete方法中写下:
       if messagedlg('确实要删除吗?',mtinformation,[mbyes,mbno],
          0)=mrno then abort();
       可以实现删除前的提示。      

    6)过滤
    可以用如下的方法实现数据的过滤

    在ADOtable1的OnFilterRecord方法中写下:
      Accept:=(条件);

    然后

    ADOtable1.filtered:=true;  为实现过滤。
    ADOtable1.filtered:=false;  为解除过滤。

    7)指针在文件的头尾

    指针在最后一条记录之后  ADOtable1.Eof
    指针在第一条记录之前    ADOtable1.Bof

    如此可以实现对数据库的遍历
     
    form1.ADOtable1.first;
    while not form1.ADOtable1.eof do
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ok060

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值