Welcome

首页 / 软件开发 / Delphi / 第十四章-简单数据库应用的创建及MASTAPP介绍(一)(3)

第十四章-简单数据库应用的创建及MASTAPP介绍(一)(3)2007-05-07

14.3 创建主要──明细数据库应用

我们前面在介绍的基于单个数据库表的数据库应用程序只能对数据库表进行简单的管理,大多数只用来浏览单个数据库表中的记录信息,如果我们想浏览多个相关的数据库表中的记录信息,就必须要创建主要──明细型数据库应用程序。

在主要──明细型数据库应用程序中,一个数据库表作为主要表,其中存放着综合信息,其他的数据库表和主要数据库表相关联,它们当中存放着更详细的信息。例如,当数据库表Customer.DB作为主表,它包含着客户的综合信息如编号、姓名、所在公司的名称等等。而数据库表Orders.DB中包含着每个客户的订货单的详细信息,如订单号、发货日期、起运日期、发货目的地等信息,这样当在Customer.DB表中查看某一位客户时,利用其中的字段CustNo与Orders.DB表发生联系,自动地从Orders.DB表中检索出这位客户曾经发来的所有订货单的详细信息。主要──明细型数据库体现了关系数据库的特点,即独立的数据库表之间基于它们共同的字段而发生联系。在这里Customer.DB和Orders.DB拥有一个共同的字段CustNo。

14.3.1 一对多关系的主要──明细型数据库应用程序

主要和明细数据库表之间存在一对多的关系,意思是说对于主表中的一条记录,在明细表中有多条记录与之对应。例如,创建一个主要──明细型数据库应用程序,其包括两个表Customer.DB和Orders.DB,它们分别作为主表和明细表,创建好的应用如图14.5所示,窗体中各部件的属性设置

表14.2 主要──明细型数据库应用中各部件的属性

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

部 件 属 性 属 性 值 注 释

──────────────────────────────────

Table1 Active True

(主表) DatabaseName DBDEMOS

TableName CUSTOMER.DB

──────────────────────────────────

DataSource1 DataSet Table1

AutoEdit False

──────────────────────────────────

Table2 Active True

(明细表) DatabaseName DBDEMOS

TableName ORDERS.DB

IndexFieldNames CUSTNO 指定字段CUSTNO作为

Table2中的索引字段

MasterField CUSTNO 指定与主表发生联系

的字段

MasterSource DataSource1 说明与主表相连接的

数据源即DataSource

──────────────────────────────────

DataSource2 DataSet Table2

AutoEdit False

──────────────────────────────────

DBGrid1 DataSource DataSource1

(对应主表)

──────────────────────────────────

DBGrid2 DataSource DataSource2

(对应明细表)

TableName ORDERS.DB

──────────────────────────────────

DBNavigator1 DataSource DataSource1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

一对多关系是非常普遍的关系。即便是简单的名字/ 地址数据库都有一对多的关系,因为一个人可能不止一个地址:家庭地址、工作地址、还可能有别墅地址。在本例中,公司的一个客户常常有多个订货单,当我们单击DBNavigator1中的向前、向后按钮时,会移动DBGrid1中的记录指针,而在DBGrid2中会自动显示与DBGridl 中当前记录相关的多条记录,即显示一个客户的信息时,同时会显示该客户的所有订货单的详细信息。

14.3.2 一对多──多关系的数据库应用

前面我们介绍了基于两个表的一对多关系的应用,下面我们介绍怎样创建一个从三个表中浏览数据记录的一对多关系的应用。

例如:一个客户也许有多张订货单,而每一张订货单中有多个订货项目,这样我们在Customer.DB表和Orders.DB表之间建立一个主要──明细型关系,同时在orders.DB 表和Items.DB表之间建立一个主要──明细型关系。

窗体中各部件的属性如表14.3所示

表14.3 一对多──多关系的应用中各部件的属性

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

部 件 属 性 属 性 值 注 释

──────────────────────────────────

Active True

Table1 DatabaseName DBDEMOS

TableName CUSTOMER.DB

──────────────────────────────────

DataSource1 DataSet Table1

AutoEdit False

──────────────────────────────────

Active True

DatabaseName DBDEMOS

Table2 TableName ORDERS.DB

IndexFieldNames CUSTNO

MasterField CUSTNO

MasterSource DataSource1

──────────────────────────────────

DataSource2 DataSet Table2

AutoEdit False

──────────────────────────────────

Active True

DatabaseName DBDEMOS

Table3 TableName ORDERS.DB

IndexFieldNames ORDERNO

MasterField ORDERNO

MasterSource DataSource2

──────────────────────────────────

DataSource3 DataSet Table3

AutoEdit False

──────────────────────────────────

DBGrid1 DataSource DataSource3

──────────────────────────────────

DBNavigator1 DataSource DataSource1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

窗体中其余的部件都是TDBEdit和TLabel部件,它们用于显示Customer.DB中的字段值和Order.DB中的字段值。在该例子中,总共连接了三个表, Customer. DB 表是主要表,Orders.DB表在窗体中起到了双重作用,它既是Customer.Db表的明细表,同时又是Items.DB表的主要表,Items.DB表是Orders.DB表的明细表。