430 likes | 756 Views
Delphi 7 数据库编程 学习捷径. 敬喜 王昀 北京科海电子出版社. 目 录. 第 1 章 Delphi 7 集成开发环境( IDE )介绍 第 2 章 Delphi 7 数据库系统概述 第 3 章 Delphi 7 和数据库 第 4 章 创建数据库 第 5 章 读写字段值 第 6 章 计算字段 第 7 章 链接表 第 8 章 查找和确认数据 第 9 章 制作数据输入窗体 第 10 章 列表和查找表 第 11 章 查询和设定范围
E N D
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章 数据库开发实例——学生管理系统
1 2 4 5 3 图1.1 Delphi7 IDE 运行界面的组成 第1章 Delphi 7 集成开发环境(IDE)介绍 1. Delphi 7 IDE 运行界面 通常,启动Delphi 7的方法是:单击“开始”按钮,然后依次从级联菜 单中选择“程序”\Borland Delphi 7\Delphi 7选项,就进入了Delphi 7 IDE 运行界面,如图1.1所示。其各组成部分的功能见教材1.3~1.7节。 ① 主窗口 ② 窗体窗口 ③ 代码编辑窗口 ④ 对象查看器 ⑤ 对象树形结构浏览窗口
1 2 3 ② 组件模板(Component Palette) ① 主菜单(Menu) ③ 快捷工具条(Speed Bar) 2. Delphi 7 主窗口 主窗口是Delphi 7 IDE的核心,开发人员通过主窗口进行创建工程、编写程序、调试程序、运行和维护应用程序等一系列管理工作。 Delphi 7 主窗口由3个部分组成(其功能见教材1.3节),如下图所示。
3. 组件模板及组件设置 放置组件、设置属性和为“终止”事件编写代码的步骤: ①在组件模板上选择组件,例如Ok按钮。 ②单击窗体空闲部分,放置一个按钮。 ④在事件标签页上双击OnClick右边单元格。 ③设置按钮标题为“终止”。 ① ⑤在代码编辑窗口中编写终止程序的代码。 ② ④ ③ ⑤
数据访问组件 数据控制组件 Data Access Components 数据访问组件 Data Control Components 数据控制组件 TDBGrid TTable TDataSource 数据库引擎: BDE TDBEdit TDBCheckBox 数 据 库 TDBGrid TQuery TDataSource TDBEdit TDBCheckBox BDE (用户接口) 1. Delphi 7 数据库特性 数据访问组件(Data Access Components):主要用于说明数据库的有关信息,如 应用程序要访问(连接)的数据库和要访问数据库中的具体的数据库表,以及要访问表 中的哪些字段等。常用的数据访问组件有TTable、TQuery、TDataSource等。 数据控制组件(Data Control Components):主要用于显示浏览数据库中的数据信息,为用户提供可视化的界面,可以让用户对数据库中的数据信息,进行浏览、编辑、插入、删除等操作。因而,数据控制组件也被称之为数据浏览组件。数据控制组件既能够把数据库中的数据显示到窗体中,又能将其自身的经过修改的数据写回到数据库中。常用的数据控制组件有TDBGrid、TDBEdit、TDBCheckBox等。 第2章 Delphi 7数据库系统概述
2. 数据库桌面(DBD:Database Desktop) 数据库桌面DBD是数据库维护和数据定义的工具,利用它可以完成查 询、连接、建立、重建结构(简称重构)、索引、修改和复制数据库表, 而且在操作时,用户不必拥有Paradox或dBASE数据库管理系统。使用数据 库桌面DBD还可以把一种格式的数据和数据字典拷贝为另一种格式,例如, 将一个dBASE的表拷贝到远程的SQL服务器上的一个数据库中去。另外, 数据库桌面DBD程序可以建立数据库并执行与数据库有关的其他操作。例 如,设置工作目录、设置工作目录别名、创建数据库表、在数据库表中输 入数据、对表中记录排序、移动记录、用不同字体或其他形式显示表中的 数据,以及用表来检查和测试Delphi 7 程序等。 DBD窗口菜单 DBD窗口工具条
部分数据访问组件的主要用途 组件名称 主 要 用 途 TDataSource 是数据集组件与数据控制组件之间传送数据的通道 TTable 是存取数据库表的媒介,通过BDE存取数据库表中的数据,再与TDataSource进行对话,使得数据控制组件能在TTable中访问数据,以及显示、编辑数据 TQuery 利用SQL语言访问数据库表中的数据,并与TDataSource进行对话以实现数据控制组件访问数据库 TStoredProc 在应用程序中用于访问远程服务器中的存储过程(它封装了数据库服务器上的存储过程) TQuickRep 在应用程序中用于创建数据库的输出报表 TSession 这是一个全局的组件,用户可以在程序中使用它的属性和方法 TDatabase 它可以连接到单一数据库上,例如,当需要与数据库持续连接、使用了定制的数据库服务、使用事物处理组件或程序中确定了BDE别名时,就可以使用TDatabase组件。但最主要的用途是在SQL数据库的应用中 3.部分数据访 问组件的主 要用途
部分数据控制组件的主要用途 组件名称 主 要 用 途 TDBText 是一个只读的数据显示组件,它显示的是表中的当前记录值,因此它的显示是动态变化的 TDBEdit 专门用来显示和编辑数据库表中的单个字段。通过它的DataSource属性和DataField属性来指定对应的表和字段 TDBGrid 以网格方式显示数据库中的数据并可以进行编辑。利用字段编辑器(Field Editor)可以对数据库中字段的显示格式、顺序或者是否显示进行控制 TDBCheckBox 浏览数据库中数据的复选框,用于显示和编辑数据库中布尔型字段的字段值 TDBNavigator 称为导航控件,可用来前后移动记录指针,对单个记录进行编辑(包括插入、删除、刷新显示和取消等操作) TDBImage 用于显示、复制、粘贴数据库表中的图像类型的字段 4. 部分数据控 制组件的主 要用途
(1)启动Delphi 7,从File菜单中选择File\New\Applicatin 命令,创建一个新工程。 (2)保存新的工程。从File菜单中选择File\Save As命令, 保存单元文件CHello.pas和工程文件Hello.dpr。 (3)执行程序便生成一个可执行的EXE文件Hello.EXE。 CdmHello 欢迎 清除 欢迎 清除 终止 终止 为“终止”按钮编写代码的目的是,当用户单击“终止”按钮时,可以终止CHello.EXE程序的运行。那么,应该为cmdExitClick过程输入下列代码:Application.Terminate;。这样,当用户单击“终止”按钮时,程序执行“Application.Terminate;”语句,即终止CHello.EXE程序。 第3章Delphi 7和数据库 3.1 创建一个Delphi 7 工程(Project)的步骤 3.2 定制窗体 ①第3章第1节完成的定制窗体 3.3 编写代码 ②执行程序后单击“欢迎”按钮的程序窗口
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); Begin Memo1.CutToClipboard; End; 方法CopyToClipboard实现拷贝: ProcedureTform1.CopyClick(Sender:TObject); Begin Memo1.CopyToClipboard; End;
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:由得到的传递闭包推导最小覆盖,得到若干个最小覆盖,选择其一作为数据库总体逻辑模型。
2. 系统实现 在系统实现阶段,使用Delphi可以建立和测试系统设计阶段所构想的应用程序。在此阶段,最好使用数据 库的一个备份,以防止应用程序可能破坏Delphi数据库后无法恢复。如果应用程序最终要配置到使用远程终 端的数据源的话,可以有两种选择: l. 在本地服务器上,使用备份的数据库的数据进行开发和调试。 2. 在远程服务器上,使用备份的数据库的数据进行开发和调试。 其中,对前者来说,它独立于服务器,因此不会影响服务器的其他特性。而后者就有一定的危险性,因为,程序的可能错误而导致服务器的瘫痪。 值得说明的是,系统设计独立于特定计算机系统;而系统实现必须考虑实际的计算机系统,以及该系统所 支持的数据库管理系统(DBMS)。 系统实现阶段的主要工作: (1) 实现物理设计。通过使用物理设计技术以选择最适合于数据模型结构的物理结构, 这些技术随采用的物理设备及存取方法而异。量化数据是物理设计中的一个重要因素。所选数据库逻辑结 构和物理结构的定义由数据库定义语言完成。 (2)选择存取数据库的方法。在选择物理结构时,存取方法是特别重要的,存取方法决定了设计完成后数据 库的性能,而用户界面软件决定了数据库是否便于用户使用。一般系统中对数据库的存取是由数据库联机查 询语言或嵌入在程序设计语言中的输入/输出命令完成的。 (3) 确定存储需求说明:存储需求定义用户关于数据的使用方法。其中的存取路径,用以说明存储需求所涉 及的实体集、关联集、逻辑记录,同时还要说明这些结构的使用顺序,以及对每个结构所完成的操作,这些 操作可以是检索、存储和插入。 (4) 确定量化数据说明:一般方法是用数据字典作为数据项和记录型的描述文本。数据字典中可以包括: 组织模型中各组成部分的数据项名、类型、取值范围、长度和数据量、各实体间联系的频度、存取需求执 行频度等。 (5) 选择开发软件的技术手段(例如,使用Delphi 7)进行软件开发。 3. 系统运行和维护 系统运行是为了考核系统及其设备、软件系统和数据库应用程序等是否能达到预期的目标。而对应用程序来说,更多的是调试。所谓维护是指在运行中排除应用程序的错误及不合理的内容,以及在系统运行中还要根据用户提出的一些新的要求和建议,对应用程序做一定的修改,使其进一步得到完善和提高。 在每个实施步骤中都有数据库的开发和应用程序界面的开发任务。数据库和应用程序开发任务的执行,则会根据开发项目的大小和范围而定,可能会由不同的人来完成和执行。
3.6 例子:设计一个商品销售数据库(简称PSDB) 顾客(Customer)到商店购买商品(Parts),交款后,商店要给顾客开出发票。发票上标出的内容有:顾客姓名、单位、地址、商品名、单价、总价以及购买日期等。以往这项工作是手工在发票单上填写,现在要用计算机来完成,那么该如何做呢? 对商店或者计算机来说,要求有一份顾客名单,我们称之为Customer表。还要有一份商品清单,我们称之为Parts表。将这两张表联系在一起,就构成了PSDB数据库。 现在给数据库下个定义:按照一定结构组织的相关的数据集合称做数据库。 在数据库术语中,把顾客、商品称做实体,实体之间的联系称做关联。由此可见,实体及其关联才构成数据库。 在关系模型中,“关联”是不可缺少的,因此,关联也就转化为实体,也可以称之为关联实体。因此,在以后的讨论中,凡是说到实体均包括关联实体。 现在,在我们的PSDB数据库中,把实体Customer和Parts联系起来的是关联实体,为其命名为Items(项目)。这样,PSDB数据库是由实体Customer、Parts和Items构成。 以下就来介绍数据库逻辑设计的基本内容和方法。
Customer Items Parts 实体 属性 PSDB数据库的E-R图 CustNum Customer LastName FirstName 实体 关联实体 标明Customer的属性 实体 3.7 E-R方法 在数据库通用设计方法中,通常采用一种“实体-联系”方法,简称E-R方法。这样,就可以将PSDB数据库用E-R图表示。 1. 标明Customer属性 在完成实体设计后,例如完成E-R图设计后,就要为每个实体标明属性。首先,数据库中的每个实体都要有个标识符,而且是惟一的,称其为主标识符(也称为主关键字或主属性)。 例如,在PSDB数据库中的Customer实体应有一个主关 键字,显然,顾客的姓名不成,因为有重名重姓,所以只 好给顾客Customer再加一个顾客编号CustNum。同样理由, 要给商品Parts加一个编号PartNum,以及给关联实体Items 加一个编号ItemNum。注意,为了简化数据库设计的说明, 对于现在讨论的课题,我们只列出主要的属性,而不追求 对它的客观需求。设Customer属性有CustNum(顾客编号)、 LastName(顾客的姓)和FirstName(顾客名字)。
Items QtyInStock 实体 属性 ItemNum PartNum 标明Parts的属性 (关联)实体 属性 Parts QtySlod Description PartNum SellingPrice CustNum 图3.2.3 标明Items的属性 标明Parts属性 设Parts属性有PartNum(商品编号)、Description(有关商品的说明)、QtyInStock(商品的库存量)和SellingPrice(销售价)。 标明Items属性 设Items属性有ItemNum(Items记录编号)、CustNum (顾客编号)PartNum(商品编号)和QtySlod(商品销售量)。 现在来说明为什么给Items标明这些属性。首先, 为什么要建立ItemNum属性呢?因为Items需要有一个惟一的主标识符(也称为主属性),也就是需要有一个惟一的主关键字。另外,Items是把Customer表和Parts表联系起来的关联实体,那么最简明的联系,就是在Items中放置Customer的主关键字CustNum和Parts的主关键字PartNum。事实上,根据Customer的主关键字CustNum就可以通过Items中的Parts的主关键字PartNum查到Parts表中的一切信息,例如,某商品的销售价是由Parts表中属性SellingPrice标识的。又例如有关每种商品的说明是由属性Descrption标识的。同时,依据PartNum还可以在Items表中直接查到购买了多少该种商品,即销售量是由Items表中的属性QtySold标识的。
3.8 关系型数据库 1.关系模型 在关系型数据库中,把实体视为一种关系。关系的一般表示方法如下: 关系名(属性1,属性2,……,属性n) 在一个关系表达式中,也需要确定一个惟一的标识符(也称之为主属性,或主键,或主关键字),用以标识这个关系。如果在关系表达式中,我们假设指定“属性k”为主属性(关键字),那么在关系表达式中就把属性k放在最前面并用下划线“_”表示它是主属性(主键字)。于是,关系表达式’就变成: 关系名(属性k,属性1,属性2,……,属性n) 这样,根据给Customer、Parts和Items标明的属性,就可以把它们用关系表达式表示如下: Customer(CustNum,LastName ,FiestName) Parts(PartNum,Description ,QtyInStock ,SellingPrice) Items(ItemNum,CustNum ,PartNum ,QtySlod) 这三个关系就是PSDB的关系数据库模型。
PartNum ItemNum CustNum Description CustNum LastName PartNum tyInStock QtySlod SellingPrice FiestName 字 段 字段名称 记 录 用二维表表示关系 在关系模型中,一个关系可以用一个二维表来表示。二维表的行称为记录,列称为字段(记录项)。把这样的表统称为数据库表。一个数据库表的一般化表示。 2. 二维表 ⑴ 关系Customer(CustNum,LastName ,FirstName)的二维表表示。其表结构: ⑵ 关系Parts(PartNum,Description ,tyInStock,SellingPrice)的二维表表示。其表结构: ⑶ 关系Items(ItemNum,CustNum ,PartNum ,QtySlod)二维表表示。其表结构:
Field(字段) Field(字段) Field(字段) Type(类型) Type(类型) Type(类型) Size(大小) Size(大小) Size(大小) Key(主关键字) Key(主关键字) Key(主关键字) ItemNum CustNum PartNum Autoincriment(+) Numeric(N) Numeric n/a n/a n/a Yes Yes(是) Yes LastName Description CustNum Numeric Alpha(A) Alpha n/a 30 40 Yes No(不是) No PartNum FiestName tyInStock Numeric Alpha(A) Numeric n/a 25 n/a Yes No(不是) No SellingPrice QtySlod Numeric Numeric n/a n/a No No 所谓表结构设计就是对表中的每个字段(Field)、字段类型(Type)、字段大小(Size)以及该字段是否为主关键字段(Key)等进行规定,以便将来能够对表进行数据操作(包括对数据的存取、增删、查询、修改等)。 3. 数据库表结构设计 ⑴ 设计Customer表结构 ⑵ 设计Parts表结构 ⑶ 设计Items表结构
ItemNum[注] CustNum PartNum Description CustNum LastName PartNum QtyInStock FiestName QtySlod SellingPrice 1001 1001 Kennedy 101 Tom 3 1001 PartNum 101 1,000 30 1002 1003 Anderson 102 Jean 2 1002 PartNum 102 54 200 1003 1001 George 105 Tim 1 1003 PartNum 103 21 123 1004 1001 Sam 102 Jean 6 1004 PartNum 104 200 75 1005 PartNum 105 11 10 (1) Customer表的数据 现在给出PSDB数据库中三个表的实际使用的数据。 设计好的这些数据,我们以后还要用到。 4. 设计数据库表的数据 (2) Parts表的数据 (3) Items表的数据 注: ItemNum的类型(Type)设置为Autoincriment。这就意味,ItemNum的值会由程序自动地填入。因此,在制作Items表的数据时,不要在该字段中填入任何东西。
第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完成。
4. 创建Delphi数据库程序 TTable 控件 TDataSource 控件 Navigator 控件 Tpanel 控件 DBGrid 控件 • (1)建立一个新的工程 • l运行Delphi 7; • l从主菜单中选择File\New\Application命令,则Delphi 7 自动创建一个新工程。 l从主菜单中选择File\Save As命令,保存单元文件CMyCust.Pas,保存工程文件 • MyCust.Dpr。 (2)用数据库窗体向导创建窗体 在数据库窗体向导Database\Form Wizard命令创建的Form2窗体上,已经自动地放置了5个控件:TPanel、TDBNavigator、TDBGrid、TTable和TDataSource。 (3)执行MyCust程序 当程序被运行时,便自动生成一个可执行的.EXE程序。Delphi 7会显示Customer.DB表中的数据。其中Navigator控件中辉亮的按钮是可用的,可以使用Navigator控件的按钮在各记录之间移动。
列编辑器Columns Editor 字段编辑器 双击ItemsTable控件 5.1 字段编辑器和列编辑器 第5章读写字段值 Add fields命令:使用这个命令可为Table对象增加物理字段。每个增加的字段都代表窗体类中的一个对象。所谓“增加物理字段”,是指有选择地使用数据库表中实际存在的字段,因为,根据需要不是总要使用数据库表中实际存在的全部字段。在实际操作中,虽然数据库表中实际存在很多字段,但有些是当前不需要的字段,就不去选择它们了。 在字段编辑器Fields Editor中“增加物理字段”、不被选择的字段或者被删除的字段,都不会改变数据库表中实际存在的字段。 New fields命令:使用这个命令可以创建新的数据库表中实际不存在的字段。这种字段分为三类:Data(数据字段)、Calculated(计算字段)和Lookup(查找字段)。所创建的每个新字段都代表窗体类中的一个对象。而且主要是创建计算字段(Calculated)。但所创建的新字段也不会添加到实际的数据库表中。它仅用于显示的目的。 不要忘记!要想创建和修改实际的数据库表,还得使用数据库桌面Database Desktop程序。 双击Grid1控件
②在编辑器内单击鼠标右键,弹出快捷菜单 ①双击ItemsTable控件,弹出数据库表字段编辑器 ③在快捷菜单中选择Add all field,然后选择Select all,则Itemss.db表的所有字段被选择。 5.2 使用字段编辑器选择字段 在Items.db表中选择字段 (1)双击ItemsTable控件,Delphi 7显示数据库表字段编辑器。 (2)操作过程如下图所示。
5.3 使用列编辑器选择字段 选择网格显示字段 (1)双击Grid控件,显示列编辑器窗口。 (2)操作过程如下图所示。 ②在列编辑器内单击鼠标右键,弹出菜单 ①在Grid内双击,显示列编辑器 ③选择“添加所有字段”按钮或选择菜单中Add All Fields 则显示Items.db表 的全部字段 Add All Fields命令
添加所有字段 恢复字段 删除字段 添加字段 列编辑器快捷菜单按钮的功能 5.4 使用列编辑器选择显示字段 如下图所示,选中要删除的字段FieldName,单击“删除”按钮,字段FirstName即被删除。这里所谓删除是非永久性删除,即不是删除数据表中的字段,而是不在网格表中显示它。
5.5 字段对象 现在采用上页图中的结果,即只选择含有两个字段CustNum和LastName的DBGrid1的网格表。我们看一看Delphi 7 为字段CustNum和LastName还做了些什么工作? 事实上,一旦选择了这两个字段,Delphi 7 就在Form2窗体中自动地放置两个不可见的附加组件CustomerTableCustNum和CustomerTableLastName,通常把这种附加组件称为字段对象。当然,可以像其他任何组件一样查看和设置它们的属性,而且这一点也是非常重要的特性。 打开对象查看器(Object Inspector)上的对象选择器(Object Selector)的下拉列表框,就会看到CustomerTableCustNum和CustomerTableLastName这两个对象。如下图所示。
② 选中Grid控件, 打开对象查看器 的Properties标签 页。 ① 启动Delphi 7 执行MyCust程序 ③ 在对象查看的 Properties标 签页 中设置Align属性为 alNone,并使Grid框变小。 5.6 用代码改变字段属性 1. 设置Grid控件的边框 设置Grid控件的边框的目的是使之可以调整大小,以适应用户的要求。 操作过程如图5.5所示。
程序语句结构 说 明 begin if (条件)Then 语句1 else 语句2; end; 如果满足 条件 执行语句1 如果不满足 条件 执行语句2 填写的代码 2.给Exit按钮的“单击”事件添加代码 在OnClick事件的cmdExitOnClick过程代码窗口中添加如下代码: Application.Terminate; 3.设置Checkbox1( Name设置为chkVisible)和 Checkbox2(Name设置为 chkCenter)复选框。为复选框chkVisible和chkCenter的OnClick事件添 加代码:
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属性。
(a) (b) (3)例子:读取字段CustNum之值 选择1001为当前记录,再单击CustomerNumber按钮,此时MyCust程序更新lblValue标签的Caption属性为当前记录的CustNum字段值,即1001,如图(a)所示。改变选择的当前记录,例如,选择1003为当前记录,再单击CustomerNumber按钮,此时MyCust程序更新lblValue标签的Caption属性为当前记录的CustNum字段值,即1003,如图(b)所示。 选择1003 为当前记录 选择1001 为当前记录 单击此按钮 单击此按钮 在此标签 上显示1003 在此标签 上显示1001 (4)程序清单:见随书光盘中的文件CMyCust.txt。
第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,看到本章所编写的完整的程序代码。
在第6章的6.4.7节中曾提到,可以使用两种方法把数据库中两个表链接起来,一是编写代码的方法,二是用数据库窗体向导。关于使用代码链接表的方法前面已经讲过,本章学习使用数据库窗体向导的链接表功能,把Customer.db表与Items.db表链接起来的方法。此外,还要学习一个重要的数据库概念,即“一对多”关系的概念。在第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。 第7章 链接表
第8章 查找和确认数据 查找数据是查找一个具体的记录。确认数据是检查用户输入的数据的合法性,对不合法的数据拒绝接受。 1.基于表的确认技术 这是在用数据库桌面(Database Desktop)创建表时,设置的一种有效性检查技术。例如,设置字段允许的最小值和最大值。其好处在于不需要编写确认数据的代码。这又称为表一级(Table-Level)有效性检查。 2.基于编码的确认技术 为了用代码确认用户的数据,可以通过给OnValidate事件添加代码来实现。这样,当用户修改一个字段时,将自动生成该对象字段的OnValidate事件,从而将自动执行你给该事件添加的代码,该代码可以检查用户输入的数据,并根据检查结果决定接受或拒绝数据。 3.参照完整性 参照完整性概念与查找表的概念相似。参照完整性是在两个表之间建立参照完整性联系,这种联系是建立在公共字段的基础上。参照完整性的作用在于可以防止向表中输入非法数据。从而保证了数据的安全性。 源程序:见光盘中的文件CSearch.txt
第9章 制作数据输入窗体 在Delphi 7数据库应用中,通常不希望用户使用Grid控件向表中输入数据。更适宜的方法是制作一个专用的窗体,供用户输入数据。本章完成一个窗体,用来显示Clients.db表中的记录。用户可以在Clients.db表中添加记录、删除记录和在表中查找记录。可以让用户使用Navigator控件,也可以制作一个按钮来模仿Navigator控件的按钮。我们将使用DBText和DBEdit控件来编辑和浏览Clients.db表中的字段。设计好的数据输入窗体如下图所示。 用来向数据库表Clients.db中输入数据和浏览表中的数据的程序,见光盘中的文件CClients.txt。
第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字段输入数据。
第11章 查找和设定范围 本章学习了如何使用户只能浏览或编辑符合一定条件的记录。如何设置记录的范围。实现了使用静态SQL查询技术的程序OnlyJim。在程序设计期间,设置了静态SQL查询语句。 同时,编写了一个SetQuery程序,以它为例说明如何实现动态查询。所谓动态查询是指在程序运行期间可以修改查询条件的查询。例如,可以设置查询条件,使Grid控件只显示那些LastName字段为Smith的记录。而在程序运行期间,又希望显示那些LastName字段为Anderson的记录,那么就可以使用动态查询来达到这一目的。 OnlyJim程序清单:见光盘中的文件CJim.txt。 SetQuery程序清单:见光盘中的文件CSetQuery.txt。
第12章多窗体和打印窗体 前面几章完成的工程都只是包含一个窗体。事实上,一个数据库工程通常由多个程序组成,而且所有的程序都使用同一个数据库。所以可以创建一个程序作为所有其他程序的前端界面。我们把这个程序称为主程序。这样,用户可以很方便地在各程序之间切换,也就是在各窗体之间切换。另外了解了窗口可以按模式或非模式显示,以及如何实现Print按钮、Markhe、GoTo Bookmark按钮,后面两个按钮使当前记录指针指向先前标识的纪录。同时在本章中也完成了书签的制作,以便让用户利用它实现如下功能:为当前记录建立书签;为了进行计算需要把记录指针指向其他记录;当计算结束后,使用GotoBookmark方法使当前记录指针返回书签中保存的纪录指针。 为此,创建了一个工程AllView和另外两个窗体(Clients和Parts),以其为例说明如何完成多窗体工程。 工程AddView的程序:见光盘中文件CACP.txt中的 CAllApps.pas程序 实现Clients窗体的程序:见光盘中文件CACP.txt中的 CClients.pas程序 实现Parts窗体的程序:见光盘中文件CACP.txt中的 CParts.pas程序
本章学习了利用表带式报表生成器QuickReport创建报表的方法。特别是根据数据库数据打印报表时,可以大大简化用户应用程序的打印工作。使用QuickReport组件创建应用程序,可以按以下步骤进行:本章学习了利用表带式报表生成器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事件编写的程序: 第13章 制作报表 procedure TmainForm.BitBtn1Click(Sender:Tobject); begin QuickRep1.Priview; {打印预览} End; procedure TmainForm.BitBtn2Click(Sender:Tobject); begin QuickRep1.Print; {打印} End; End. 完整的程序清单:见光盘中的文件 CReport.txt
为了说明从数据库表中向所创建的样本图表加载用户提供的数据,需要使用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。通过这些步骤,即把图表和数据库表连接起来。 第14章 开发图表 在窗体中完成的图表如下图所示。 程序清单:见光盘中的文件 Main.txt
第15章将图或文件存入数据库 有时用户希望自己的数据库能对图和文件进行处理。但是数据库并不支持这些功能,需要数据库加上程序才可以实现。这样可以通过数据库存储信息和程序向用户展示这些信息。 因为,像这样的图和文件一般都比较大,因此需要有一个能存放大文件的字段类型来支持,这就是BLOB字段。BLOB(Binary Large Object)字段用来保存不定量的数据。 本章学习了如何设计包含Memo(备注)和Graphics(图形)类型字段的表。同时,还学习了如何使用Delphi的DBMemo和DBImage控件,向Memo和Graphics字段添加记录。编写的MyAnim程序说明了如何不改变窗体的代码,就把它加入多窗体程序中,如何使用MoveBy()方法在记录之间移动,以及如何使用EOF判断表尾。 程序清单:见光盘中的文件MyAnim.txt。
第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程序)
第17章 数据库开发实例:学生管理系统 本章的数据库开发实例,是以学生管理中的几个典型信息来说明如何建立和编制数据库应用程序。仅仅是个样本。我们把《学生管理系统》简称为XSGS系统。 XSGS系统功能:XSGS系统将实现在校学生的学生信息登录和查询学生情况。主要功能如下: 1. 记录学生的信息:学号、姓名、性别、系别、专业。 2. 查询学生信息:按学号查询、按姓名查询、按性别查询、按系别 查询、按专业查询。 编写的代码: 1.主菜单的代码(见光盘中的文件CXueSheng.txt)。 2.查询事件的代码(见光盘中的文件CChaxun.txt)。 3.执行查询事件的代码(见光盘中的文件CZhixingChaxun.txt)。 演示结束 再见