13.3 Delphi数据库的体系结构
Delphi使用可视化的部件创建数据库应用,跟创建其它的非数据库应用程序一样,数据库部件都具备一定的属性,程序设计人员可以在设计过程中设置部件的多种属性,也可以在程序运行过程中通过程序来设置部件的各种属性。
在Delphi部件板上有两页数据库部件用于开发数据库应用程序:
数据访问部件页:该页上的部件主要用于说明有关的数据库的信息,如应用程序要访问(连接)的数据库,要访问数据库中的具体的数据库表,以及要访问表中哪些字段等,在实际的开发应用中常用的部件有TDataSource、TTable、TQuery等。
数据控制部件页:该页上的部件主要用于显示浏览数据库中的数据信息,为用户提供了一个可视化的界面,常用的部件有:TDBGrid、TDBEdit、TDBCheck等,可以让用户对数据库中的信息进行有效的浏览、编辑、插入、删除等操作。
TTable、TQuery、TStoredproc部件负责与实际的数据库表联系,并从中获取数据信息,因而它们又常常被称为数据集部件,它们在程序设计过程中是可见的,但在程序运行时是不可见的,它们通过 BDE 为应用程序提供与数据库的连接, 数据控制部件通过TDataSource部件与数据集部件相连,为用户提供一个可视化的界面,并在其中显示数据库中的数据信息。
13.3.1 数据访问部件
数据访问部件页上提供了一组数据访问部件用来访问数据库中的数据。
图13.3 数据访问页上的数据访问部件
当要创建一个数据库应用时,首先在窗体中选择一个数据访问部件,然后为数据访问部件设置有关的属性,说明要访问的数据库、数据表以及表中的记录等,数据访问部件为数据控制部件与数据源建立一条通道。数据访问部件在程序运行时是不可见的。下表列出了数据访问页上的数据访问部件以及它们的主要用途:
表13.4 数据访问部件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部件名称 主 要 用 途
────────────────────────────
作为数据集部件TTable、TQuery、StoredProc组
TDataSource 件与数据浏览件TDBGrid、TDBEdit之间传送数据
的通道。
────────────────────────────
它是存取磁盘上数据库表的媒介,它通过BDE存
TTable 取数据库表中的数据,TTable再与TDataSource
进行“对话”,使得数据浏览部件能够有效地从
TTable中访问数据并能显示和编辑其中的数据。
────────────────────────────
它利用SQL语言访问磁盘上数据库表中的数据,
TQuery 并与TDataSource“对话”,实现数据浏览部件
对数据库的访问。
────────────────────────────
TStoredProc 在应用程序中,它主要用来访问远程服务器中的
存贮过程
────────────────────────────
当应用程序要登录到一个远程服务器上的数据库
TDatabase 时,可以用该部件来建立应用程序与数据库永久
性的连接。
────────────────────────────
TBatchMove 用于复制数据库表的结构或表中的记录。
────────────────────────────
TReport 用于创建数据库的输出报表。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
值得指出的是在绝大多数数据库应用中,一般都是使用数据集部件TTable、TQuery或TStoredProc与磁盘上的数据库进行连接,用TDataSource部件连接数据控制部件和数据集部件,当然用户也可以自定义数据集部件,用于数据库应用当中, TTable 、 TQuery 和TStoredProc部件中都包含一个不可见的TField类型的对象Fields,Fields是一个串列表,它对应于数据库表或一个查询结果的列或字段。Fields对象是伴随着TTable、 TQuery 和TStoredproc部件的活动状态动态地建立的,当数据库表被关闭时,Fields 对象也随之消失,它在程序设计和程序运行过程中都是不可见的。
当然也可以利用Fields Editor建立永久性的Fields对象供Delphi应用程序使用,我们将在后面的内容中详细阐述。
13.3.1.1 TTable部件
利用TTable部件程序设计人员甚至可以不需要编写任何程序便可对数据库进行访问,在一个应用程序窗体中放置一个TTable部件的过程如下:
1、在部件选择板上选择Data Access页;
2、单击Table图标;
3、在窗体内单击鼠标,获得一个TTable部件;
4、为TTable部件设置有关的属性:
DatabaseName属性指定要访问的数据库所在的路径名,路径名可以用别名来表示。
TableName属性指定要访问数据库中具体的数据库表。
Active属性设置为True时,表示打开要访问的数据库表;设置为False时,暂时不打开要访问的数据库表。
缺省情况下,TTtable部件中包含了要访问的数据库表中所有的字段和记录,用鼠标双击TTable图标时,会出现一个字段编辑器(Fields Editor),使用Fields Editor可以对TTable部件中包含的数据库表中的字段的显示格式等属性进行编辑,具体可以控制:
● 建立一个永久性的字段列表,包括字段的顺序,字段的类型等,即使磁盘上实际的数据库表的表结构发生了改变,我们建立的这个永久性的字段列表也不会发生改变
● 为每个字段指定一个便于阅读和使用的名字
● 指定字段显示的顺序
● 为每个字段指定一个用于显示的字符串
● 为字段增加合法性检验
● 为了显示的需要还可以建立新的字段(如可计算的字段)具体的使用方法见后面的内容
13.3.1.2 TQuery部件
TQuery部件是我们使用SQL语言开发数据库应用程序的有力工具,因为使用SQL语言,我们可以非常方便灵活地对一个或多个数据库表中的记录进行访问,所以利用TQuery我们可以查询本地的数据库如Pà?aradox和dBASE数据库系统中的数据,我们还可以使用TQuery部件对一个远地的数据库SQL服务器进行访问,建立Client/Server模式的应用程序。
在一个应用程序窗体中放置一个TQuery部件的过程如下:
1、在部件选择板上选择Data Access页;
2、单击Query图标;
3、在窗体内单击鼠标,获得一个TQuery部件;
4、为TQuery部件设置有关的属性:
DatabaseName属性指定将要访问的数据库的路径名。
SQL属性指定对数据库表进行访问SQL语句,它可以是一条查询语句也可以是一条修改语句或插入语句等。在对象浏览器上,单击SQL属性时,会打开一个字符串编辑器供程序设计者输入SQL语句。
在这里要注意在TQuery部件中,不是用TableName 属性来指定要访问的数据库中的数据库表,而是在SQL属性中,通过SQL语句来指定将要访问的数据库表。
13.3.1.3 TDataSouece部件
TDataSource部件是连接数据集部件TTable、TQuery、 TStoredProc 和数据控制部件TDBGrid、TDBEdit等的桥梁,TTable、TQuery、TStoredProc部件通过BDE可以实现与磁盘上的数据库连接即访问,但它们本身不能显示数据库中的数据信息, 而数据控制部件如TDBGrid、TDBEdit等能够提供可视化的界面,显示数据库中的数据信息,但它们不具备访问磁盘数据库的能力,正是TDataSource将这两者有机地结合起来,使得用户才能交互地对数据库中的数据信息进行查询、修改、插入、删除等操作。
在应用程序窗体中放置TDataSource部件的过程如下:
1、在部件选择板上选择Data Access页;
2、单击DataSource图标;
3、在窗体内单击鼠标,获得一个TDataSource部件;
4、为TDataSource部件设置有关的属性:
Dataset属性指定一个数据集部件,可以是TTable、TQuery或TStoredProc部件的名字。