本书讨论用Delphi 6和Kylix进行数据库编程。本书中的大多数代码应该也可以用于Delphi 5(除了有关dbExpress的章节)。
本书针对的读者
本书针对Delphi 6和Kylix数据库程序员。我假设你已经具有Object Pascal语言的知识,而且知道如何创建Delphi或Kylix应用程序、将组件拖到窗体上、创建和连接事件处理器以及执行建立应用程序所需的各种任务。
我还假设你具有数据库及数据库术语的基本知识。因此,在本书中我不解释什么是表、视图、列和与数据库相关的其他术语。
本书在示例应用程序中也使用了一些标准组件。除了数据感知组件之外,我不解释在这些示例中如何使用标准组件,比如动作列表、按钮、列表框等等。如果你需要关于这些组件的更多信息,请参考Delphi或Kylix帮助或通用的Delphi书籍。
本书的组织结构
如果你对Delphi/Kylix数据库编程很陌生,那么最好按顺序阅读各章。如果你有一些数据库编程经验,那么可以直接跳到合适的章节。下面是各章内容的简介:
?第1章“建立和使用数据库连接”介绍dbExpress,dbExpress是Delphi 6和Kylix提供的新的数据访问技术。此章讲解如何使用dbExpress连接到数据库。
?第2章“dbExpress数据集”继续讨论dbExpress以及dbExpress特有的数据集组件。
?第3章“客户数据集基础”介绍客户数据集和TClientDataSet组件,客户数据集提供高速的内存数据集。
?第4章“高级的客户数据集操作”继续讨论客户数据集,并且详细研究许多更高级的客户数据集操作。
?第5章“数据感知组件”介绍数据感知组件,数据感知组件在数据与应用程序的用户界面之间提供桥梁,它们自动显示来自数据集的信息并且允许用户输入新数据。
?第6章“数据感知网格”继续讨论数据感知组件,讲解如何以网格格式显示和编辑数据。
?第7章“数据集提供者”通过介绍提供者的概念来提供多层数据库开发的基本知识。
?第8章“DataSnap技术”讲解如何创建单独的通过网络连接的客户和服务器应用程序,来创建真正的多层数据库应用程序。
?第9章“ConMan应用程序”开发一个简单的联系人管理程序,以便演示在实际的应用程序中如何使用多层数据库开发技术。
VCL还是CLX
因为本书中讨论的技术同时应用于Delphi 6和Kylix(第8章“DataSnap”例外),所以本书中的所有代码清单都是CLX代码。我们以CLX和VCL两种形式提供了可下载的源代码,所以如果你不打算编写跨平台的应用程序,可能希望使用VCL代码。
VCL代表Visual Component Library,它是Delphi支持的最初的Windows特有类库。CLX代表Component Library Cross-Platform(X代表跨平台),它是Delphi和Kylix支持的新的跨平台类库。
CLX分为4个类别:
?BaseCLX-这包括“幕后的”实用工具类和函数,比如TStringList、TObjectList等等。
?DataCLX-这封装了CLX数据库功能,比如dbExpress和数据感知组件。
?VisualCLX-这包括可视组件,比如菜单条、工具条、按钮、列表框等等。
?NetCLX-这包括与Internet相关的组件。
本书中只讨论了CLX中的一个部分,即DataCLX(尽管在创建示例CLX应用程序时使用了一点儿BaseCLX和VisualCLX)。
从代码清单可以看出,除了每个单元顶部的uses子句之外,VCL代码与CLX代码几乎没有区别,所以使用CLX代码一般不会带来任何麻烦。
为避免在书中到处提到“Delphi 6或Kylix”或“Delphi/Kylix”,我用Delphi这个通用术语表示Delphi 6或Kylix。在一个语句只应用于Delphi 6(VCL)的情况中,我会特地声明。
本书中开发的组件
尽管本书并不是关于组件开发的,但我提供了数据感知组件的4个VCL特有后代,我想你会认为它们很有用。第5章和第6章将讨论这些组件。本书的源代码包括Delphi包ETH,它包括以下组件:
?TETHDBComboBox-数据感知组件TDBComboBox的后代,它允许从组合框中选择一个项目并且将它的索引存储到一个整数字段中。
?TETHDBListBox-数据感知组件TDBListBox的后代,它允许从列表框中选择一个项目并且将它的索引存储到一个整数字段中。
?TETHDBDataTimePicker-Win32组件TDBDataTimePicker的数据感知版本。
?TETHDBGrid-TDBGrid的后代,当用户重设列的尺寸时会引发一个事件。
示例应用程序
本书的每一章都包含许多示例应用程序,以帮助你理解所讨论的概念。这些例子都是使用Delphi 6编译和测试的-VCL和CLX两个版本都是。
可以从http://www.samspublishing.com/detail_sams.cfm?item=067232265x6或我的网站http://www.tpx.turbopower.com/~Eric.Harmon下载示例程序的源代码。在后一种情况下,点击Books and Articles链接,然后点击靠近页面顶部的download链接。
下面按章的次序介绍本书中开发的示例应用程序。
第1章
?Events-演示TSQLConnection组件引发的各种连接事件。
?MetaData-演示如何从dbExpress连接获取简单的元数据。
?DDLSQL-演示如何将DDL和SQL命令直接发送到TSQLConnection组件。
?Trans-演示在dbExpress中如何支持事务。
?Feedback-演示如何为dbExpress连接中发生的情况提供反馈。
第2章
?Basic-演示基本的TSQLDataSet操作。
?Advanced-演示更高级的TSQLDataSet方法和操作。
?Schema-演示如何使用TSQLDataSet从dbExpress连接获取更详细的元数据。
第3章
?CDS-演示基本的客户数据集支持。
?Navigate-演示如何在TClientDataSet中导航。
?CDSIndex-演示如何在TClientDataSet上创建和使用索引。
?RangeFilter-演示如何通过应用范围和过滤器限制TClientDataSet中的数据量。
?Search-演示在客户数据集中快速定位给定记录的各种方式。
第4章
?EventLog-演示TClientDataSet引发的事件。
?Updates-演示如何禁用和启用数据感知控件的更新以加快数据集操作的速度。
?BLOBs-演示如何在客户数据集中存储图片和注解。
?Nested-演示客户数据集如何实现主/明细关系。
?ChangeLog-演示如何使用客户数据集实现撤销支持。
?Clone-演示克隆,即创建一个TClientDataSet的重复拷贝。
第5章
?DataAware-演示此章中讨论的各种数据感知组件。
第6章
?Options-演示TDBGrid的各种选项的作用。
?CustomDraw-演示如何覆盖TDBGrid的默认绘制方式以提供吸引人的网格。
?CtrlGrid-一个VCL特有的例子,演示如何使用TDBCtrlGrid组件。
第7章
?Updates-演示数据集提供者的基本操作。
?Joins-演示如何正确地解析通过SQL JOIN获取的数据。
?DataFetch-演示如何限制从数据集返回的BLOB和明细数据的数量,以便提高应用程序的性能。
第8章
?Methods-演示如何向应用程序服务器添加可调用的方法。
?LocalConn-演示如何使用多层技术实现可独立执行的数据库应用程序。
?Stateless-演示如何创建与MTS和COM+结合使用的无状态应用程序服务器。
第9章
?ConMan-这个完整的示例应用程序创建一个简单的联系人管理程序,演示了本书讨论的许多技术。
在源代码方面,每章具有自己的目录,其下有VCL和CLX子目录。VCL和CLX子目录之下还有每个示例应用程序自己的目录。
除了每章的子目录,还有一个单独的名为Components的子目录,其中包含前面提到的数据感知组件后代。Data子目录包含数据文件conman.gdb(许多示例应用程序要使用这个数据文件)和用于创建这个数据库的SQL脚本(conman.sql)。
如果在自己的驱动器上维持这样的目录结构,示例程序应该可以运行。它们使用相对路径..\..\..\Data\conman.gdb访问CONMAN数据库。如果在运行示例程序时遇到了麻烦,那么可能需要改为提供完整路径,比如d:\Data\conman.gdb。
dbExpress
dbExpress是Borland最新的数据库访问技术,Delphi和Kylix都支持它。以前的Delphi版本支持几种数据库访问技术,比如BDE、ADO和IBX。既然有这三种技术,为什么还需要一种新技术呢?dbExpress具有许多令人兴奋的性质,包括:
?跨平台-BDE和ADO是Windows平台专用的技术,而dbExpress当前可以在Windows和Linux(由Delphi和Kylix支持的两个平台)下运行。如果Borland决定支持其他平台,比如Mac、BE等,那么dbExpress的应用范围还会扩展。
?低开销-dbExpress是底层数据库引擎的API之上的一个“瘦”层。因此,它给数据库操作增加的开销非常小。
?高性能-主要因为dbExpress的开销很低,所以它提供很高的性能。它被设计为与Delphi的客户数据集技术一起使用。
?易于分布-也是因为dbExpress的开销很低,所以dbExpress应用程序很容易重新分布。典型的多层应用程序需要部署MIDAS.DLL和后端数据库的dbExpress驱动程序,它们一般只有150KB。而BDE需要10MB的文件。
本书中使用的数据库
dbExpress可以连接到各种后端数据库,包括InterBase、Oracle、DB2和MySQL。我必须为本书中的例子选用一种数据库引擎。我选择InterBase有四个原因:
?它是免费的。任何人都可以从Borland的网站下载InterBase的免费拷贝,可以用于本书中的任何例子。
?容易得到。Delphi和Kylix的光盘上都附带InterBase,所以如果你有Delphi 6或Kylix软件,就应该已经拥有InterBase。
?容易管理。我可以提供一个小型InterBase数据库供下载。你可以将此数据库复制到本地机器并离线运行。而要将30MB的Oracle数据库重新分布给我的读者就没这么容易了。
?在上面四种数据库引擎中,我只有这种。
与作者联系
如果你要与我联系以便提供关于本书的问题、评论、表扬或批评,请给我发电子邮件,地址为Eric.Harmon@tpx.turbopower.com。我将尽可能快地答复你。但是,请理解我每天会收到大量电子邮件,所以答复有时会延误一段时间。
---------------------------------------
本书讨论用Delphi 6和Kylix进行数据库编程的技术。主要内容包括:建立和使用Delphi 6和Kylix提供的新的数据访问技术,dbExpress数据集,客户数据集基础,高级的客户数据集操作,数据感知组件,数据感知网格,数据集提供者,多层数据库应用程序,一个简单的联系人管理程序。本书内容新颖,包含大量实用程序,可供网络数据库开发人员参考。
---------------------------------------
第1章 建立和使用数据库连接 1
1.1 连接数据库和断开连接 1
1.1.1 建立连接 2