43
Delphi 7 Delphi 7 数数数数数 数数数数数 数数数数 数数数数 数数 数数 数数 数数 数数数数数数数数数 数数数数数数数数数

Delphi 7 数据库编程 学习捷径

  • Upload
    aurek

  • View
    248

  • Download
    0

Embed Size (px)

DESCRIPTION

Delphi 7 数据库编程 学习捷径. 敬喜 王昀 北京科海电子出版社. 目 录. 第 1 章 Delphi 7 集成开发环境( IDE )介绍 第 2 章 Delphi 7 数据库系统概述 第 3 章 Delphi 7 和数据库 第 4 章 创建数据库 第 5 章 读写字段值 第 6 章 计算字段 第 7 章 链接表 第 8 章 查找和确认数据 第 9 章 制作数据输入窗体 第 10 章 列表和查找表 第 11 章 查询和设定范围 - PowerPoint PPT Presentation

Citation preview

Page 1: Delphi 7 数据库编程 学习捷径

Delphi 7Delphi 7 数据库编程数据库编程 学习捷径学习捷径

Delphi 7Delphi 7 数据库编程数据库编程 学习捷径学习捷径

敬喜 王昀敬喜 王昀

北京科海电子出版社北京科海电子出版社

敬喜 王昀敬喜 王昀

北京科海电子出版社北京科海电子出版社

Page 2: Delphi 7 数据库编程 学习捷径

目 录• 第 1 章 Delphi 7 集成开发环境( IDE )介绍• 第 2 章 Delphi 7 数据库系统概述• 第 3 章 Delphi 7 和数据库• 第 4 章 创建数据库 • 第 5 章 读写字段值 • 第 6 章 计算字段• 第 7 章 链接表• 第 8 章 查找和确认数据• 第 9 章 制作数据输入窗体• 第 10 章 列表和查找表• 第 11 章 查询和设定范围• 第 12 章 多窗体和打印窗体• 第 13 章 制作报表• 第 14 章 开发图表• 第 15 章 将图或文件存入数据库• 第 16 章 编写多媒体数据库应用程序 • 第 17 章 数据库开发实例——学生管理系统

Page 3: Delphi 7 数据库编程 学习捷径

第 1 章 Delphi 7 集成开发环境( IDE )介绍

1. Delphi 7 IDE 运行界面 通常,启动 Delphi 7 的方法是:单击“开始”按钮,然后依次从级联菜单中选择“程序” \Borland Delphi 7\Delphi 7 选项,就进入了 Delphi 7IDE 运行界面,如图 1.1 所示。其各组成部分的功能见教材 1.3 ~ 1.7 节。

图 1.1 Delphi7 IDE 运行界面的组成

1

2

4

5

3 ① 主窗口② 窗体窗口③ 代码编辑窗口④ 对象查看器⑤ 对象树形结构浏览窗口

Page 4: Delphi 7 数据库编程 学习捷径

1

23

2. Delphi 7 主窗口

主窗口是 Delphi 7 IDE 的核心,开发人员通过主窗口进行创建工程、编写程序、调试程序、运行和维护应用程序等一系列管理工作。 Delphi 7 主窗口由 3 个部分组成(其功能见教材 1.3 节),如下图所示。

② 组件模板( Component Palette)

① 主菜单( Menu )

③ 快捷工具条( Speed Bar )

Page 5: Delphi 7 数据库编程 学习捷径

3. 组件模板及组件设置 放置组件、设置属性和为“终止”事件编写代码的步骤:

② 单击窗体空闲部分,放置一个按钮。③ 设置按钮标题为“终止”。 ④ 在事件标签页上双击 OnClick 右边单元格。

⑤ 在代码编辑窗口中编写终止程序的代码。

① 在组件模板上选择组件,例如 Ok 按钮。

③④

Page 6: Delphi 7 数据库编程 学习捷径

第 2 章 Delphi 7 数据库系统概述1. Delphi 7 数据库特性

数据访问组件( Data Access Components ):主要用于说明数据库的有关信息,如应用程序要访问(连接)的数据库和要访问数据库中的具体的数据库表,以及要访问表中的哪些字段等。常用的数据访问组件有 TTable 、 TQuery 、 TDataSource 等。 数据控制组件( Data Control Components ):主要用于显示浏览数据库中的数据信息,为用户提供可视化的界面,可以让用户对数据库中的数据信息,进行浏览、编辑、插入、删除等操作。因而,数据控制组件也被称之为数据浏览组件。数据控制组件既能够把数据库中的数据显示到窗体中,又能将其自身的经过修改的数据写回到数据库中。常用的数据控制组件有 TDBGrid 、 TDBEdit 、 TDBCheckBox 等。

BDE

Data Access Components 数据访问组件

TTable TDataSource

TQuery TDataSource

Data Control Components 数据控制组件

TDBGrid

TDBEdit

TDBCheckBox

TDBGrid

TDBEdit

TDBCheckBox

( 用户接口 )

数 据 库

数据库引擎 : BDE数据访问组件 数据控制组件

Page 7: Delphi 7 数据库编程 学习捷径

DBD 窗口工具条

DBD 窗口菜单

2. 数据库桌面( DBD : Database Desktop )

数据库桌面 DBD 是数据库维护和数据定义的工具,利用它可以完成查询、连接、建立、重建结构(简称重构)、索引、修改和复制数据库表,而且在操作时,用户不必拥有 Paradox 或 dBASE 数据库管理系统。使用数据库桌面 DBD 还可以把一种格式的数据和数据字典拷贝为另一种格式,例如,将一个 dBASE 的表拷贝到远程的 SQL 服务器上的一个数据库中去。另外,数据库桌面 DBD 程序可以建立数据库并执行与数据库有关的其他操作。例如,设置工作目录、设置工作目录别名、创建数据库表、在数据库表中输入数据、对表中记录排序、移动记录、用不同字体或其他形式显示表中的数据,以及用表来检查和测试 Delphi 7 程序等。

Page 8: Delphi 7 数据库编程 学习捷径

3. 部分数据访 问组件的主 要用途

部分数据访问组件的主要用途

组件名称 主 要 用 途

TDataSource

是数据集组件与数据控制组件之间传送数据的通道

TTable 是存取数据库表的媒介,通过 BDE存取数据库表中的数据,再与 TDataSource 进行对话,使得数据控制组件能在 TTable 中访问数据,以及显示、编辑数据

TQuery 利用 SQL语言访问数据库表中的数据,并与 TDataSource 进行对话以实现数据控制组件访问数据库

TStoredProc

在应用程序中用于访问远程服务器中的存储过程(它封装了数据库服务器上的存储过程)

TQuickRep 在应用程序中用于创建数据库的输出报表

TSession 这是一个全局的组件,用户可以在程序中使用它的属性和方法

TDatabase 它可以连接到单一数据库上,例如,当需要与数据库持续连接、使用了定制的数据库服务、使用事物处理组件或程序中确定了 BDE 别名时,就可以使用 TDatabase 组件。但最主要的用途是在 SQL 数据库的应用中

Page 9: Delphi 7 数据库编程 学习捷径

4. 部分数据控 制组件的主 要用途

部分数据控制组件的主要用途组件名称 主 要 用 途

TDBText 是一个只读的数据显示组件,它显示的是表中的当前记录值,因此它的显示是动态变化的

TDBEdit 专门用来显示和编辑数据库表中的单个字段。通过它的 DataSource 属性和 DataField 属性来指定对应的表和字段

TDBGrid 以网格方式显示数据库中的数据并可以进行编辑。利用字段编辑器( Field Editor )可以对数据库中字段的显示格式、顺序或者是否显示进行控制

TDBCheckBox 浏览数据库中数据的复选框,用于显示和编辑数据库中布尔型字段的字段值

TDBNavigator 称为导航控件,可用来前后移动记录指针,对单个记录进行编辑(包括插入、删除、刷新显示和取消等操作)

TDBImage 用于显示、复制、粘贴数据库表中的图像类型的字段

Page 10: Delphi 7 数据库编程 学习捷径

第 3 章   Delphi 7 和数据库 3.1 创建一个 Delphi 7 工程( Project )的步骤 3.2 定制窗体

( 1 )启动 Delphi 7 ,从 File 菜单中选择 File\New\Applicatin 命令,创建一个新工程。( 2 )保存新的工程。从 File 菜单中选择 File\Save As 命令 , 保存单元文件 CHello.pas 和工程文件 Hello.dpr 。( 3 )执行程序便生成一个可执行的 EXE 文件 Hello.EXE 。

① 第 3 章第 1节完成的定制窗体

CdmHello

清除欢迎

终止

② 执行程序后单击“欢迎”按钮的程序窗口

欢迎 清除

终止

3.3 编写代码为“终止”按钮编写代码的目的是,当用户单击“终止”按钮时,可以终止 CHello.EXE 程序的运行。那么,应该为 cmdExitClick 过程输入下列代码: Application.Terminate; 。这样,当用户单击“终止”按钮时,程序执行“ Application.Terminate;” 语句,即终止 CHello.EXE 程序。

Page 11: Delphi 7 数据库编程 学习捷径

3.4 Methods (方法)

现在,我们来介绍有关Methods (方法)的主题。 在 Pascal 语言中,在对象中说明的过程或函数称为方法。它的语法是:

例如, Application.Terminate; , 这个程序语句说明 Terminate (终止)方法被调用,或者说, Application 对象调用了 Terminate 方法。当程序执行这个语句时,就实现这个 Terminate 方法,即终止程序运行。 又例如程序语句 Memo1.CutToClipboard; ,表明调用一个名为 Memo1 的Memo 组件的 CutToClipboard( 剪贴 ) 方法。其中, Memo1 是一个对象的名称,当程序执行这个语句时,就实现这个 CutToClipboard 方法,即把 Memo1 中的文本剪贴到剪贴板上去。 举例:作为一个例子,打开一个空窗体,加入一个 Memo 组件和一个按钮,设置按钮的 Name属性为 Cut ,再将按钮的 Caption 属性设置为 &Cut 。以及双击按钮的 OnClick 事件右边单元格,弹出代码编辑窗口,输入语句 Memo1.CutToClipboard; 。这样就为 Cut 按钮建立了 CutClick 事件处理过程:

方法 CutToClipboard 实现剪贴 : Procedure Tform1.CutClick(Sender:TObject);BeginMemo1.CutToClipboard;End;

方法 CopyToClipboard 实现拷贝: ProcedureTform1.CopyClick(Sender:TObject);BeginMemo1.CopyToClipboard;End;

再看一个例子

Page 12: Delphi 7 数据库编程 学习捷径

3.5 数据库设计

Delphi 开发数据库应用程序的一般步骤  1. 系统设计步骤 1 :工作活动性质鉴别 对设计者来说,当他承担了某个部门建立数据库的任务时,首先应当鉴别该部门的需要和用户的需求。并做出下列决策: ( 1 )  决定该部门数据处理的一般策略。 ( 2 )  估算现有数据处理能力及其性能。 ( 3 )  进行可行性研究,规划各种方案。 ( 4 )  选择某种方案。 ( 5 ) 搜集有关信息类型、确定有什么样的信息流入和流出,以及信息流入流出的频度等。步骤 2 :定义 此步骤是建立该部门的模型。主要工作是: ( 1 )  在书面上记载可能出现的数据类型。 ( 2 )  建立原始概念:实体集合、实体属性、属性值、实体联系集合(简称关联集合)。步骤 3 :用数据表示实体集合和关联集合 ( 1 )  确定每一个实体类型,并为其分配一个惟一的名字。 ( 2 )  确定每一个定义域,并为其分配一个惟一的名字。 ( 3 ) 为每个实体类型确定主键。 ( 4 )  用主键定义域代替每一个实体。求出与实体属性对应的各个关系,并给每个关系确定一个名字。 ( 5 )  求出全部的关联类型,并为其确定一个名字。 ( 6 )  用相应的主键来代替关联类型。步骤 4 :建立 E-R 模型 以下的步骤是对关系型数据库来说的。步骤 5 :将实体和关联转化为关系步骤 6 :分解关系。对每个关系确定其不可分解单元,可以得到一个基本关系集合。步骤 7 :根据传递定律确定所得到的基本关系集合的传递闭包。步骤 8 :由得到的传递闭包推导最小覆盖,得到若干个最小覆盖,选择其一作为数据库总体逻辑模型。

Page 13: Delphi 7 数据库编程 学习捷径

2. 系统实现 在系统实现阶段,使用 Delphi 可以建立和测试系统设计阶段所构想的应用程序。在此阶段,最好使用数据库的一个备份,以防止应用程序可能破坏 Delphi 数据库后无法恢复。如果应用程序最终要配置到使用远程终端的数据源的话,可以有两种选择: l. 在本地服务器上,使用备份的数据库的数据进行开发和调试。 2. 在远程服务器上,使用备份的数据库的数据进行开发和调试。 其中,对前者来说,它独立于服务器,因此不会影响服务器的其他特性。而后者就有一定的危险性,因为,程序的可能错误而导致服务器的瘫痪。 值得说明的是,系统设计独立于特定计算机系统;而系统实现必须考虑实际的计算机系统,以及该系统所支持的数据库管理系统( DBMS )。系统实现阶段的主要工作: ( 1) 实现物理设计。通过使用物理设计技术以选择最适合于数据模型结构的物理结构, 这些技术随采用的物理设备及存取方法而异。量化数据是物理设计中的一个重要因素。所选数据库逻辑结构和物理结构的定义由数据库定义语言完成。 ( 2)选择存取数据库的方法。在选择物理结构时,存取方法是特别重要的,存取方法决定了设计完成后数据库的性能,而用户界面软件决定了数据库是否便于用户使用。一般系统中对数据库的存取是由数据库联机查询语言或嵌入在程序设计语言中的输入 /输出命令完成的。 ( 3 ) 确定存储需求说明:存储需求定义用户关于数据的使用方法。其中的存取路径,用以说明存储需求所涉及的实体集、关联集、逻辑记录,同时还要说明这些结构的使用顺序,以及对每个结构所完成的操作,这些操作可以是检索、存储和插入。 ( 4) 确定量化数据说明:一般方法是用数据字典作为数据项和记录型的描述文本。数据字典中可以包括:组织模型中各组成部分的数据项名、类型、取值范围、长度和数据量、各实体间联系的频度、存取需求执行频度等。 ( 5 ) 选择开发软件的技术手段(例如,使用 Delphi 7) 进行软件开发。

3. 系统运行和维护 系统运行是为了考核系统及其设备、软件系统和数据库应用程序等是否能达到预期的目标。而对应用程序来说,更多的是调试。所谓维护是指在运行中排除应用程序的错误及不合理的内容,以及在系统运行中还要根据用户提出的一些新的要求和建议,对应用程序做一定的修改,使其进一步得到完善和提高。 在每个实施步骤中都有数据库的开发和应用程序界面的开发任务。数据库和应用程序开发任务的执行,则会根据开发项目的大小和范围而定,可能会由不同的人来完成和执行。

Page 14: Delphi 7 数据库编程 学习捷径

3.6 例子:设计一个商品销售数据库(简称 PSDB )

顾客( Customer )到商店购买商品( Parts ),交款后,商店要给顾客开出发票。发票上标出的内容有:顾客姓名、单位、地址、商品名、单价、总价以及购买日期等。以往这项工作是手工在发票单上填写,现在要用计算机来完成,那么该如何做呢?

对商店或者计算机来说,要求有一份顾客名单,我们称之为 Customer 表。还要有一份商品清单,我们称之为 Parts 表。将这两张表联系在一起,就构成了PSDB 数据库。

现在给数据库下个定义:按照一定结构组织的相关的数据集合称做数据库。 在数据库术语中,把顾客、商品称做实体,实体之间的联系称做关联。由

此可见,实体及其关联才构成数据库。 在关系模型中,“关联”是不可缺少的,因此,关联也就转化为实体,也

可以称之为关联实体。因此,在以后的讨论中,凡是说到实体均包括关联实体。 现在,在我们的 PSDB 数据库中,把实体 Customer 和 Parts 联系起来的是

关联实体,为其命名为 Items (项目)。这样, PSDB 数据库是由实体 Customer、 Parts 和 Items 构成。

以下就来介绍数据库逻辑设计的基本内容和方法。

Page 15: Delphi 7 数据库编程 学习捷径

Items

Customer

Parts

PSDB 数据库的 E-R 图

关联实体

实体

实体

CustNum

LastName

FirstName

Customer

标明 Customer 的属性

实体 属性

在数据库通用设计方法中,通常采用一种“实体 - 联系”方法,简称 E-R 方法。这样,就可以将PSDB 数据库用 E-R图表示。

3.7 E-R方法

在完成实体设计后,例如完成 E-R图设计后,就要为每个实体标明属性。首先,数据库中的每个实体都要有个标识符,而且是惟一的,称其为主标识符(也称为主关键字或主属性)。

1. 标明 Customer 属性

例如,在 PSDB 数据库中的 Customer 实体应有一个主关键字,显然,顾客的姓名不成,因为有重名重姓,所以只好给顾客 Customer 再加一个顾客编号 CustNum 。同样理由,要给商品 Parts 加一个编号 PartNum ,以及给关联实体 Items加一个编号 ItemNum 。注意,为了简化数据库设计的说明,对于现在讨论的课题,我们只列出主要的属性,而不追求对它的客观需求。设 Customer 属性有 CustNum (顾客编号)、LastName (顾客的姓)和 FirstName (顾客名字)。

Page 16: Delphi 7 数据库编程 学习捷径

设 Parts 属性有 PartNum (商品编号)、 Description (有关商品的说明)、QtyInStock (商品的库存量)和 SellingPrice (销售价)。

标明 Parts 属性 实体 属性

PartNum

Description

QtyInStock

Parts

标明 Parts 的属性

SellingPrice

设 Items 属性有 ItemNum ( Items 记录编号)、 CustNum (顾客编号) PartNum (商品编号)和QtySlod (商品销售量)。

标明 Items 属性

现在来说明为什么给 Items标明这些属性。首先,为什么要建立 ItemNum 属性呢?因为 Items 需要有一个惟一的主标识符(也称为主属性),也就是需要有一个惟一的主关键字。另外, Items 是把 Customer 表和Parts 表联系起来的关联实体,那么最简明的联系,就是在 Items 中放置 Customer 的主关键字 CustNum 和 Parts 的主关键字 PartNum 。事实上,根据 Customer的主关键字 CustNum 就可以通过 Items 中的 Parts 的主关键字 PartNum 查到 Parts 表中的一切信息,例如,某商品的销售价是由 Parts 表中属性 SellingPrice 标识的。又例如有关每种商品的说明是由属性 Descrption 标识的。同时,依据 PartNum 还可以在 Items 表中直接查到购买了多少该种商品,即销售量是由 Items 表中的属性 QtySold 标识的。

ItemNum

CustNum

PartNum Items

图 3.2.3 标明 Items 的属性

( 关联 )实体 属性

QtySlod

Page 17: Delphi 7 数据库编程 学习捷径

在关系型数据库中,把实体视为一种关系。关系的一般表示方法如下:

关系名(属性 1 ,属性 2 ,……,属性 n )

在一个关系表达式中,也需要确定一个惟一的标识符(也称之为主属性,或主键,或主关键字),用以标识这个关系。如果在关系表达式中,我们假设指定“属性 k” 为主属性(关键字),那么在关系表达式中就把属性 k放在最前面并用下划线“ _” 表示它是主属性(主键字)。于是,关系表达式’就变成:

关系名(属性 k ,属性 1 ,属性 2 ,……,属性 n )

这样,根据给 Customer 、 Parts 和 Items 标明的属性,就可以把它们用关系表达式表示如下:

这三个关系就是 PSDB 的关系数据库模型。

Customer ( CustNum , LastName , FiestName )

Parts ( PartNum , Description , QtyInStock , SellingPrice )

Items ( ItemNum , CustNum , PartNum , QtySlod )

3.8 关系型数据库 1.关系模型

Page 18: Delphi 7 数据库编程 学习捷径

2. 二维表 在关系模型中,一个关系可以用一个二维表来表示。二维表的行称为记录,列称为字段(记录项)。把这样的表统称为数据库表。一个数据库表的一般化表示。

⑴ 关系 Customer ( CustNum , LastName , FirstName )的二维表表示。其表结构:

⑵ 关系 Parts ( PartNum , Description , tyInStock, SellingPrice )的二维表表示。其表结构:

PartNum Description tyInStock SellingPrice       

       

ItemNum CustNum

PartNum

QtySlod       

       ⑶ 关系 Items ( ItemNum ,CustNum , PartNum , QtySlod )二维表表示。其表结构:

CustNum LastName FiestName     

     

字段名称 

记录 

字 段

用二维表表示关系

Page 19: Delphi 7 数据库编程 学习捷径

3. 数据库表结构设计 所谓表结构设计就是对表中的每个字段( Field )、字段类型( Type )、字段大小( Size )以及该字段是否为主关键字段( Key )等进行规定,以便将来能够对表进行数据操作(包括对数据的存取、增删、查询、修改等)。

⑴ 设计 Customer 表结构

⑵ 设计 Parts 表结构

Field (字段)

Type (类型) Size (大小)

Key (主关键字)

ItemNum Autoincriment(+) n/a Yes

CustNum Numeric n/a Yes

PartNum Numeric n/a Yes

QtySlod Numeric n/a No

⑶ 设计 Items 表结构

Field (字段)

Type (类型)

Size (大小) Key (主关键字)CustNum Numeric(N) n/a Yes(是 )

LastName Alpha(A) 30 No(不是 )

FiestName Alpha(A) 25 No(不是 )

Field (字段) Type (类型)

Size (大小) Key (主关键字)PartNum Numeric n/a Yes

Description Alpha 40 No

tyInStock Numeric n/a No

SellingPrice Numeric n/a No

Page 20: Delphi 7 数据库编程 学习捷径

4. 设计数据库表的数据 现在给出 PSDB 数据库中三个表的实际使用的数据。 设计好的这些数据,我们以后还要用到。

(1) Customer 表的数据

注 : ItemNum 的类型( Type )设置为 Autoincriment 。这就意味, ItemNum 的值会由程序自动地填入。因此,在制作 Items 表的数据时,不要在该字段中填入任何东西。

CustNum LastName FiestName1001 Kennedy Tom

1002 Anderson Jean

1003 George Tim

1004 Sam Jean

(2) Parts 表的数据PartNum Description QtyInStock SellingPrice

1001 PartNum 101 1,000 301002 PartNum 102 54 2001003 PartNum 103 21 1231004 PartNum 104 200 751005 PartNum 105 11 10

(3) Items 表的数据ItemNum[注 ]

CustNum PartNum QtySlod1001 101 3

  1003 102 2  1001 105 1  1001 102 6

Page 21: Delphi 7 数据库编程 学习捷径

第 4 章 创建数据库

1. 构造表的结构

创建过程如下: ( 1 )启动数据库桌面 DBD 。 ( 2 )设置工作目录。选择 File\ Working Directory 命令。 ( 3 )设置工作目录的别名。选择 Tools\Alias Manager 命令。选择 Table\Restructure 命令,构造表 Customer.db 的结构。

2.向 Customer 表中输入数据

① 选择 File\Open\ Table命令。打开 Customer.db 表。② 选择 Table\Edit Data命令,将表置于编辑模式。③向一个字段输入数据。即单击该字段,然后即可输入数据。使用 Navigator 控件对表中记录排序、移动。

3.继续向 Parts.db 和 Items.db 表输入数据,完成之后,建立 PSDB完成。

Page 22: Delphi 7 数据库编程 学习捷径

4. 创建 Delphi 数据库程序 ( 1 )建立一个新的工程  运行 Delphi 7;  从主菜单中选择 File\New\Application命令 , 则 Delphi 7 自动创建一个新工程。   从主菜单中选择 File\Save As命令,保存单元文件 CMyCust.Pas ,保存工程文件 MyCust.Dpr 。 ( 2)用数据库窗体向导创建窗体 在数据库窗体向导 Database\Form Wizard命令创建的 Form2窗体上,已经自动地放置了 5个控件: TPanel 、 TDBNavigator 、 TDBGrid 、TTable 和 TDataSource 。

Navigator控件

 

TTable控件

 

DBGrid控件

 

Tpanel控件

 

TDataSource控件

 

( 3 )执行 MyCust 程序 当程序被运行时,便自动生成一个可执行的 .EXE 程序。 Delphi 7会显示 Customer.DB 表中的数据。其中 Navigator控件中辉亮的按钮是可用的,可以使用 Navigator 控件的按钮在各记录之间移动。

Page 23: Delphi 7 数据库编程 学习捷径

第 5 章 读写字段值 5.1 字段编辑器和列编辑器

字段编辑器

列编辑器 Columns Editor

Add fields 命令:使用这个命令可为 Table 对象增加物理字段。每个增加的字段都代表窗体类中的一个对象。所谓“增加物理字段”,是指有选择地使用数据库表中实际存在的字段,因为,根据需要不是总要使用数据库表中实际存在的全部字段。在实际操作中,虽然数据库表中实际存在很多字段,但有些是当前不需要的字段,就不去选择它们了。 在字段编辑器 Fields Editor 中“增加物理字段”、不被选择的字段或者被删除的字段,都不会改变数据库表中实际存在的字段。 New fields 命令:使用这个命令可以创建新的数据库表中实际不存在的字段。这种字段分为三类: Data( 数据字段 ) 、 Calculated (计算字段)和 Lookup (查找字段)。所创建的每个新字段都代表窗体类中的一个对象。而且主要是创建计算字段( Calculated )。但所创建的新字段也不会添加到实际的数据库表中。它仅用于显示的目的。 不要忘记!要想创建和修改实际的数据库表,还得使用数据库桌面 Database Desktop 程序。

双击 Grid1 控件

双 击 ItemsTable 控件

Page 24: Delphi 7 数据库编程 学习捷径

5.2 使用字段编辑器选择字段

① 双击 ItemsTable 控件,弹出数据库表字段编辑器

② 在 编 辑 器内单击鼠标右键,弹出快捷菜单

③ 在快捷菜单中选择 Add all field, 然后选 择 Select all,则 Itemss.db 表 的所有字段被选择。

( 1 )双击 ItemsTable 控件 ,Delphi 7 显示数据库表字段编辑器。( 2 )操作过程如下图所示。

在 Items.db 表中选择字段

Page 25: Delphi 7 数据库编程 学习捷径

5.3 使用列编辑器选择字段 选择网格显示字段( 1 )双击 Grid 控件 ,显示列编辑器窗口。( 2 )操作过程如下图所示。

① 在 Grid 内双 击,显示列编辑器

② 在列编辑器内单 击鼠标 右键,弹出菜单

③ 选择“添加所有字段”按钮或选择菜单中 Add All Fields 则显示 Items.db 表的全部字段

Add All Fields命令

Page 26: Delphi 7 数据库编程 学习捷径

5.4 使用列编辑器选择显示字段

如下图所示,选中要删除的字段 FieldName ,单击“删除”按钮,字段 FirstName 即被删除。这里所谓删除是非永久性删除,即不是删除数据表中的字段,而是不在网格表中显示它。

恢复字段

添加字段

删除字段

添加所有字段

列编辑器快捷菜单按钮的功能

Page 27: Delphi 7 数据库编程 学习捷径

 

现在采用上页图中的结果,即只选择含有两个字段 CustNum 和 LastName 的 DBGrid1 的网格表。我们看一看 Delphi 7 为字段 CustNum 和LastName 还做了些什么工作? 事实上,一旦选择了这两个字段, Delphi 7 就在 Form2 窗体中自动地放置两个不可见的附加组件 CustomerTableCustNum 和 CustomerTableLastName ,通常把这种附加组件称为字段对象。当然,可以像其他任何组件一样查看和设置它们的属性,而且这一点也是非常重要的特性。 打开对象查看器( Object Inspector )上的对象选择器( Object Selector )的下拉列表框,就会看到 CustomerTableCustNum 和 CustomerTableLastName 这两个对象。如下图所示。

5.5 字段对象

Page 28: Delphi 7 数据库编程 学习捷径

③ 在对象查看的 Properties 标 签页 中设置 Align 属性为 alNone, 并使 Grid框变小。

5.6 用代码改变字段属性

① 启动 Delphi 7 执行 MyCust 程序

② 选中 Grid 控件 , 打开对象查看器 的 Properties 标签 页。

1. 设置 Grid 控件的边框 设置 Grid 控件的边框的目的是使之可以调整大小,以适应用户的要求。操作过程如图 5.5 所示。

Page 29: Delphi 7 数据库编程 学习捷径

3. 设置 Checkbox1 ( Name 设置为 chkVisible )和 Checkbox2 ( Name 设置为

chkCenter )复选框。为复选框 chkVisible 和 chkCenter 的 OnClick 事件添

加代码 :

2.给 Exit 按钮的“单击”事件添加代码

在OnClick 事件的 cmdExitOnClick 过程代码窗口中添加如下代码: Application.Terminate;

填写的代码

begin

if ( 条件 )Then

语句 1

else

语句 2;end;

如果满足 条件执行语句 1

如果不满足 条件执行语句 2

程序语句结构 说 明

Page 30: Delphi 7 数据库编程 学习捷径

4 . 读写字段值

(1) 给 cmdCustomerNumber 按钮的 OnClick 事件添加代码,使得当该代码被执行时,作为   lblValue标签的 Caption 属性值。  ① 选中 cmdCustomerNumber 按钮,并打开对象查看器的 Events标签页。 ② 双击 Events 标签页的 OnClick 事件右边的单元格, Delphi7 弹出 cmdCustomerNumberOnClick 过程的代码对话窗口,添加代码,如下图所示。

(2 ) 代码的含义:    lblValue.Caption:=    ‘ CustomerNum:’+       CustomerTableCustNum.AsString;  现在来解释这个语句。这个语句的含义是: lblValue 对象的 Caption 属性将接受“:=” 之后的值‘ CustomerNumber:’+ CustomerTableCustNum.AsString 。但要知道, Caption 的属性是字符型的,因此,要求所赋的值也必须是字符型的。首先知道,‘ Customer Number:’ 是个字符串(用‘和’括起来的内容即表示是个字符串)。但是 CustomerTableCustNum 是数字型,而不是字符型的,要想把其值赋给 Caption,就必须转换类型。属性 AsString 的作用就是将“ .” 之前的 CustomerTableCustNum 转换为字符型。因此, CustomerTableCustNum.AsString 的含义是,将表 CustomerTable 的 CustNum 字段值转换成字符型(串)。“ +” 表示将其前与后的两个字符串相继赋值给 Caption 属性,即将 Customer Number : CustNum 字段值赋值给 Caption属性。

Page 31: Delphi 7 数据库编程 学习捷径

选择 1001 为当前记录,再单击 CustomerNumber按钮,此时MyCust 程序更新 lblValue标签的 Caption 属性为当前记录的 CustNum字段值,即 1001 ,如图( a)所示。改变选择的当前记录,例如,选择 1003 为当前记录,再单击 CustomerNumber按钮,此时 MyCust 程序更新 lblValue标签的 Caption 属性为当前记录的 CustNum字段值,即 1003 ,如图( b)所示。

( 3 )例子:读取字段 CustNum之值

选择 1001为当前记录

( a )

单击此按钮

在此标签上显示 1001

单击此按钮

( b )

选择 1003为当前记录

在此标签上显示 1003

( 4 )程序清单:见随书光盘中的文件 CMyCust.txt 。

Page 32: Delphi 7 数据库编程 学习捷径

第 6 章 计算字段

我们在 3.2节中曾设计了一个 PSDB 数据库,它包含三个表: Customer.DB 、 Items.DB 和 Parts.DB 。读者可以打开本书光盘中的文件 Form2.txt , 代码中显示了在 Form2 窗体上所做的工作。下面我们要学习的内容是: ( 1)用代码把 Parts.db和 tems.db 表连接起来。 ( 2)在 Delphi 7 中怎样定义计算字段。用 Delphi7 的计算字段功能来编写一个叫做购买商品的总价 TotPrice.EXE程序。因为 TotalPrice 是可计算的,因此可以把 TotalPrice视为程序中的一个字段,而且把它称做计算字段。 定义或增加新字段时,从数据库表字段编辑器开始:双击 temsTable控件,弹出数据库表字段编辑器 ItemTable 。在其内单击鼠标右键,从弹出的快捷菜单上选择 New Field选项,弹出定义计算字段对话窗口。然后,填入计算字段名( Name )、类型( Type )和 Calculated选项,单击 OK按钮。再在数据库表字段编辑器 ItemTable内单击鼠标右键,从弹出的快捷菜单中选择 Select All Field选项,为数据库表选择所有的字段。 然后双击网格控件 DBGrid1 ,显示网格表列编辑器 Editing DBGrid1 ,在其中设置前面定义过的新计算字段名后,再在网格表列编辑器内单击鼠标右键,在弹出快捷菜单上选择 Select All Field选项,为网格表显示字段选择所有的字段。 读者可以打开本书光盘中的文件 TotPrice.txt, 看到本章所编写的完整的程序代码。

Page 33: Delphi 7 数据库编程 学习捷径

第 7 章 链接表 在第 6 章的 6.4.7 节中曾提到,可以使用两种方法把数据库中两个表链接起来,一是编写代码的方法,二是用数据库窗体向导。关于使用代码链接表的方法前面已经讲过,本章学习使用数据库窗体向导的链接表功能,把 Customer.db 表与 Items.db 表链接起来的方法。此外,还要学习一个重要的数据库概念,即“一对多”关系的概念。 现在用数据库窗体向导 Database Form Wizard 的链接表功能,实现 Customer.db表与 Items.db 表的链接。 One2Many程序用于实现 Customer.db 表和 Items.db 表之间的“一对多”关系。 CPartItem 程序用于实现 Parts.db 表和 Items.db 表之间的“一对多”关系。实现步骤: 1. 启动 Delphi 7 。 2.在 Delphi 7 菜单中选择 File\New\Application 命令。 3. 启动数据库窗体向导 Database\Form Wizard 。选择 Create a master/Detail form (创建主 /从 [明细 ]窗体)选项。建立从 Customer.db 表到 Items.db 表的一种“一对多”关系 ( 或从 Parts.db 表到 Items.db 表的一种“一对多”关系 ),这是一种主 /从关系的窗体,因此,选择 Create a master/Detail form ( 创建主 /从 [明细 ]窗体)选项。并且是以表为对象的窗体,因此,还要选择 Create a form using TTable objects (创建的窗体使用表对象)。 4. 为 Items.db 表创建次级索引 制定 Customer.db (或 Parts.db 表)和 Items.db 表之间的“一对多”关系。 One2Many程序清单:见光盘中的文件 One2Many.txt 。 PartItem 程序清单:见光盘中的文件 PartItem.txt 。

Page 34: Delphi 7 数据库编程 学习捷径

第 8 章 查找和确认数据

查找数据是查找一个具体的记录。确认数据是检查用户输入的数据的合法性,对不合法的数据拒绝接受。1.基于表的确认技术 这是在用数据库桌面( Database Desktop )创建表时,设置的一种有效性检查技术。例如,设置字段允许的最小值和最大值。其好处在于不需要编写确认数据的代码。这又称为表一级( Table-Level )有效性检查。2.基于编码的确认技术 为了用代码确认用户的数据,可以通过给 OnValidate事件添加代码来实现。这样,当用户修改一个字段时,将自动生成该对象字段的 OnValidate事件,从而将自动执行你给该事件添加的代码,该代码可以检查用户输入的数据,并根据检查结果决定接受或拒绝数据。3.参照完整性 参照完整性概念与查找表的概念相似。参照完整性是在两个表之间建立参照完整性联系,这种联系是建立在公共字段的基础上。参照完整性的作用在于可以防止向表中输入非法数据。从而保证了数据的安全性。 源程序:见光盘中的文件 CSearch.txt

Page 35: Delphi 7 数据库编程 学习捷径

第 9 章 制作数据输入窗体

在 Delphi 7 数据库应用中,通常不希望用户使用 Grid 控件向表中输入数据。更适宜的方法是制作一个专用的窗体,供用户输入数据。本章完成一个窗体,用来显示 Clients.db 表中的记录。用户可以在 Clients.db 表中添加记录、删除记录和在表中查找记录。可以让用户使用 Navigator控件,也可以制作一个按钮来模仿 Navigator控件的按钮。我们将使用 DBText 和 DBEdit控件来编辑和浏览 Clients.db 表中的字段。设计好的数据输入窗体如下图所示。

用来向数据库表 Clients.db 中输入数据和浏览表中的数据的程序,见光盘中的文件 CClients.txt。

Page 36: Delphi 7 数据库编程 学习捷径

第 10 章 列表和查找表 本章学习了列表和查找表,以及如何在数据输入窗体中使用列表和查找表。用户为了避免用键盘输入可能产生的错误,可以使用列表和查找表,即用户通过从列表中选择来输入数据。为此,建立了 MyList 程序,用以说明如何在数据输入窗体中使用列表。也学习了如何使用 DBLookupList控件作为显示字段内容的工具,该控件允许用户从列表项中选择数据或者直接输入数据,以及通过设置该控件的一些属性,可以把该控件作为工具,用来从一个表中查找数据,然后再填入另一个表的某个字段(因此得名查找表)。为此建立了 MyLookup 程序。

MyList 程序清单:见光盘中的文件 CMyList.txt MyLookup 程序清单:见光盘中的文件 CMyLookup.txt

参照完整性和查找表不同。在表 Clients.db 中的字段 SalersPersonNum ,包含了销售人员的编号,因此保证了编号为合法数值(必须包括在表 SalesPer.db 中)是十分重要的。另一种保证表 Clients.db 的字段 SalersPersonNum拥有合法数据(必须包括在表 SalesPer.db 中)的方法是在表 SalesPer.db 和表 Clients.db 之间建立参照完整性联系。此后,用户就不能向 SalersPersonNum 字段中输入一个表 SalesPer.db 中没有的数值。建立参照完整性联系,意味着即使使用数据库桌面也不能向 SalersPersonNum 字段输入数据。

Page 37: Delphi 7 数据库编程 学习捷径

第 11 章 查找和设定范围

本章学习了如何使用户只能浏览或编辑符合一定条件的记录。如何设置记录的范围。实现了使用静态 SQL 查询技术的程序 OnlyJim 。在程序设计期间,设置了静态 SQL 查询语句。 同时,编写了一个 SetQuery 程序,以它为例说明如何实现动态查询。所谓动态查询是指在程序运行期间可以修改查询条件的查询。例如,可以设置查询条件,使 Grid 控件只显示那些 LastName 字段为 Smith 的记录。而在程序运行期间,又希望显示那些 LastName 字段为 Anderson 的记录,那么就可以使用动态查询来达到这一目的。

OnlyJim 程序清单:见光盘中的文件 CJim.txt 。 SetQuery程序清单:见光盘中的文件 CSetQuery.txt 。

Page 38: Delphi 7 数据库编程 学习捷径

第 12 章 多窗体和打印窗体 前面几章完成的工程都只是包含一个窗体。事实上,一个数据库工程通

常由多个程序组成,而且所有的程序都使用同一个数据库。所以可以创建一个程序作为所有其他程序的前端界面。我们把这个程序称为主程序。这样,用户可以很方便地在各程序之间切换,也就是在各窗体之间切换。另外了解了窗口可以按模式或非模式显示,以及如何实现 Print按钮、 Markhe 、 GoTo Bookmark 按钮,后面两个按钮使当前记录指针指向先前标识的纪录。同时在本章中也完成了书签的制作,以便让用户利用它实现如下功能:为当前记录建立书签;为了进行计算需要把记录指针指向其他记录;当计算结束后,使用 GotoBookmark方法使当前记录指针返回书签中保存的纪录指针。

为此,创建了一个工程 AllView和另外两个窗体( Clients 和 Parts ),以其为例说明如何完成多窗体工程。

工程 AddView的程序:见光盘中文件 CACP.txt 中的 CAllApps.pas 程序 实现 Clients 窗体的程序:见光盘中文件 CACP.txt 中的 CClients.pas 程序 实现 Parts 窗体的程序:见光盘中文件 CACP.txt 中的 CParts.pas 程序

Page 39: Delphi 7 数据库编程 学习捷径

第 13 章 制作报表 本章学习了利用表带式报表生成器 QuickReport 创建报表的方法。特别是根据数据库数据打印报表时,可以大大简化用户应用程序的打印工作。使用 QuickReport 组件创建应用程序,可以按以下步骤进行: 1. 在组件模板上选择 Table 和 DataSource 组件并放在窗体上。 2. 将属性 DatabaseName 设置为“数据库别名”、 TableName 设置为“表名”、 Active 设置为 True 、 DataSet 设置为 Table1 。 3. 在组件模板上选择控件 QuickRep1 并放到 Form1 窗体中,创建一个空白表。 4. 在对象查看器中将 Bands 属性设置为 True ,创建表带类型。 5. 把属性 HansDetail 设置为 True 创建表带对象。 6. 选中 QuickRep1 。设置 DataSet 属性为 Table1 ,把表和数据库组件连接起来。 7. 在表带中放置文本对象(标注为 QRDBText 的组件)。 8. 选中 QRDBText1, 设置 DataSet 属性为 Table1 , DataField 设置为“数据库表的字段名” 重复进行,直至设置完表的全部字段。 9. 现在可以保存应用程序。 下面是为打印预览、打印按钮的 BitBtn 的 OnClick 事件编写的程序: procedure TmainForm.BitBtn1Click(Sender:Tobject);

begin QuickRep1.Priview; { 打印预览 } End; procedure TmainForm.BitBtn2Click(Sender:Tobject); begin QuickRep1.Print; { 打印 } End; End. 完整的程序清单:见光盘中的文件

CReport.txt

Page 40: Delphi 7 数据库编程 学习捷径

第 14 章 开发图表 为了说明从数据库表中向所创建的样本图表加载用户提供的数据,需要使用 Delphi 7 的 Data Controls 模板上的 DBChart 控件。并需要按下述步骤创建一个工程 WinesChart 。 1. 把控件 Table 、 DataSource 和 DBChart ,以及按钮 Print Previw 和 Close 放到窗体上。 2. 设置 Table1 的 Database 属性为“数据库名”,把 TableName 设置为“数据库表名”, Active 设置为 True 3. 把 DataSourced 的 DataSet 属性设置为 Table1 , Name 属性设置为 DataSource1 。 4. 选中 DBChart 对象,右击打开 TeeChart 菜单。选择显示 TeeChart 编辑器。 5. 单击 Add 按钮,选择一种图表系列。 6. 为了把图表和数据库连接起来,在 TeeChart编辑器中选择 Series 标签页。如使用多个 Series 对象,就从下拉列表中选择每个对象,并重复下面步骤。 7. 切换到 Series 标签页,单击 TeeChart 编辑器中的 Data Source 标签页。打开第 2 行标签页下的下拉列表并选择 DataSet 选项。类似地,在 DataSet 编辑框里填入 Table 。通过这些步骤,即把图表和数据库表连接起来。

在窗体中完成的图表如下图所示。

程序清单:见光盘中的文件 Main.txt

Page 41: Delphi 7 数据库编程 学习捷径

第 15 章 将图或文件存入数据库 有时用户希望自己的数据库能对图和文件进行处理。但是数据库并不支持这些功能,需要数据库加上程序才可以实现。这样可以通过数据库存储信息和程序向用户展示这些信息。 因为,像这样的图和文件一般都比较大,因此需要有一个能存放大文件的字段类型来支持,这就是 BLOB字段。 BLOB ( Binary Large Object )字段用来保存不定量的数据。 本章学习了如何设计包含 Memo (备注)和 Graphics (图形)类型字段的表。同时,还学习了如何使用 Delphi 的 DBMemo 和 DBImage控件,向 Memo和 Graphics字段添加记录。编写的 MyAnim 程序说明了如何不改变窗体的代码,就把它加入多窗体程序中,如何使用 MoveBy() 方法在记录之间移动,以及如何使用 EOF 判断表尾。

程序清单:见光盘中的文件 MyAnim.txt 。

Page 42: Delphi 7 数据库编程 学习捷径

第 16章 编写多媒体数据库应用程序

本章编写了多媒体程序 MM,完成了一个主窗体 frmMM ,一个向表 MM.DB 中添加记录的窗体 frmFillMM 和一个用来显示表 MM.DB 中所有 Device字段值为 AviVideo 的纪录的窗体。在程序的实现过程中,使用了各种Delphi 数据库功能。执行了 SQL语句,使用了DBRadioGroup控件,并且给 DBNavigator控件的 OnClick 事件添加了代码,还用Query 组件生成了字段对象。用 MM程序可以实现播放指定的演示。

程序清单:见光盘中的文件 CMFS.txt包括: CMM.pas 程序清单(主窗体 frmMM 程序) CFillMM.pas 程序清单(编辑表的窗体 frmFillMM 程序) CShow.pas 程序清单(显示窗体 frmShow 程序)

Page 43: Delphi 7 数据库编程 学习捷径

第 17 章 数据库开发实例:学生管理系统 本章的数据库开发实例,是以学生管理中的几个典型信息来说明如何建立和编制数据库应用程序。仅仅是个样本。我们把《学生管理系统》简称为 XSGS 系统。 XSGS 系统功能: XSGS 系统将实现在校学生的学生信息登录和查询学生情况。主要功能如下: 1. 记录学生的信息:学号、姓名、性别、系别、专业。 2. 查询学生信息:按学号查询、按姓名查询、按性别查询、按系别 查询、按专业查询。

编写的代码: 1. 主菜单的代码(见光盘中的文件 CXueSheng.txt )。 2. 查询事件的代码(见光盘中的文件 CChaxun.txt )。 3.执行查询事件的代码(见光盘中的文件 CZhixingChaxun.txt )。

演示结束 再见演示结束 再见