第 7章 数据库编程基础
内容提要
? 数据库系统的发展
? 数据模型
? 关系数据库
? BDE组件
? 数据访问组件
? 数据控制组件
7.1 数据库系统的基本概念
1,数据库
数据库指存储在计算机内部有组织的、大量的、可共享
的数据集合,具有较小的冗余度和较高的数据独立性。
2,数据库系统
数据库系统一般包括硬件, 操作系统, 数据库管理系统,
应用开发工具, 数据库, 数据库管理员, 系统分析员, 应用
程序员和系统最终用户 。
3.数据结构
数据结构是研究对象类型的集合, 这些对象是数据库的
组成成分, 可以分成两类:一类是与数据类型, 内容, 性质
有关的对象;一类是与数据之间联系有关的对象 。
4,数据操作
数据操作是对数据库中各种对象的实例允许执行的操
作集合 。 数据库主要有检索 ( 查询 ) 和更新 ( 插入, 删除,
修改 ) 两类操作 。
5,完整性约束
完整性约束指给定数据模型中的数据以及数据之间的
联系具有的制约和依存的规则 。 用以限定符合数据模型的
数据库状态以及状态的变化, 以保证数据的正确, 有效和
相容 。
7.1 数据库系统的基本概念
7.2 数据模型
数据模型是对客观事物及其联系的数据描述,即实体
模型的数据化。数据库设计的核心问题之一就是设计一个
好的数学模型。
根据数据模型应用的不同,可以将模型分为两类,一
个是概念模型,另一个是数据模型。概念模型是按照用户
的观点对数据和信息进行建模;数据模型是按计算机系统
的观点对数据和信息进行建模。
7.2.1 数据的概念模型
数据的概念模型又称为信息模型,是对现实世界中数
据的抽象,是用计算机描述现实世界中信息的第一步。
涉及的基本概念,
? 实体,客观存在的可以相互区别的事物就是实体。
? 属性,实体具有的某个特征就是属性 。
? 主键,可以唯一表示一个实体的属性的集合就是主键。
? 域, 属性的取值范围。
? 实体型,具有相同属性的实体具有共同的特征和性质,
用实体的名以及其属性名集合来抽象和刻画同类实体称为
实体型。
? 实体集,相同类型的的实体的集合称为实体集。
? 联系,在数据概念模型中,实体和实体之间存在着一定
的联系,这个联系可能在实体的内部也可能发生在实体和
实体之间。
7.2.2 数据模型( 1)
当前, 数据库系统中所支持的数据模型
主要有四种,
?层次模型
?网状模型
?关系模型
?面向对象模型
7.2.2 数据模型( 2)
1.层次模型
在数据库中, 满足下面两个条件的数据集合称为层次模型 。
?有且只有一个节点没有双亲节点, 这个节点称为根节点 。
?除根节点外, 其他节点有且只有一个双亲节点 。
在层次模型中, 有同一双亲节点的节点称为兄弟节点, 没有
子节点的节点称为叶节点 。
R1
R2 R3
R5 R4
图 7-2层次模型结构
7.2.2 数据模型( 3)
2.网状模型
在数据库中, 满足下面两个条件的数据集合称为网状模型 。
? 有一个以上的节点没有双亲节点 。
? 一个子 节点可以有多于一个的双亲节点 。
R1
R1
R1
R1
图 7-3 网状模型结构
7.2.2 数据模型( 4)
3.关系模型
在关系模型中, 数据 以 二维表 的形式进行组织, 如表 7-1所示 。
学号
姓名
性别
年龄
专业
01072601
张英

18
计算机
01072602
王刚

17
计算机
……
……
……
……
……
01072632
李强

18
计算机
关系模型中的基本概念
⑴ 关系,一个关系就是一张二维表,表 7-1就是一个关系。
⑵ 元组,表中的一行就是一个元组,也叫记录。
⑶ 属性,表中的一列就是一个属性,也叫字段。
⑷ 主码:能唯一标识一个元组的属性集合就是主码,表 7-
1中的学号就是主码,它能唯一标识一个学生。
⑸ 域,属性的取值范围。
⑹ 分量:元组中一个属性值。
⑺ 关系模式:对关系的描述。如表 7-1的关系模式就是:
学生(学号,姓名,性别,年龄,专业)。
7.2.2 数据模型( 5)
4.面向对象模型
面向对象模型的核心概念是对象, 对象是客观世界中实体的模
拟, 实体的各种属性在对象中用属性刻画 。
在面向对象模型中, 实体的行为用一组方法表现, 并把它们与
描述实体结构的属性封装为一个整体, 这就是对象 。 对象外界
只能通过发送消息访问对象, 这种封装机制可很好的解决数据
的独立性, 数据的完整性和数据的安全保护问题 。
在面向对象模型中, 把同类对象抽象为类 ( Class), 同类对
象有相同的属性和方法, 请参阅下图 。
雇员
雇员编号
姓 名
性 别
出生年月
薪 金
加薪 ( )
雇员
管理者 被管理者
部门经理 总经理
7.3 关系数据库
关系数据库 是用关系模型描述的数据库,是目前应用最
广泛的数据库 。
关系模型由三部分组成:数据结构、关系操作集合和关
系的完整性。
1.数据结构
关系模型采用的是单一的数据结构 —— 关系。
2.关系操作的集合
主要有,θ 选择( Theta Select)、投影( Project)、
θ 连接( Theta Join)、并( Union)、交
( Intersection)、差( Set Difference)、除( Divide)。
3.关系的完整性
包括,实体完整性、参照完整性和用户自定义完整性。
7.4 BDE组件( 1)
BDE组件在 Delphi主界面的 BDE标签上,如图 7-4所示。
图 7-4 BDE组件面板
BDE组件提供了在程序中调用 BDE的接口,BDE组件面板
上包括的组件依次是,
⑴ TTable组件。该组件用于通过 BDE从物理数据库中
获取数据,并通过 TdataSource组件将这些数据传送给数据
控制组件,同样也可以接受数据控制组件传递过来的数据。
也就是如果要在程序界面上显示物理数据库中的数据,就可
以使用 TTable组件了。 Ttable组件一般与数据库中的基本表
相连接。
7.4 BDE组件( 2)
⑵ TQuery组件。该组件和 TTable组件的功能基本相同,只是
该组件不是直接和数据库中的基本表相连接,而是通过 SQL
语句和物理数据库中的表相连接,TQuery和 TTable组件一样
不仅可以从数据库中读取数据也可以把显示的数据写入到数
据库中。
⑶ TStoredProc组件。通过该组件可以使应用程序访问服务
器端的存储过程。可以通过 BDE将接受到的数据发送给物理
数据库,与服务器的存储过程相对应。
7.4 BDE组件( 3)
⑷ TdataBase组件。该组件用于建立维持长久的数据库的连
接,防止频繁的对数据库的断开和连接。同样在访问需要用
户登陆的远程数据库时也非常有用。
⑸ Tsession组件。该组件用于在全局上管理各种数据库组
件,在 Delphi 7的数据库应用程序中,系统自动生产一个默
认的 Tseeion组件,在应用程序中可以通过代码访问他。在
创建多线程数据库的应用程序是必须使用 Tsession组件。
7.4 BDE组件( 4)
⑹ TBatchMove组件。该组件用于复制数据库中表的结构和
数据的内容,也可以用于不同格式的数据库之间的转换。
⑺ TUpdateSql组件。该组件用于对只读表的更新。如果
TQuery是从多个表中读取数据,那么更新这些数据时,就必
须使用 TUpdateSql组件。
⑻ TNestedTable组件。从嵌入表类型的字段中获得数据,
并通过 TDataSoure组件将获得的数据提供给数据控制组件。
7.4.1 TTable组件
TTable组件不仅可以连接到本地的数据库,如,Paradox、
dBase,Access和 FoxPro,也可以连接到远程数据库服务器,
如,InterBase,Oracle,SQL Server和 DB2。通过 TTable
的连接,可以访问底层数据库的每一条记录甚至每一条记
录的每一个字段。
1,TTable组件的主要属性
( 1) DataSource属性, 当 TTable组件用于主从表中并且是从
表时, 通过这个属性获得和主表相关的 TDataSource组件 。
( 2) DataBaseName属性
该属性用来访问 TTable连接的数据库 。 从 Delphi 7开始,
设置了 DataBaseName后就可以通过打开属性前面的加号来
访问和设置和 TTable组件相关的 TDataBase组件的属性了 。
7.4.1 TTable组件 的主要属性
( 3) DataBase属性, 该属性用于访问和 TTable组件相
关的 Tdatabase组件的属性、方法和事件,DataBase属性是
只读属性。
( 4) TableName属性, 该属性指定了 TTable组件表示数
据库中的表 。 这个属性只有在设置了 DataBaseName属性后
才可以对该属性进行设置 。
( 5) CachedUpdates属性,使用 CachedUpdates属性可以打开
或关闭对 TTable组件的应用缓冲更新 。 如果该属性设置为
False,对 TTable组件的任何改变, 都立刻会体现到数据库
中 。 如果该属性设置为 True,表示对 TTable组件中数据的
操作被存储在缓冲区中, 并不会立刻提交到数据库中, 当
对数据操作完成后, 通过事务的提交再把修改的数据提交
到数据库中 。
这个属性非常重要,在开发两层数据库的客户端时,如果
把该属性设置为 True,可以减少事务量降低网络的负载。
7.4.1 TTable组件 的主要属性
( 6) Filter属性。 使用 Filter可以设定 TTable组件
的过滤字符串,当对 TTable组件应用过滤时,只有
满足条件的记录才能被程序访问。
( 7) UpdateObject属性 。 在利用 BDE编写程序时,
如果需要对一个只读的结果进行更新的话, 就可以
使用该属性了, 使该属性指定一个 TUpdateSQL组件,
使用 TUpdateSQL组件完成更新操作 。
( 8) Bof属性 。 表示是否为记录集中的头记录 ( 不是
第一条记录 ) 。
( 9) Eof属性 。 表示是否为记录集中的尾记录 ( 不是
最后一条记录 ) 。
7.4.1 TTable组件 的主要 过程
( 1) Addindex过程。 AddIndex是为表创建索引的过程。
( 2) EmptyTable过程 。 EmptyTable是删除表中的所有记录 。
( 3) First,Prior,next,last过程 。
( 4 ) SetRangeStart, SetRangeEnd, ApplyRange,
CancelRange过程 。 这 4个 过程 分别设置数据域的上界, 下
界, 对 TTable组件应用数据域和对 TTable组件取消数据域 。
( 5) FieldbyName函数 。 以字段名方式获取或设置当前记录
的该字段的值 。
如,Table1.Fieldbyname(‘性别 ’ ).asString:=’男 ’, 设置
当前记录的性别为男 。
( 6) Fields函数 。 以数值方式获取或设置当前记录的该字段
的值 。
如,Table1.Fields[2].asString:=’男 ’, 设置当前记录的第
2个字段的内容为男 。
7.4.2 TQuery组件
TQuery组件以 SQL语句形式动态的访问一个或多个表中的数
据,他既可以访问本地数据库也可以访问远程数据库。一
般来说,如果需要对数据库执行一个 SQL语句也是通过
TQuery实现的。
1,TQuery组件的主要属性
( 1) SQL属性 。 该属性中存放了 TQuery的 SQL语句, 当调用
TQuery的 ExecSQL方法和 Open方法时, 或将 TQuery组件的
Active属性设置为 True时, 这个 SQL语句就会被执行 。
( 2) Text属性 。 该属性是一个只读属性, 内容和 Sql中的
内容是相同的 。 一般用于检查 SqL语句的内容 。
( 3) Params属性 。 该属性用于在参数化 SQL查询语句中给
SQL语句传递参数, 这样就可以在程序运行时根据不同的情
况执行不同的操作了 。
7.4.2 TQuery组件 的主要属性
( 4) ParamByName属性。 该属性用于在参数化
SQL查询语句中以通过传递参数名称方式给 SQL语句
传递参数。
( 5) DataSource属性 。 该属性用于指定一个数据源 。
( 6) ParamCheck属性 。 如果该属性为 True,当 SQL语
句在运行期间被修改后, 将自动清空所有的参数,
然后重新建立 Param特性, 以保证参数的个数与 SQL
语句相对应 。
( 7) ParamCount属性 。 该属性返回参数的个数 。
( 8) PrePared属性 。 如果该属性返回 True,表示服
务器已经准备好, 可以执行查询了, 如果返回
False,表示服务器还没有准备好 。
7.4,2 TQuery组件 的主要属性
( 9) RequestLive属性
如果该属性为 False,表示这个查询的结果是只读
的 。 如果该属性为 True,表示这个查询结果是活的,
这时查询的结果是可以编辑的, 并且修改的结果会
保存到数据库中 。
注意,RequestLive属性为真, 不表示任何查询都
是活的, 只有 Select语句满足了一定的语法条件,
查询结果才是活的 。
( 10) RowsAffected属性
该属性返回上次查询操作影响的记录数,包括删除
和修改的记录。如果返回为- 1,表示上次的查询
操作没有修改记录。
7.4,2 TQuery组件 的主要 过程
TQuery组件的主要过程有 ExecSQL和 Open。
这两个过程,都是执行 TQuery中的 SQL语句,不同
之处是,ExecSQL用于不返回查询结果的查询,一
般用于执行 Insert,Update和 Delete语句,而 Open
用于需要返回查询结果的查询。
7.4.3 TStoredProc组件
TStoredProc组件用于使应用程序访问服务器端的
存储过程。
1,TStoredProc组件的主要属性
( 1) StoredProcName属性 。 StoreProcName属性用于
指定在服务器上执行的存储过程的名称 。 指定了名
称后, 就可以使用 ExecProc方法执行存储过程了 。
( 2) ParamBindMode属性 。 TparamBindMode的定义是
Type TparamBindMode=(pbByName,pbByNumber);
该属性用于确定将参数传递给服务器的顺序 。
2 pbByName 按名称匹配 。
pbByNumber 按次序从左到右匹配 。
7.4,3 TStoredProc组件 的主要 过程
( 1) ExecProc过程。该过程用于执行服务器上的存
储过程,如,
StoredProc1.Params[0].AsString,= Edit1.Text;
StoredProc1.Prepare;
StoredProc1.ExecProc;
( 2) Open过程 。 该过程也是用于执行服务器上的存
储过程 。 和 ExecProc不同的是, Open会返回数据集
的子集, 而 ExecProc只能通过输出参数来获得返回
结果 。
7.4.4 TDataBase组件
TDataBase组件用来连接数据库, 当打开一个数据集时, Delphi
会自动创建一个临时的 TDataBase组件 。 以下几种情况下就必
须在设计期使用 TDataBase组件 。
2 ⑴ 建立一个持续的数据库连接 。
2 ⑵ 以自定义方式登录数据库 。
⑶事务控制。
1,TDataBase组件的主要属性
( 1) AliasName属性 。 该属性用于指定要连接的数据库的别名 。
他和 DriverName属性是互斥的, 就是设置了一个, 另外一个会
自动清空 。
( 2) Connected属性 。 用于确定数据库的连接是否是活动的, 如
果该属性为真, 表示可以建立数据库的连接, 但是不一定打开
数据集 。 如果该属性为假, 表示将断开和数据库的连接 。
( 3) DataBaseName属性 。 该属性用于指定 DataBase组件所用的
数据库的名称 。
7.4,4 TDataBase组件 的主要 属性
( 4) Exclusive属性。该属性用于确定应用程序是否以独占
方式访问数据库。如果设置为真,则其他应用程序不能访
问当前应用程序访问的数据库。
注:只对 Paradox和 dBASE数据库有效 。
( 5) KeepConnection属性 。 该属性用于确定在没有数据集打
开的情况下, 应用程序是否和数据库保持连接 。 对于需要
访问远程服务器, 或需要频繁打开和关闭数据集, 设置
keepConnection为真, 可以避免每次建立连接时的登录时
间, 加速程序的运行速度 。
( 6) DriverName属性 。 该属性用于指定一个数据库驱动程序
的类型, 如,Standard,MSSQL,ORACLE,SYBASE等 。
7.4,4 TDataBase组件 的主要 过程
1) ApplyUpdates过程。如果 CanchedUpdates属性设置为
True,这个过程将把 Dataset参数所指定的一组数据集中,
已经修改而没有提交给数据库的 DataSet进行提交。
( 2) StartTransacion过程。如果连接了服务器,该过程开
始一个新事务,对数据库的所有的修改暂时保留在缓存中,
直到调用 Commit()或 RollBack()为止。
( 3) Commit过程 。 如果连接了服务器, 该过程把自上次调用
StartTransaction( ) 以来所有的变化提交给数据库 。 如
果 InTransacion属性为假, 表示当前不在事务中, 这时就
不能调用 Commit,否则会出错 。
( 4) Rollback过程 。 如果连接了服务器, 该过程的作用和
Commit ( ) 正 好 相 反, 用 于 取 消 上 次 调 用
StartTransaction( ) 以来的所有的变化 。
7.4.5 TSession组件
该组件用于在应用程序中管理一组数据库的连接, 在
Delphi 7的数据库应用程序中, 数据库应用程序在启
动时会自动生产一个默认的 TSession组件 。 但是如果
应用程序同时访问不同网络位置的 Paradox表, 就需
要为每个网络位置建立一个 TSession对象 。 在开发多
线程数据库的应用程序是必须使用 TSession组件, 因
为几个线程可能要同时连接数据库 。
7.4.6 TBatchMove组件
该组件用于复制, 添加, 删除和更新数据库中表
的结构和数据的内容, 也可以用于不同 DBMS之
间表结构和数据的转换 。
7.4.7 TUpdateSql组件
如果需要对只读数据集进行的更新, 就必须采用
,缓存更新, 技术 。 此时用到该组件 。
例题
【 例题 7-1】 下面以 Delphi 7自带的 DBDEMOS数据库
中的客户表 ( Customer.db ) 为主表订单表
( orders.db) 为从表, 讲解如何建立主从表关
系 。
解体思路,
1.首先建立一个应用程序
2.建立界面:在窗体上放置数据库连接组件 。
3.通过属性设置建立起两个表之间的主从关系 。
7.5 数据访问组件
数据访问( Data Access)组件面板如下图所示。
数据访问( Data Access)组件与特定的数据访问机制有关,
数据访问组件面板上包括的组件依次是,TDataSource组件、
TClientDataSet组件,DataSetProvider1组件、
TXMLTransform组件,TXMLTransformProvider组件、
TXMLTransformClient1组件。
本节主要介绍 TDataSource组件。
TDataSource组件介绍
TDataSource组件的作用是在 DateSet(数据集)组件
( Tquery,Ttable等)和数据控制组件之间提供一个连接的
桥梁,以便在窗体上显示数据库中的数据。
1.TDataSource组件的主要属性
( 1) AutoEdit属性, 该属性用于确定当和 TdataSource组件
相关联的数据控制组件得到焦点时, TdataSource组件是否自
动调用和他关联的数据集的 Edit方法 。
( 2) DataSet属性, 该属性用于确定是 TdataSet组件相关联
的数据集对象 。
TDataSource组件的主要属性
( 3) Enabled属性,该属性用于确定 TdataSource组件是否
是活动的。
( 4) Name属性, 该属性用于确定 TdataSorce组件的名字 。
( 5) State属性, 该属性返回 TDataSource组件连接的数据
集状态 。 这个属性一般和数据集的 State属性相同 。 但是如
果 TDataSource组件的 DataSet属性没有指定数据集或他的
Enabled属性设置为 False,则 State属性返回 dsInactive。
2.TDataSource组件的主要函数
IsLinkedTo函数
如果 TDataSource组件已经连接到 DataSet参数指定的数据
集,则该函数返回 True。
3.TDataSource组件的主要事件
( 1) OnDataChange事件 。 当数据集的游标位置发生变化
或当前记录的数据被修改时, 触发该事件 。
( 2) OnStateChange事件 。 当 TDataSource组件的 State属
性发生变化使, 触发该事件 。
( 3) OnUpdateData事件 。 当前记录的数据要被更新时将
触发该事件 。 这样可以对数据进行各种操作, 如验证, 加密等

7.6 数据控制组件
数据控制( Data Controls)组件面板如图 7-12所示。
数据控制( Data Controls)面板中的组件用来显示和
编辑数据集中的数据 。
7.6.1 TDBGrid组件
该控件 以栅格的形式显示和编辑数据集中的数据,数
据集可以是 TTable,也可以是 TQuery或 TStoredProc。
1,TDBGrid组件的主要属性
( 1) Align属性, 该属性用于设置 TDBGrid组件在容器组
件中的对齐方式 。
( 2) Columns属性,该属性用于设置在 TDBGrid中显示数
据集记录时, 列的属性 。
( 3) DataSource属性,该属性用于指定一个 TDataSource
组件, TDBGrid通过这个 TDataSource组件从数据集中
获得数据 。
( 4) FieldCount属性,该属性用于返回栅格中字段的个
数, 也就是在栅格中看到的列数 。
7.6.1 TDBGrid组件 的主要属性
(5) Fields属性, 通过该属性可以访问栅格中的每一个
字段( Tfield对象),序号从 0开始。
( 6) Options属性 。 该属性用于设置栅格的选项 。
( 7) ReadOnly属性 。 该属性用于决定栅格中的记录是否
是只读的 。
( 8) SelectedField属性 。 该属性用户返回当前选择的
字段 。
( 9) SelectedIndex属性 。 该属性用户返回当前选择的
列的序号, 如果当前选择的是第 1列, 该属性返回值为
0。 如果没有选择任何字段或数据集没有打开, 该属性
返回值为 -1。
7.6.1 TDBGrid组件 的主要 过程
( 1) defaultDrawColumnCell过程
该过程一般在处理 OnDrawColumnCell事件的句柄中调用,
相当于把 DefaultDrawing属性设置为真, 让栅格自动
显示单元格中的内容 。
( 2) DefaultDrawDataCell过程
该过程一般在处理 OnDrawColumnCell事件的句柄中调
用,让栅格自动显示一个单元格中的内容。
7.6.2 TDBNavigator组件
TDBNavigator组件是数据库导航器,用户通过该组件可以方便的浏览数
据集中的记录,也可以通过该组件编辑和删除记录。
1,TDBNavigator组件的主要属性
( 1) ConfirmDelete属性,该属性为 True,表示当使用导航器上的删除按
钮删除记录时, 系统自动打开一个确认框, 要求确认操作 。
( 2) DataSource属性,该属性用于指定一个 TdataSource组件, 导航器通
过该组件和数据集连接 。
( 3) Hint属性,该属性用于设置提示, 当鼠标在该组件上停留片刻后,
系统出现的提示信息 。
( 4) VisibleButtons属性 。 该属性是一个集合, 表示导航器中, 各个按
钮是否可见 。
7.6.2 TDBNavigator组件 的主要属性
(6) Fields属性, 通过该属性可以访问栅格中的每一个
字段( Tfield对象),序号从 0开始。
( 7) Options属性 。 该属性用于设置栅格的选项 。
( 8) ReadOnly属性 。 该属性用于决定栅格中的记录是否
是只读的 。
( 9) SelectedField属性 。 该属性用户返回当前选择的
字段 。
( 10) SelectedIndex属性 。 该属性用户返回当前选择的
列的序号, 如果当前选择的是第 1列, 该属性返回值为
0。 如果没有选择任何字段或数据集没有打开, 该属性
返回值为 -1。
7.6.2 TDBNavigator组件 的主要 事件
( 1) BeforeAction事件
当单击了导航器上某个按钮, 在执行该按钮的动作之前,
触发该事件 。
( 2) OnClick事件
定义,property BeforeAction,ENavClick;
当单击了导航器上某个按钮, 在执行该按钮的动作之后,
触发该事件 。
7.6.3 TDBText组件
TDBText组件用于显示当前记录中某个字符型字段
的值。 TDBText组件类似于 Tlabel和 TStaticText组
件,它只是显示数据不能修改数据。如果既要显示
数据又要修改数据可以使用 TDBEdit组件。
TDBText组件的主要属性如下,
( 1) DataSource属性 。
该属性用于指定一个 TDataSource;
( 2) DataField属性
该属性用于指定 TDBText组件要显示的字段 。
( 3) Field属性
该属性用于返回正在显示的字段。
7.6.4 TDBEdit组件
TDBEdit组件用于以编辑框的形式显示字段中的数据。
TDBEdit组件和 Edit组件非常类似,但是 TDBEdit中
显示的数据是随当前记录的改变而改变的。
TDBEdit组件的主要属性如下,
( 1) DataSource属性 。
该属性用于指定一个 TDataSource;
( 2) DataField属性
该属性用于指定 TDBText组件要显示的字段 。
( 3) Field属性
该属性用于返回正在显示的字段。
7.6.5 TDBMemo组件
TDBMemo组件和 TDBEdit组件一样,用于显示当前记录的某
个字段中的数据,但 TDBMemo组件的功能更强大,他用于多
行文本的内容 。
除数据连接属性外, TDBMemo组件的特有属性还有,
( 1) AutoDisplay属性
如果该属性为 True,当移动当前记录时, TDBMemo组件会自动刷新,
以改变显示的内容 。 如果该属性为 False,TDBMemo组件不会自动
刷新显示的内容, 必须通过双击 TDBMemo组件或选择 TDBMemo组件
后按回车键来实现数据的刷新, 使用 LoadMemo过程也可以刷新数
据 。
( 2) Wordwrap属性
该属性指定当向 TDBMemo组件中输入文本时, 到达边界时是否自动
换行 。
( 3) ScrollBars属性
该属性用于控制 TDBMemo组件的水平, 垂直滚动条的显示形式 。
7.6.5 TDBMemo组件的主要过程
TDBMemo组件的主要过程 就是实现数据刷新的
LoadMemo过程 。
该过程用于把备注字段的内容显示到 TDBMemo组件中,
如果 AutoDisplay属性为 True,就不用使用该过程刷新
数据了。 调用代码如下所示,
procedure TForm1.DBMemo1Click(Sender,TObject);
begin
DBMemo1.LoadMemo;
end;
7.6.6 TDBImage 组件
TDBImage组件用于显示当前记录的中图像字段的数据。
TDBImage组件和 Image组件类似,不同之处是,TDBImage
组件中显示的数据是随当前记录的改变而改变的。
1.TDBImage组件的主要属性
( 1) AutoDisplay属性 。 该属性为 True,当移动当前记录时,
TDBImage组 件 会 自 动 刷 新, 以 改 变 显 示 的 内 容 。 使用
LoadPicture过程也可以刷新数据 。
( 2) QuickDraw属性 。 该属性为 True,表示当 TDBImage组件显示
图像时, TDBImage组件会高质量的绘制图像, 但是速度要慢些 。
( 3) Stretch属性 。 该属性为 True,表示显示图像时, 自动调整
图像的大小以适应 TDBImage组件 。
7.6.6 TDBImage 组件
2.TDBImage组件的主要过程
( 1) LoadPicture过程
该过程用于把图像字段的内容显示到 TDBImage组件中, 如果
AutoDisplay属性为真, 就不用使用该过程刷新数据了 。
( 2) CopyToClipboard过程
该过程把 TDBImage组件中的图像复制到剪贴板中 。
( 3) CutToClipboard过程
该过程 TDBImage组件中的图像剪切到剪贴板中 。
( 4) PasteFromClipboard过程
该过程把一个图像从剪贴板中粘贴到 TDBImage组件中 。
7.6.7 TDBListBox组件
TDBListBox组件用于在一个列表中显示字段的内容。
他具有列表框和数据感知组件的双重特点,首先,可
以通过他的 Items属性设置在列表框中的内容,其次,
通过设置他的 DataSource属性和 DataField属性和数据
集进行关联。 应用示例如下,
7.6.8 TDBComboBox组件
TDBComboBox组件实际是 TDBEdit组件和 TDBListBox组件的
一个组合体。他的设置和 TDBListBox组件一样,在
TDBComboBox组件的列表框中显示的内容通过 Items属性设
置。通过设置他的 DataSource属性和 DataField属性和数据
集进行关联。应用示例如下,
7.6.9 TDBCheckBox组件
TDBCheckBox组件和 TCheckBox组件类似, TDBCheckBox组
件的两个属性是 ValueChecked和 ValueUnChecked属性,可
以在设计阶段设置该属性也可以在运行阶段用代码指定该
属性,在代码中可以写成如下形式,
DBCheckBox1.ValueChecked:=’True;Yes;T;Y;是 ;对 ’ ;
这样,当字段中的内容是 True,Yes,T,Y,是,对 时,
TDBChecked将处于选中状态。 应用示例如下,
7.6.10 TDBRadioGroup组件
TDBRadioGroup组件用于实现单选按钮的分组。他具有单
选按钮和数据感知组件的双重特点,首先,可以通过他的
Items属性设置在分组单选按钮的标签,其次,通过设置他
的 DataSource属性和 DataField属性和数据集进行关联。
7.6.11 TDBLookupListBox组件
TDBLookupListBox组件具有 ListBox组件和数据感知组件的双重特点,
不同之处是,Listbox组件的列表框中选项在设计阶段添加或在程序运
行中添加,而 TDBLookupListBox组件的列表框中的选项是根据
ListSource属性和 ListField属性自动从数据集中得到。
设置完成数据集属性后,运行程序时,TDBLookupListBox组件能自动
从 ListSource数据集中查找 ListField字段的值,并自动填充到
TDBLookupListBox组件的列表框中,从 TDBLookupListBox组件中选择
一项后,ListField字段中的内容会自动填充到 DataSource的
DataField中。
7.6.11 TDBLookupListBox组件
TDBLookupListBox组件的主要属性如下。
( 1) ListField属性 。 该属性用于设置, 在 TDBLookupListBox组件的列表框
中显示的字段 。 该属性可以设置一个或多个字段 。
( 2) ListFieldIndex属性 。 该属性用于指定使用 ListField中的哪个字段用
来做正向查找 。
( 3) ListSource属性 。 该属性用于设置关联的参考数据源, 就是 ListField
的字段的数据源 。
( 4) NullValueKey属性 。 该属性用于确定给相关字段赋空值的组合键 。
( 5) KeyField属性 。 该属性用于确定与 ListSource相关的 DataSet对象的一
个参考字段, 这个字段要求必须和 DataField属性指定的字段相匹配 。
( 6) RowCount属性 。 该属性用于设置列表框能显示的行数, 这将导致列表
框的高度自动变大或变小 。
7.6.12 TDBLookupComboBox组件
TDBLookupComboBox组件和 TDBLookupListBox组件非常相似,
不同之处是,TDBLookupComboBox组件以组合框的形式显示
ListField属性指定的字段。
主要属性,
( 1) DropDownAlign属性 。 该属性用于指定下拉列表相对于编
辑框的对齐方式 。
( 2) DropDownRows属性 。 该属性用于设置下拉列表显示的行数,
如果实际的行数超过该值, 下拉列表将出现滚动条 。
( 3) DropDownWidth属性 。 该属性用于设置下拉列表框的宽度,
如果设置为 0,表示和编辑框的宽度相同 。
7.6.13 TDBRichText组件
TDBRichText组件与 TDBMemo组件都能显示多行文本,不同之
处是 TDBRichText组件支持 RTF格式,而 TDBMemo组件只能显示
纯文本。
TDBRichText组件又和 RichText组件类似,但 TDBRichText组
件中显示的数据是可以随当前记录的改变而改变的。主要属
性与文本编辑组件相同。
TDBRichText组件 的过程主要有,LoadMemo过程
该过程用于把备注字段的内容显示到 TDBRichText组件中, 如果
AutoDisplay属性为真, 就不用使用该过程刷新数据了 。
7.6.14 TDBCtrlGrid组件
TDBCtrlGrid组件和 TDBGrid组件类似,但是 TDBGrid组件
在一行上只显示一个记录,并且可以为每一列设置属性。
而 TDBCtrlGrid组件是每一行每一列都是一个面板
( Tpanel对象),这样就可以把其他的一些数据组件放
到面板上,最上面最左边的一个面板是模板,可以在模
板上以任何样式来组织一条记录。在程序运行时,系统
根据显示的需要,自动把模板上的格式复制到其他的面
板上以显示数据。
7.6.15 TDBChart组件
TDBChart组件用于以图形的方式表示数据库中的数据, 主要应用 于
数据库应用程序中。
1.TDBChart组件的主要属性
( 1) AutoRefresh属性
该属性用于决定当打开关联的 Table组件或 Query组件,TDBchart组
件是否自动绘制图形。
( 2) RefreshInterval属性 。
该属性用于指定 TDBChart组件自动重新刷新序列的间隔秒数 。 该属
性默认为 0,如果该属性为 0表示不会发生自动刷新序列。
7.6.15 TDBChart组件
2.TDBChart组件的主要过程
( 1) CheckDataSource过程
该过程用于重新从数据库中读取数据, 并刷新图形上的点 。 如果数据库
中的内容发生了变化, 可以使用该过程来体现数据库中的变化 。
( 2) RefreshData过程
该过程用于从 TDBChart组件关联的 DataSet中重新获取数据,并刷新
图形上的点。 RefreshData过程将图形上的所有的序列都刷新一遍,
该过程只是把数据集中的数据重新显示一遍。
例题
【 例题 7-2】 下面以 Delphi 7自带的 DBDEMOS数据库中的
订单表( orders.db) 为例,讲解如何创建 Lookup字段 。
解题思路,
1.界面设计
2.数据连接
3.数据显示:列的添加与删除
例题
【 例题 7-3】 使用 TDBChart组件以图形方式显示 DBDEMOS数
据库中 country.db表中的各州人数对比图。
解题思路,
1.界面设计
2.数据连接
3.数据的图形显示:增加的图形类型,设置统计图的标题,
设置统计图的数据源。