
4.2 创建数据库表
数据库在真正地含有表之前没有任何用途,下面将介绍表的建立及其相关的操作。
1.在数据库中建立表
在Visual FoxPro中,一个数据库可以包含多个表文件,表可分为自由表和数据库表两种类型。自由表是为了与以前的版本兼容,自由表作为一个文件单独存放,不属于任何数据库,数据库表是包含在数据库中的表,数据库表增加了数据有效性规则定义等内容。数据库表和自由表的扩展名均为.dbf。表文件是按关系型结构来组织数据,创建表文件主要应用“表设计器”。
(1)使用“表设计器”创建表
①在数据库设计器中打开表设计器对话框创建表。在“数据库设计器”的浮动工具栏中单击“新建表”按钮,如图4-5所示,即可打开“新建表”对话框,如图4-6所示,再单击“新建表”按钮,即可打开“创建”对话框,如图4-7所示。

图4-5 单击“新建表”按钮

图4-6 “新建表”对话框

图4-7 “创建”对话框
②在数据库设计器中打开快捷菜单创建表。在“数据库设计器”空白处右击,弹出快捷菜单,如图4-8所示。

图4-8 数据库设计器中的快捷菜单
再单击快捷菜单中的“新建表”命令,弹出“新建表”对话框,即可依次打开“创建”对话框和“表设计器”对话框。
在“创建”对话框中输入表文件名之后,单击“保存”按钮,即可打开“表设计器”对话框,如图4-9所示。

图4-9 “表设计器”对话框
(2)创建表的结构
①在“字段”选项卡中设置表的字段。“字段”选项卡包括6个子项:名称、类型、宽度、小数位数、索引和NULL。
a.名称。即关系的属性名或表的列名。一个表由若干列(字段)构成,每个列都必须有一个唯一的名字,这个名字就是字段名。字段名必须以汉字、字母和下画线开头,由汉字、字母、数字和下画线组成,数据库表支持长字段名,字段名最多为128个字符;自由表不支持长字段名,字段名最多为10个字符。当数据库表转化为自由表时截去超长部分的字符。字段名不能使用系统的保留字。
b.类型。表示该字段中存放数据的类型。一个字段即二维表中的一列,其中的数据应具有共同的属性。若存储的字符超过254,为节省存储空间可定义为备注型。若要保存图片或OLE对象,可定义为通用型。备注型和通用型字段的信息都没有直接存放在表文件中,而是存放在一个与表文件同名的.FPT文件中。
c.宽度。表示该字段所允许存放数据的最大宽度。字段宽度由数据的最大宽度决定,过大浪费存储空间,过小数据溢出。
d.小数位数。用于设置数值型、整型、双精度型字段值的小数位数。
字段类型和宽度、小数位数设置参考如表4-1所示。
表4-1 主要字段类型和宽度、小数位数定义参考

e.NULL。用于选择记录是否允许为空值,该值是一个逻辑值。空值就是缺值或不确定的值,不能把它理解为任何意义的数据。双击字段名与“NULL”交叉处的空白按钮,即出现√,表示设置了该项字段允许NULL值。
f.索引。是指对表中的有关记录按照指定的索引关键字表达式的值进行升序或降序的排列,并生成一个相应的索引文件。用于设置索引之后,选择记录逻辑排序的方式。
例如,“学生信息”的数据表的结构如表4-2所示。
表4-2 表文件“学生信息”的结构信息

结果如图4-10所示。

图4-10 表文件“学生信息”的结构
②设置字段的格式、掩码和标题,如图4-11所示。
a.格式。设置某个字段的格式,就是要求按照格式来输入数据,并按照格式来显示数据。常用格式符的功能用途如表4-3所示。

图4-11 “表设计器”上面的“显示”页框
表4-3 常用格式符的功能用途

说明:格式符能对字段进行“全局”格式化,一旦设置了格式符,该字段值的内容均要按格式要求来输入。
b.输入掩码。掩码的功能是与格式符相搭配,对字段值进行一对一的格式化。
c.标题。用于设置字段的标题名称。标题可在浏览时显示出来,标题与字段名称可以不一致,若两者相同则不必设置标题。因此,标题可用于显示数据项的名称。实际上,可以将字段名称设为英文,将标题设为中文。例如,如果设置表示学生姓名的字段名为“Name”,同时要求在显示时显示中文“姓名”,则可设置该字段的标题为“姓名”。
实际上,用英文设置字段名称有利于命令方式对表文件进行操作,亦可方便程序设计时的代码编写,而设置中文标题又能在浏览时按中文显示表的内容,可谓“一举两得”。
【例1】对“学生信息”表结构进行格式化设置,设置字段的格式、掩码和标题。具体要求如表4-4所示。
表4-4 表“学生信息”结构的格式符与掩码

在表设计器中设置完成后如图4-12所示。

图4-12 “电话”字段的格式与掩码
【例2】在数据库中创建表文件Student.dbf,在Student.dbf中设置不同的标题与字段名称。其中各个字段名称、类型、宽度的要求如表4-5所示。
表4-5 表Student.dbf的结构

结果如图4-13所示。

图4-13 字段的英文名称与中文标题
表student.dbf创建完毕并存盘,然后单击“显示”→“浏览”命令,即可显示该表的标题,如图4-14所示。

图4-14 表的中文标题显示
③字段的有效性规则、信息与默认值。在“表设计器”的“字段有效性”中可以设置字段验证规则、信息与默认值。
a.字段的验证规则与错误提示信息。字段的规则是字段值应满足条件的验证规则,一旦设置了该规则,输入记录时就要符合规则,否则会出现验证出错提示信息。该信息需要人为地在“信息”文本框中进行设置。
b.字段的默认值。“字段的默认值”是添加记录时,在该字段自动添加的默认值,所设置默认值的类型必须与字段的数据类型相同。
【例3】设置表student表中的年龄sage的验证规则及出错提示信息,如表4-6所示。
表4-6 表“student”中的年龄的验证规则及出错提示信息

在表设计器中的“字段有效性”中可以设置字段验证规则、信息与默认值,如图4-15所示。

图4-15 字段有效性设置
当例3中输入的年龄不满足验证规则时,系统将弹出如图4-16所示的对话框。此时,单击“还原”按钮,即可回到正常输入状态,重新输入符合规则要求的数值。
2.自由表
自由表是独立的表文件,不属于哪个数据库文件。创建自由表时,只能设置表的字段,而不能对字段的格式、掩码、标题、有效性规则、默认值以及NULL值进行设置。
(1)自由表的创建
①菜单操作。单击“文件”→“新建”命令或直接单击“常用”工具栏上的“新建”按钮,弹出“新建”对话框,选择“表”单选按钮,如图4-17所示。

图4-16 验证出错提示信息

图4-17 “新建”对话框
然后单击“新建文件”按钮,即打开“创建”对话框,输入表文件名,然后单击“保存”按钮即打开表设计器。此时的表设计器右面部分是失效的。
②命令操作
格式:
CREATE表文件名
在命令窗口输入并执行创建命令后,会打开表设计器。然后输入字段即可。
(2)将自由表添加到数据库表中
建立数据库后,就可以向数据库添加表,可以将自由表添加到数据库中成为数据库表。添加表有菜单方式和命令方式两种方法。
①菜单操作。单击“文件”→“打开”命令,或者单击工具栏中的“打开”按钮,弹出“打开”对话框,在“文件类型”下拉列表中选择“数据库(*.dbc)”,选择要打开的数据库文件,单击“打开”按钮,打开该数据库,并同时打开数据库设计器。
单击“数据库”→“添加表”命令,或者单击数据库设计器工具栏中的“添加表”按钮,还可以在数据库设计器中右击,在弹出的快捷菜单中选择“添加表”命令,弹出“打开”对话框。
在对话框中选择要添加到数据库中的表文件,单击“确定”按钮使添加的表成为数据库表。
②命令操作。
格式:
ADD TABLE[<表文件名>]
指定表名,将系统默认路径下相应的表文件添加到当前数据库中,如果不指定表名,则会弹出“添加”对话框,选择要添加的表文件后,单击“确定”按钮即可。
注意:因为一个表同一时间内只能属于一个数据库,如果想将一个数据库移到另一个数据库中,应先将该表从原数据库中移去成为自由表,再添加到新的数据库中。
(3)从数据库中移去表
如果数据库中不再需要某个表时,则可以将其从数据库中移去,使其成为自由表,也可直接将表从磁盘中彻底删除。移去表主要有菜单方式和命令方式两种方法。
①菜单操作单击“文件”→“打开”命令,或者单击工具栏中的“打开”按钮,弹出“打开”对话框,在“文件类型”下拉列表中选择“数据库(*.dbc)”,选择要打开的数据库文件,单击“打开”按钮,打开数据库设计器。
在数据库设计器中选中要移去或删除的表,单击“数据库”→“移去”命令,或者单击数据库设计器工具栏中的“移去表”按钮,还可以右击要移除或删除的表,在弹出的快捷菜单中选择“删除”命令,以上操作都会弹出一个对话框,询问是从数据库中移去表还是删除表。如果选择移去表,则该表成为自由表,相应的表文件仍然保留在磁盘中;如果选择删除表,则将该表文件从磁盘中彻底删除。
②命令操作。
格式:
REMOVE TABLE[<表文件名>][DELETE]
说明:
<表文件名>:指定表名,将当前数据库中相应的表文件移去或删除,如果不指定表名,则会弹出“移去”对话框,在对话框中可以选择要移去的表文件。
DELETE:如果添加该参数,则表示从磁盘上彻底删除表文件,如果没有该参数,则表示从数据表中移去该有,使其成为自由表。
另外也可以用DROP TABLE命令来彻底删除表文件,其格式如下:
DROP TABLE[<表文件名>]
3.打开、关闭表
创建表文件的结构之后,需要一系列后续操作:修改表的结构、输入或修改数据、对表的记录进行排序、创建表的索引。这些操作之前都要打开表文件,对表的操作结束之后,就要关闭表文件。
(1)打开表文件
①在项目文件中打开表文件
先打开项目文件(如学生管理.pjx),再依次展开“数据”→“数据库”→“表”,单击需要打开的表文件,如图4-18所示。

图4-18 在项目管理器中选择表文件
然后单击“浏览”按钮,即可打开该表文件并以浏览方式显示记录(对于新创建的表,记录是空的);此时若单击“修改”按钮,即可打开表设计器,对表的结构信息进行修改。
②以命令方式打开表文件。
打开表文件的命令有:
SET DEFAULT TO盘符\路径 &&用于设置文件查找路径
USE表文件名[SHARED] [NOUPDATE] &&打开表文件
说明:
[SHARED]:以只读方式打开。
[NOUPDATE]:打开后不可进行更新操作。
③打开自由表。单击“文件”→“打开(O)”命令或直接点击“常用”工具栏上的“打开”按钮,弹出“打开”对话框,如图4-19所示。

图4-19 “打开”对话框
a.文件类型:用于指定打开文件的类型。打开表文件,需要将文件类型设为“表(*.dbf)”。
b.查找范围:用于查找表文件所在路径。
文件名:用于直接输入打开的文件名。
c.以只读方式打开:只读方式是指打开表文件后,只能看浏览不能修改。若想修改表结构或是添加、修改、删除记录,则此项不可以选。
d.独占方式打开:在网络环境下以独占方式打开一个共享的表,单机系统下此项不选。
(2)关闭表
关闭表的方法有以下几种:
①关闭数据库文件。关闭数据库文件即关闭其中所有的表文件。
②关闭表文件的相关命令。

4.修改数据表的结构
对于已经创建的表文件,可根据需要修改表的结构信息进行修改。
(1)命令方式
格式:MODIFY STRUCTURE
功能:将当前已打开的表文件的表设计器打开并进行修改。
说明:要修改表结构必须要先打开需要修改结构的表文件。如果当前工作区中没有已打开的数据库,执行此命令时系统会弹出“打开”对话框,以便用户选择需要修改表结构的文件名及路径等信息,用户选择完成后,系统将弹出表设计器对话框。
主要有增加、修改、删除和移动几种操作。
①增加字段:将光标移至需插入位置上的字段上,单击“插入”按钮或按快捷键【Alt+I】,在该位置上出现一个新字段,原位置以下的各字段均下移一行。确定增加字段的字段名、字段类型、字段宽度等参数,单击“确定”按钮即可。
②修改字段:将光标定位在需要修改处,编辑修改,完成后单击“确定”按钮即可。
③删除字段:将光标移至需删除的字段上,单击“删除”按钮或按快捷键【Alt+D】,在该位置上的字段被删除,原位置以下各字段均上移一行。单击“确定”按钮即可。
④移动字段:将光标移至需移动位置的字段上,拖动字段名前的按钮,出现一个虚框,当虚框出现在目标位置上时松开鼠标,移动完成,单击“确定”按钮即可。
表结构的变化要影响表记录数据,无论是何种修改,单击“确定”按钮后,都要出现对话框由用户确认修改是否有效。
如果修改表结构完成后出现了数据丢失现象,或者对其不满意,可利用备份文件将表恢复到修改前的状态,方法是先将新的表文件删除掉,再将备份文件的扩展名.BAK改为表文件扩展名.DBF,将备注备份文件扩展名.TBK改为备注文件的扩展名.FPT。
(2)利用数据库设计器
在数据库设计器中选中需要修改的表文件,再单击“数据库”→“修改”命令,具体的修改方法与命令方式相同。
(3)利用项目管理器
在项目管理器中选中需要修改的表文件,再单击“项目”→“修改”命令或单击项目管理器中的“修改”按钮。
表结构修改完毕,注意单击表设计器上面的“确定”按钮,此时会显示一个警告提示对话框,如图4-20所示。

图4-20 修改表结构后存盘警告对话框