首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.3  使用dbExpress的概念

dbExpress控件集中与存取数据有关的控件,例如TSQLDataSetTSQLTable等都是从TDataSet类继承下来的,因此,它们提供了所有和TDataSet一样的功能,也可以和Delphi的数据感知控件使用在一起以开发数据库应用程序。图1-14显示了这些dbExpress控件的类架构图。

1-14  dbExpress的类架构图

虽然TSQLDataSet等控件是从TDataSet继承下来的,但是它们与其他从TDataSet继承下来的控件,例如TBDEDataSet等控件不同。不同的是借助这些dbExpress控件取得的结果数据集是只读的。也就是说,由这些控件存取到的数据是不能够修改的,而且由这些dbExpress控件取得的结果数据集,其存取数据的方式只能由前往后存取,而无法由后往前存取。另外值得注意的是,在Delphi 2006TCustomSQLDataSet已经改为从TWideDataSet中继承下来,而不像Delphi 6/7/2005是从TDataSet继承下来的。这是因为Delphi 2006的数据集类群组为了准备支持Unicode,而加入了新的类TWideDataSet,所有其他TDataSet的派生类都改为从TWideDataSet继承。TWideDataSet类在原本的TDataSet类服务中加入了同样的服务方法,但是采用了WideString的版本,这样一来,数据集类群组就能够处理日后的Unicode了。不过由于TWideDataSet也是从TDataSet继承下来的,因此,这样的改变并不会影响原有数据集类群组的执行行为。

如果开发人员想要变更由这些dbExpress取得的数据,或是想要在结果数据集中以任意的方式移动目前记录的位置,那么开发人员可以使用两种方法来达成:

1.    在应用程序中再搭配使用控件集Data Access页签中的TDataSetProviderTClientDataSet控件;

2.    使用dbExpress控件集中的TSimpleDataSet控件。

稍后本书将会介绍如何使用这两种方式,现在先让我们介绍如何使用同样位于控件集dbExpress页签中的TSimpleDataSet控件。

TSimpleDataSet控件是Delphi 2006用来简化开发人员借助dbExpress控件变更数据的控件。使用TSimpleDataSet控件略等于使用TSQLDataSet控件与TDataSetProvider控件,再加上TClientDataSet控件。TSimpleDataSet不但能够存取数据,更能让开发人员变更数据和移动目前记录的位置。

基本上,TSimpleDataSet控件是使用TSQLDataSet控件从后端数据源中取得数据,再借助内部的缓存机制(cache)管理数据,借助内部缓冲(buffering)区机制允许开发人员任意地移动目前所记录的位置,并在开发人员需要变更数据回数据源时,根据它内部维持的信息,自动帮助开发人员产生变更数据的SQL语句,再借助TSQLDataSet控件使用这些自动产生的SQL语句把变更数据更新回数据源之中。因此,TSimpleDataSet控件等于是帮助开发人员撰写了管理数据以及更新变更数据回数据源的程序代码,而无须开发人员自己撰写这些程序代码。

1-15就是TSimpleDataSet控件的类架构图,从图中可以看到TSimpleDataSet是从包含缓存机制的TCustomClientDataSet控件继承下来的。

1-15  TSimpleDataSet的类架构图

当开发人员使用TSimpleDataSet时,无须再搭配使用TSQLConnectionTSQLDataSet,因为TSimpleDataSet自己会在内部建立暂时的TSQLConnection控件、TDataSetProvider控件以及一个TInternalSQLDataSet控件。TSimpleDataSet会使用内部建立的TSQLConnection连接至数据库,再使用内部建立的TInternalSQLDataSetTDataSetProvider处理数据。由于TSimpleDataSet内部使用了TDataSetProvider控件,因此提供了数据变更的能力,这样比使用前面的TSQLDataSet只提供数据查询的能力方便多了。

此外,虽然开发人员在Delphi 2006中是使用dbExpress控件存取和处理数据的,但在dbExpress控件之下,开发人员仍然必须拥有每一个特定数据库的dbExpress驱动程序才可以存取特定的数据库。当开发人员像图1-5那样使用TSQLConnection控件指定连接特定的数据库时,dbExpress便会加载与此数据库相关的dbExpress驱动程序以存取这个数据库。

如果dbExpress想存取到特定的数据库,那么加载的dbExpress驱动程序仍然需要调用特定数据库的客户端驱动程序,才能够真正地存取特定数据库。例如要使用dbExpress存取Oracle,那么除了要在dbExpress中存取OracleDBXORA30.DLL这个驱动程序之外,由于DBXORA30.DLL是直接调用OracleOracle Call Interface OCI),因此,还需要Oracle客户端的OCI.DLL,否则dbExpress无法存取Oracle数据库。

例如图1-16就是dbExpress在存取数据库时实际的架构。当dbExpress控件要存取Oracle时,就使用了刚才叙述的流程。例如dbExpress要存取InterBase时,就需要加载dbExpress中存取InterBaseDBXINT30.DLL驱动程序,以及InterBase客户端的引擎GDS32.DLL

1-16  dbExpress存取各种不同关系数据库的架构图

前面已经介绍过,在dbExpress控件借助驱动程序取得了结果数据集之后,开发人员可以再使用TSimpleDataSet来变更结果数据集之中的数据,因为TSimpleDataSet包含了内部缓存的机制,可以自动帮助开发人员完成这些工作。如果我们再详细地介绍什么是TSimpleDataSet内部缓存的机制,那么答案就更清楚了,这个缓存的机制事实上就是以前Delphi版本中的MIDAS技术。Delphi 2006中的MIDAS已经是第7个版本了(Delphi 7中的MIDAS是第5个版本),从Delphi 6开始它重新被命名为DataSnap技术。Delphi 2006中的DataSnap已从以往定义为分布式应用系统架构技术转换为跨平台的标准数据存取技术。这个意思是说,MIDAS 7不但可以使用开发分布式应用系统,在Delphi 2006也成为开发客户/服务器以及单机应用程序的标准存取数据的技术,并且能够同时使用在Windows平台的Delphi 2006中以及.NET 1.1平台之中。因此,DataSnap已经成为Delphi的核心技术之一,所有的Delphi开发人员都必须了解并且熟练地掌握DataSnap的技术,当然,本书也会充分地说明如何善用DataSnap技术。

因此,在Delphi 2006中开发数据库应用程序的架构就如图1-17所示的一样,应用程序借助dbExpress存取到数据,再由DataSnapMIDAS 7)来管理和变更数据。

1-17  dbExpress应用程序执行架构图

1-18是更详细的架构图,Delphi 2006中的应用程序借助dbExpress控件存取数据,而dbExpress是使用SQL语句从数据源中取得数据,当数据源根据SQL语句执行的结果数据集并且回传给dbExpress控件之后,dbExpress控件会再把结果数据集交由DataSnap技术来管理,以便开发人员能够对结果数据集中的数据进行处理和变更。

从图1-18中我们也可以了解到,借助TSimpleDataSet取得的数据事实上就是由DataSnap在缓存内存中维护的数据。几乎所有借助TSimpleDataSet的方法或是属性值处理的数据都是储存在这些缓存内存中的数据,只有当开发人员真正需要把缓存内存中的数据更新回数据源时,DataSnap才会借助SQL语句把经过变更的数据更新回数据库中,在稍后的章节中会说明如何变更数据并且把数据真正地更新回数据源中。

1-18  dbExpress应用程序执行详细架构图

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论