第九章数据库应用程序设计•9.1数据库系统概述•9.2Delphi数据库应用程序体系结构•9.3数据库设计•9.4常用数据库组件•9.5数据库应用程序综合实例•习题9.1数据库系统概述•9.1.1基本概念–1.数据•数据(Data)是数据库中存储的基本对象。所谓数据,就是能被计算机识别与处理的符号。数据的种类很多,如数字、文字、表格、图形、图像、声音等,都属于数据。–2.数据库•所谓数据库(Database,简称DB)是长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。9.1数据库系统概述–3.数据库管理系统•数据库管理系统(DataBaseManagementSystem,简称DBMS)是一个以统一的方式管理、维护数据库中数据的一系列软件集合。DBMS是位于用户应用程序和操作系统之间的数据库管理系统软件,对数据库进行统一的管理和控制。–它的主要功能如下:•(1)数据定义功能•(2)数据操纵功能•(3)数据库的运行管理•(4)数据库的建立和维护功能•(5)数据库通信功能9.1数据库系统概述–4.数据库系统•数据库系统(DataBaseSystem,简称DBS)是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统和数据库应用程序组成。数据库的建立、使用和维护等工作只靠一个DBMS远远不够,还要有专门的人员来完成,这些人被称为数据库管理员(DataBaseAdministrator,简称DBA)。9.1数据库系统概述•9.1.2Delphi的数据库特性–Delphi提供了许多组件以方便地创建数据库应用程序。它可以访问多种数据库管理系统的数据库,数据库对象的数据成员既可在设计阶段设置,也可在运行阶段通过程序代码进行设置。Delphi的组件面板上提供了数据库应用程序开发中需要使用的组件选项卡。9.1数据库系统概述•9.1.3Delphi可以使用的数据源–Delphi数据库应用程序可以通过BDE获取它们所需的数据,BDE与不同类型的数据源打交道,BDE可以使用的数据源见表9-3。9.1数据库系统概述表9-3BDE可以使用的数据源数据源特性描述dBASE数据库数据库表是通过dBASE数据库管理系统或DBD建立的,每一个表是一个独立的.dbf文件Paradox数据库数据库表是通过Paradox数据库管理系统.db或dbd建立的,每一个表是一个独立的文件ASCII文件表是通过DatabaseDesktop建立的,每个.txt表是一个独立的文件本地InterBase服务器数据库是通过InterBase数据库管理系统.gbd建立的,多个表包含在一个数据库文件中SQL数据库服务器数据库是通过相应的数据库服务器提供的依赖Oracle、Sybase、Informix专用或通用工具建立的,也可以通过dbd或数据库管理系统MicrosoftSQLServer创建数据库,并通过SQLLink访问数据库管理系统InterBaseODBC数据源主要是指那些具有ODBC接口的数据库系统依赖于如MSAccess、Btrieve等的数据库9.2Delphi数据库应用程序体系结构–一个数据库应用程序往往包括两部分:数据库访问部分和用户界面。数据库访问部分直接或间接访问数据库,这为数据库应用程序和数据库之间提供接口;而用户界面主要是为了方便用户使用,尽量要设计友好的界面,方便用户操作。–在编写数据库应用程序时,一般把数据库访问部分和用户界面分别封装到不同的模块中。在Delphi中提供了数据模块(DataModule)这种容器,在编写数据库应用程序时把数据库访问部分的内容放在数据模块中,这样就便于数据库应用程序数据存取的一致性,便于程序的调试和后期维护。–数据库应用程序的体系结构主要由两方面决定,一方面是使用的数据库类型(即是本地数据库还是远程数据库),另一方面是同时访问数据库的用户数以及数据库中需要存储哪些类型的信息。由此,数据库应用程序结构可以分为三种:单层结构、两层结构和多层结构。9.2Delphi数据库应用程序体系结构•9.2.1单层结构–在单层数据库应用程序中,应用程序和数据库共享同一个文件系统,它们使用本地数据库或文件来存取数据。一个单层的数据库应用程序同时包含了用户界面和数据访问机制(可能是通过BDE,也可能是通过文件)。单层数据库应用程序的体系结构如图9-1所示。在此结构中,可以通过基于BDE的数据集组件从本地数据库中获取数据,再通过数据源(DataSource)组件向用户提供数据。9.2Delphi数据库应用程序体系结构数据库BDE数据集组件窗体数据模块用户接口数据源BDE引擎图9-1单层数据库应用程序的结构9.2Delphi数据库应用程序体系结构•9.2.2两层结构–在两层数据库应用程序中,客户程序提供用户界面,通过BDE、ADO从远程数据库服务器获取数据。两层数据库应用程序的体系结构如图9-2所示。–把一个单层数据库应用程序转换为两层数据库应用程序,只要修改数据集组件的属性连接一个SQL服务器就行了。9.2Delphi数据库应用程序体系结构数据库BDE/ADO数据集组件窗体数据模块用户接口数据源BDE引擎/OLEDB图9-2两层数据库应用程序的结构9.2Delphi数据库应用程序体系结构•9.2.3多层结构–多层数据库应用程序是为了适应网络技术的飞速发展而发展起来的一种新技术。它把整个应用程序分为多个单元,所有单元一齐合作完成对数据库的管理。它是建立在两层数据库应用基础上的,只要深刻理解了两层数据库模型,就能很好地掌握多层结构数据库应用程序。9.2Delphi数据库应用程序体系结构–在多层结构数据库应用程序中,客户程序、应用服务器和远程数据库服务器通常分布在不同的机器上。客户程序主要提供用户界面,它向应用服务器请求数据和申请更新数据,再由应用服务器向远程数据库服务器请求数据和申请更新数据。9.3数据库设计–数据库应用程序的设计包括两个部分:数据库设计和应用程序设计。在开发数据库应用程序之前,必须进行需求分析,对数据库的概念结构、逻辑结构和物理结构进行规范设计,这是决定数据库应用程序开发成败的关键。通常数据库所包含的大量信息是以表的形式存储。数据库中有的表是独立的,有的表之间存在一定的关系,设计数据库就是将大量信息经过分析和归纳,分别存储到多个表中,确定表之间的相互关系。9.3数据库设计•9.3.1常用数据库–在Delphi7中要开发数据库应用程序,首要的任务就是访问数据库。Delphi7可以访问多种数据库,如Paradox、Access等基于文本的数据库、Oracal、Infomix、MicroSoftSQLServer等大型数据库。对这些数据库的访问可以通过BDE、ADO组件中的OLEDB方式进行访问。9.3数据库设计•常用数据库有–1.Paradox–2.Access–3.大型数据库•常用的大型数据库有InterBase、Oracle、Sybase、Infomix、DB2和MicrosoftSQLServer等9.3数据库设计•9.3.2数据库、表的创建与维护–1.创建数据库–【例9-1】在BDE中创建别名为Rsgl的数据库–2.创建表–【例9-2】在DatabaseDesktop中创建表Department,其结构见表9-4。–3.修改表结构–4.向表中添加记录–【例9-3】向Department表中添加一批记录。9.3数据库设计表9-4Department表结构字段名数据类型长度部门号A3部门名称A10负责人A8电话号码A119.3数据库设计字段名数据类型长度职工号A6姓名A8性别A2出生日期D8婚否L1职称A10职务A10基本工资$6部门号A3简历M100表9-5Employees表结构9.3数据库设计表9-6Department表中的记录信息部门号部门名称负责人电话号码001技术处丁一56221356002生产处杨帆452255429.4常用数据库组件–Delphi7提供了很多的数据库组件,使得开发数据库应用程序变得相当容易。Delphi7中为了创建数据库应用程序需要使用BDE数据集组件、数据访问组件和数据控制组件。Delphi使用可视化的组件创建数据库应用程序,跟创建其它的非数据库应用程序一样,数据库组件都具备一定的属性,程序设计人员可以在设计过程中设置组件的多种属性,也可以在程序运行过程中通过程序来设置组件的各种属性。在Delphi组件面板上的DataAccess和DataControl选项卡上的组件是用于开发数据库应用程序的。数据访问组件、数据控制组件以及它们与数据库、用户界面的有机联系如图9-14所示。9.4常用数据库组件图9-14数据库组件的体系结构9.4常用数据库组件•9.4.1BDE数据集组件–BDE选项卡上有数据集组件TTable、TQuery、TStoredProc以及与TQuery组件相联系的TUpdateSQL组件。Database与Session组件用于建立数据库连接;BatchMove组件用于复制数据;NestedTable组件主要用于将主从关系的数据嵌套在子数据库表格中。BDEClientDataSet组件将ClientDataSet与BDE相关的数据访问组件结合起来。9.4常用数据库组件–1.TTable组件•(1)用途–TTable组件是使用频率最高的数据库组件,该组件可以建立数据库应用程序•(2)主要属性–①Active属性–②DatabaseName属性–③TableName属性–④TableType属性–⑤Exclusive属性9.4常用数据库组件•(3)与表的创建与删除相关的属性与方法–①Fields属性–②FieldDefs属性–③CreateTable方法–④DeleteTable方法–⑤RenameTable方法•(4)与数据库表索引相关的属性和方法–①IndexName属性–②IndexFieldCount属性和IndexFields属性–③IndexDefs属性–④GetIndexNames方法9.4常用数据库组件•(5)数据查询–①Locate方法和Lookup方法–②GotoKey方法和FindKey方法–③GotoNearest方法和FindNearest方法–④SetKey方法•(6)与表记录的定位、增加、删除、修改操作相关的属性和方法–①BOF和EOF属性–②RecNo属性–③First方法和Last方法–④Prior方法和Next方法–⑤Append方法和AppendRecord方法–⑥Insert方法和InsertRecord方法–⑦Post方法和Edit方法–⑧Cancel方法和Delete方法–⑨SetRecords方法–⑩EmptyTable方法9.4常用数据库组件–【例9-4】在例9-3所创建的数据库基础上使用Table组件实现查询、插入、删除、更新的功能。•查询代码编写•单击设计界面中的“查询”按钮,查询employees.db数据库表中的记录。•Delphi提供了多种实现查询功能的方法:•①调用Locate方法•在“查询”按钮的Onclick事件的处理程序中加入如下代码:•procedureTForm1.Button1Click(Sender:TObject);•begin•Table1.Locate('姓名','丁一',[]);//查询姓名为“丁一”的记录•end;9.4常用数据库组件•②调用GotoKey方法•在查询之前,要确保查询的字段是关键字段或辅助索引字段,如果要查询的字段不是关键字段或辅助索引字段,则查询过程失败,系统会报错。•例如,在“查询”按钮的Onclick事件的处理程序中加入如下代码:•procedureTForm1.Button1Click(Sender:TObject);•begin•Table1.IndexFieldNames:='职工号';//指定查询字段•Table1.SetKey;//将Ta