第十六章 数据浏览部件的应用及编程(一)
数据浏览部件主要用于显示和编辑数据库表中的数据,因而它们又常常被称为数据控制部件或数据明了部件,它们在部件选择板中的DataControls页上,图16.1显示的是DataControls页上的全部数据浏览部件,其中的TDBGrid部件用于全屏幕显示和编辑数据库表中的记录,TDBNavigator用于在数据记录之间导航、插入记录、删除记录、投寄被修改的记录。
图16.1 DataControls部件页上的部件
在表16.1中,我们对DataControls部件上的各个数据浏览部件的一些特性进行描述:
表16.1 各数据浏览部件概述
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
部 件 名 称 特 性 描 述
────────────────────────────────
TDBGrid 用网格的形式显示数据库表中的记录信息,网格中的
各列可以在设计阶段使用字段编辑器创建也可以在运
行过程中用程序设定
────────────────────────────────
TDBNavigator 它提供了一组按钮用于数据库表中的导航,编辑修改、
插入、删除记录以及刷新数据的显示,TDBNavigator中
包含的控制按钮在设计阶段可以进行选择
────────────────────────────────
TDBText 用于显示数据库表中当前记录的字段值
────────────────────────────────
TDBEdit 用于显示和编辑数据库表中当前记录指定的字段值
────────────────────────────────
TDBMemo 用于显示数据库表中的备注型字段,备注型字段中可
以包含多行字符甚至可以是BLOB(大二进制对象)数据
────────────────────────────────
TDBImage 用于显示数据库表中的图像字段和BLOB数据
────────────────────────────────
TDBListBox 当用户编辑修改表中当前记录的某个字段时,该部件
是一个包含多个选择项的列表框,用户可以从中选择
一个项做为字段的值
────────────────────────────────
TDBComboBOx 该部件是一个组合框,当用户编辑修改表中当前记录
的一个指定字段时,可以直接在该部件中输入字段值
也可以单击该部件从下拉式列表框中选择一个字段值
────────────────────────────────
TDBCheck 用于显示数据库中的字段信息的检查框,当表中字段
的值与该检查框的ValueChecked属性值相匹配时,该
检查框被选中
────────────────────────────────
TDBReadioGroup 使用该部件可以为用户提供一组选择项,但用户只能
从中选择一个可选项
────────────────────────────────
TDBLookapList 当用户要编辑修改数据库表当前记录的指定字段时,
使用该部件提供多个可选项,这多个可选项是从相关
的其他表中读取的,且以列表框的形式提供给用户
────────────────────────────────
TDBLookupCombo 该部件结合了TDBEdit部件和TDBComboBox部件的功能,
用户可以直接向该部件中输入字段值,也可以从下拉
式列表框中选择一个可选项,只是下拉式列表框中的
可选项是从相关的其他的数据库表中读取来的。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16.1 数据浏览部件的基本特性
大多数的数据浏览部件是从标准部件中演变过来的,它们具有一些相似的特性,如TDBGrid部件和TStringGrid部件,TDBEdit和TEdit部件,TDBListBox和TListBox等等,只是数据浏览部件是专门用于显示和编辑数据库中记录的字段信息而已。它们的使用方法以及属性有很大的不同。在程序设计阶段,当数据浏览部件通过TDatasource部件和TTable部件连接到一个物理数据库时,便可在其中观看到数据库中的数据信息,也就是说在程序设计阶段便可以看到应用程序运行之后的效果,这种特性给我们修改应用程序带来了方便。
数据浏览部件是通过TDatasource部件连接到TTable部件中具体的字段部件的,因而数据控制部件具有一些共同的属性,用于连接TDatasource部件和TField部件。
Datasource属性:说明数据浏览部件连接的数据源部件TDatasource,数据浏览部件是从TDatasource部件中获取数据的。
DataField属性:说明数据浏览部件对应数据库表中实际的字段名称。该属性的值其实是TDataSource连接的数据集部件TTable或TQuery部件中的字段部件的名字。
因此要创建一个应用程序显示和编辑数据库表中的记录,一般要在应用窗体中放置一个数据集部件(TTable部件或TQuery部件)和至少一个数据源部件TDataSource部件以及多个数据浏览部件。其创建的一般步骤如下:
1.在窗体中放置上述所说的部件并连接数据集部件、数据源部件。
2.为各数据浏览部件设置DataSource属性值为窗休中存在的TDataSource部件的名字。
3.设置各数据浏览部件的DataField属性为数据集部件TTable或TQuery部件中存在的 字段部件的名字。
在这里需要注意的是:TDBGrid部件和TDBNavigator部件是自动地访问数据集部件中所有可以访问的字段部件的,因此它们是没有DataField属性的,对于这些部件可以跳过第3步。
Enabled属性:当数据浏览部件连接到数据集部件时,它的Enabled属性决定了数据浏览部件能否接受来自鼠标、键盘和定时器事件的消息。当Enabled属性值为False时,数据浏览部件将变为无效而不能接受外界的信息。当与数据浏览部件相连的TDataSource部件的Enabled属性为False时或与数据源部件TDataSource部件相连的数据集部件TTable或TQuery部件的Active属性为False时,数据浏览部件也会随之而变为无效。
ReadOnly属性:大多数的数据浏览部件能够用来编辑修改与之对应的字段,因而有ReadOnly属性,该属性用来控制是否可以在数据浏览中编辑修改字段的值。缺省情况下,该属性的值为False,也就是说用户可以在其中编辑修改字段的值。
当然用户要想通过数据浏览部件编辑修改数据库表中的记录字段时,还要受到其它因素的制约。除了数据浏览部件本身的ReadOnly属性设置为False外,还要设置其相应的字段部件和数据集部件的CanModify属性True性;设置TDataSource部件的AutoEdit属性为True,如果数据库表是SQL数据库服务器中的数据库表,用户必须要具有读写数据库的权限等。当然在实际的程序设计过程中并没有这样繁琐,因为很多属性的缺省值都是允许用户修改表中的记录的。
除了TDBGrid部件之外,如果通过一个数据浏览部件修改字段值,那么当光标(或焦点)离开数据浏览部件时,数据浏览部件中被修改的值就会自动地被写回到磁盘数据库中。若在焦点没有离开数据浏览部件之前,按ESC键,那么Delphi会自动地放弃其对字段值的修改。在TDBGrid部件中修改表中的记录时,只有当焦点离开当前的记录时,即记录指针移到其他记录上时,用户对当前记录的修改会被写回磁盘上的数据库表,在焦点没有离开当前记录时,按ESC键,Delphi会自动放弃对当前记录的修改。
16.2 使用TDBText部件显示表中的数据
TDBText部件是一个只读的数据浏览部件,它类似于TLabel部件。只是TDBText 部件用于显示数据库表中记录的指定字段的值。因为TDBText部件显示的是表中当前记录的指定的字段的值,因而它显示的内容也是动态的,在其中显示的内容随着记录指针的移动而变化。用TDBText部件显示Customer.DB表中的Company字段信息时可用如图16.2所示的窗体来实现。
其中各部件的属性设置如表16.2所示
表16.2 表中各部件的属性设置
━━━━━━━━━━━━━━━━━━━
属 性 属 性 值
───────────────────
Table1.DatabaseName DEMOS
Table1.TableName Customer.DB
Datasource1.DataSet Table1
DBText.DataSource DataSource1
DBText.DBField Company
━━━━━━━━━━━━━━━━━━━
16.3 使用TDBEdit部件显示和编辑表中的数据
TDBEdit部件是专门用于显示编辑数据库表中当前记录的各个字段值的数据浏览部件,在应用程序中,我们常常用一个TDBEdit部件来对应表中一个字段,通过设置TDBEdit部件的DataSource、DataField属性便可以为TDBEdit部件指定表中相应的字段。如果用户希望能通过TDBEdit部件编辑修改数据库表中的字段值,还要设置TDBEdit部件的ReadOnly属性为False,设置与TDBEdit相连的数据源部件TdataSource部件的AutoEdit属性为True以及确保与TDataSource部件相连的数据集部件TTable或TQuery部件处于编辑状态,即设置它们的CanModify属性为True。
例如,在图16.3所示的窗体中,使用多个TDBEdit部件显示和编辑Customer.DB表中当前记录的各个字段。窗体中各部件的属性如表16.3所示。
图16.3 用TDBEdit部件显示和编辑表中的数据
表16.3 窗体中各部件的属性
━━━━━━━━━━━━━━━━━━━━
属 性 属 性 值
────────────────────
Table1.DatabaseName DEMOS
Table1.TableName Customer.DB
Datasource.DataSet Table1
DataSource.AutoEdit True
DBNavigator.DataSource DataSource1
━━━━━━━━━━━━━━━━━━━━
窗体中其它部件都是TLabel部件和TDBEdit部件,TLabel部件用于显示表中各字段的名字,TDBEdit部件对应表中各个字段。程序运行之后如图16.4所示。用户可以在其中任何一个TDBEdit部件中修改其中的字段值。
用TDBEdit部件显示和修改表中的数据
窗体中还使用了一个TDBNavigator部件,使用它的目的是在表中移动记录指针,还可以进行修改、插入、删除记录等操作,具体的使用和操作参看 16.5 TDBNaigator部件的使用一节。
16.4 用TDBGrid部件显示和编辑表中的数据
TDBGrid部件和TDBEdit部件一样,它们是专门用来显示和编辑数据库表中的数据的,但TDBGrid部件的功能更强大一些,它可以以网格的形式显示数据库表中全部记录的所有字段信息。
用TDBGrid显示数据库表中的记录信息