Visual FoxPro
1
i s u a l
F
V
o x P r o
Visual FoxPro
2
5.1 数据库的建立
5.2 数据库的操作
5.3 建立与修改数据库表
Visual FoxPro
3
5.1.1 建立数据库文件
在 Visual FoxPro中,建立数据库文件可以采用菜
单和命令两种操作方式。
1.菜单操作方式
选择“文件”菜单项中的“新建”命令,将出现
“新建”对话框。在,新建”对话框中选择“数据
库”单选按钮,再单击“新建文件”按钮,出现
“创建”对话框。 在“创建”对话框中输入数据库
文件名和保存位置。选择“保存”按钮,系统将打
开数据库设计器。
5.1 数据库的建立
Visual FoxPro
4
数据库设计器
Visual FoxPro
5
在数据库设计器上有一个浮动的数据库设计器工
具栏,可以利用数据库设计器工具栏快速访问与数
据库相关的选项。在菜单栏中有“数据库”菜单项,
其中包含了各种可用的数据库命令。此外,在数据
库设计器中任意空白区域单击鼠标右键,会弹出一
个快捷菜单,其中也包含了可用的数据库命令。
单击数据库设计器的关闭按钮可以关闭数据库设
计器。至此,已经建立了一个数据库文件,不过由
于还没有添加任何表和其他对象,所以只是建立了
一个空的数据库。
Visual FoxPro
6
2.命令操作方式
建立数据库文件也可以采用命令,其格式是:
CREATE DATABASE [<数据库文件名 >|?]
其中 <数据库文件名 >指定生成的数据库文件,若省略
扩展名,则默认为,dbc。如果未指定数据库文件名
或用,?”代替数据库文件名,Visual FoxPro会弹
出“创建”对话框,以便用户选择数据库存放的位
置和输入数据库名。保存后该数据库文件被建立,
并且自动以独占方式打开该数据库。
使用该命令建立数据库后并不打开数据库设计器,只
是建立一个新的数据库文件并打开此数据库。
Visual FoxPro
7
5.1.2 向数据库添加自由表
在 Visual FoxPro中,每个表可以有两种存在状态:
自由表或数据库表。 使用自由表还是数据库表来保
存要管理的数据,取决于管理数据之间是否存在关
系以及关系的复杂程度。如果用户要保存的数据关
系比较简单,使用自由表就够了。如果要保存的数
据需要多个表,表和表之间又存在相互关系,这时
就必须建立一个数据库,把这些表添加进数据库,
此时可以认为这个数据库拥有添加进来的表,但用
户数据仍然存储在数据库表中。数据库表文件与自
由表文件一样,其扩展名仍然为,dbf。
有了数据库文件,就可以向数据库添加表了。通
常,表只能属于一个数据库文件,如果想将一个数
据库中的表移到其他数据库,必须先从数据库中移
去该数据库表使之变成自由表,然后才能将其添加
到另一数据库中。
Visual FoxPro
8
向数据库添加表的方法是:在数据库设计器单击数
据库设计器工具栏的“添加表”按钮,在“打开”
对话框选择要添加表的表名,单击“确定”按钮,
这样,自由表被添加进数据库中,它成为数据库表。
也可以通过“数据库”菜单或“数据库”快捷菜单,
将表添加到数据库中。
在数据库设计器中先选中一个数据库,然后单击数
据库设计器工具栏的“移去表”按钮,或在“数据
库”菜单中选择“移去”命令,可以移去或删除数
据库中的表。
Visual FoxPro
9
5.1.3 为数据库表建立索引
为了建立表之间的永久关联,需要为数据库表建立
索引。为数据库表建立索引的方法是:选定数据库
表,单击数据库设计器工具栏的修改表按钮,弹出
表设计器窗口,在表设计器窗口单击索引选项卡,
在索引名、类型、表达式各栏依次输入有关内容。
Visual FoxPro
10
5.1.4 建立表之间的永久联系
表之间的永久联系是基于索引建立的一种永久关系,
这种联系被作为数据库的一部分而保存在数据库中。
当在“查询设计器”或“视图设计器”中使用表时,
这种永久联系将作为表间的默认连接条件保持数据
库表之间的联系。
表之间的永久联系在数据库设计器中显示为表索引之
间的连接线。操作方法是:在数据库设计器对话框,
首先,用鼠标左键选中父表中的主索引字段,保持
按住鼠标左键,并拖至与其建立联系的子表中的对
应字段处,再松开鼠标左键,数据库中的两个表间
就有了一个连线,其永久关系就已建立完成 。
Visual FoxPro
11
在数据库的两个表间建立永久联系时,要求两个表
的索引中至少有一个是主索引。必须先选择父表的
主索引,而子表中的索引类型决定了要建立的永久
联系类型。如果子表中的索引类型是主索引或候选
索引,则建立起来的就是一对一关系。如果子表中
的索引类型是普通索引,则建立起来的就是一对多
关系。
Visual FoxPro
12
如果需要编辑修改已建立的联系,可首先单击关系
连线,此时连线变粗,然后从“数据库”菜单项中
选择“编辑关系”命令。或者用鼠标右键单击连线,
从弹出的快捷菜单中选择“编辑关系”或“删除关
系”命令。或者双击连线,打开“编辑关系”对话
框,在该对话框中,通过在下拉列表框中重新选择
表或相关表的索引名则可以修改指定的关系。
Visual FoxPro
13
“编辑关系”对话框
Visual FoxPro
14
最后需要说明,数据库表之间的永久联系和不同工
作区中打开的表之间的关联是两个不同的操作。主
要区别是:
( 1)“永久联系”被保存在数据库中,在每次使用
表时不需要重新建立。而“关联”没有被保存在文
件中,每次打开表时都需重建,所以这种关联成为
“临时联系”。
( 2)“永久联系”反映了数据库中各表之间的默认
连接条件,而“临时联系”反映的是不同工作区中
表记录指针的联动关系。在实际应用系统中,不仅
需要永久联系,有时也需要控制表间记录指针移动
关系的临时联系。
Visual FoxPro
15
5.1.5 设置参照完整性
对于具有永久关系的两个数据库表,当对一个表
更新、删除或插入一条记录时,另一个表并未作相
应变化,这就破坏了数据的完整性。 Visual
FoxPro提供一个参照完整性生成器供用户指出保证
数据完整性的要求,Visual FoxPro则根据用户要
求生成参照完整性规则以保证数据完整性。
在建立参照完整性之前必须首先清理数据库,所
谓清理数据库是物理删除数据库各个表中所有带有
删除标志的记录。具体方法是选择“数据库”菜单
项中的“清理数据库”命令。
Visual FoxPro
16
1.参照完整性生成器窗口
选择“数据库”菜单项或数据库设计器快捷菜单
中的“编辑参照完整性”命令,或在“编辑关系”对
话框中单击“参照完整性”按钮,可打开参照完整性
生成器窗口。
参照完整性生成器窗口有更新规则、删除规则和插
入规则 3个选项卡,选项卡上有级联(插入规则选项
卡上没有此项)、限制和忽略 3个选项按钮和一张表
格。表格内有 3行信息,每行表示一个永久关系。每
一个永久关系对应更新、删除、插入 3种操作,可以
选择“级联”、“限制”、“忽略” 3个值之一,即
选择对应的 3个选项按钮之一。
Visual FoxPro
17
参照完整性生成器窗口
Visual FoxPro
18
当选择“更新规则”选项卡,可以利用 3个选择按
钮,设置关联表间的更新规则。 3个选择按钮的功
能如下:
级联,当更改父表中的某一记录时,子表中相应的记
录将会改变。
限制,当更改父表中的某一记录时,若子表中有相应
的记录,则禁止该操作。
忽略,两表更新操作将互不影响。
Visual FoxPro
19
当选择“删除规则”选项卡,可以利用 3个选择按
钮,设置关联表间的删除规则。 3个选择按钮的功
能如下:
级联,当删除父表中的某一记录时,将删除子表中相
应的记录。
限制,当删除父表中的某一记录时,若子表中有相应
的记录,则禁止该操作。
忽略,两表删除操作将互不影响。
Visual FoxPro
20
选择“插入规则”选项卡,可以利用 2个选择按
钮,设置关联表间的插入规则。 2个选择按钮的功
能如下:
限制,当在子表中插入某一记录时,若父表中没有相
应的记录,则禁止该操作。
忽略,两表插入操作将互不影响。
Visual FoxPro
21
2.设置参照完整性
设置参照完整性的方法是:在参照完整性生成器窗
口选定某一选项卡,单击表格某行左边的小按钮
(选定相应的永久关系),再单击某一单选按钮,
此时表格中对应值将随之变化。或直接单击表格单
元,在弹出的组合框内选择值,这时单选按钮随之
变化。设置完毕后,单击参照完整性生成器窗口的
“确定”按钮退出该窗口,完成参照完整性设置。
例如,图 5.5中设置了学生表和选课表的级联性更新。
Visual FoxPro
22
图 5.5参照完整性生成器窗口
Visual FoxPro
23
5.2.1 数据库的打开与关闭
1.数据库的打开
在数据库中建立表或使用数据库中的表时,都必须
先打开数据库。具体操作方法是:
选择“文件”菜单下的“打开”命令,出现“打开”
对话框。在该对话框中选择所要打开的数据库文件
名,单击“确定”按钮打开数据库。
5.2 数据库的操作
Visual FoxPro
24
也可以采用命令操作方式打开数据库。命令格式是:
OPEN DATABASE [<数据库文件名 > |?]
[NOUPDATE] [EXCLUSIVE|SHARED]
其中 <数据库文件名 >指定要打开的数据库名。如果
用户省略 <数据库文件名 >或用,?”代替数据库名,
系统会显示“打开”对话框。 NOUPDATE指定以只
读方式打开数据库,EXCLUSIVE指定以独占方式打
开数据库,SHARED指定以共享方式打开数据库。
Visual FoxPro
25
打开一个数据库文件,同名的,dct数据库备注文件
与,dcx索引文件也一起被打开。
数据库打开后,在“常用”工具栏中可以看见当前
正在使用的数据库名,同时当数据库设计器为当前
窗口时,系统菜单上出现“数据库”菜单项。
Visual FoxPro在同一时刻可以打开多个数据库,
但在同一时刻只有一个当前数据库,所有作用于数
据库的命令或函数都是对当前数据库而言的。当打
开多个数据库时,系统将最后被打开的数据库作为
当前数据库。可以从“常用“工具栏上的数据库下
拉列表中选择一个打开的数据库作为当前数据库,
或者使用 SET DATABASE命令选择一个数据库作
为当前数据库。
Visual FoxPro
26
注意:
( 1)在数据库被打开的情况下,它所包含的所有
表都可以使用。但这些表并没有被自动打开,使
用时仍需要用 USE命令打开。
( 2)当用 USE命令打开一个表时,系统首先在当
前数据库中查找该表,如果找不到,则在数据库
之外继续查找并打开指定的表(只要该表在指定
的路径下存在)。实际上要打开一个表并不一定
要打开数据库,这是 Visual FoxPro不够完善的
地方,因为它与以前版本的 FoxPro兼容。
Visual FoxPro
27
2.数据库的关闭
数据库文件操作完成后,必须将其关闭,以确保
数据的安全性。要关闭当前打开的数据库可以使用
CLOSE命令,其格式是:
CLOSE [ALL|DATABASE]
其中 ALL用于关闭所有对象,如数据库、表、索引
等。 DATABASE用于关闭当前数据库和数据库表。
Visual FoxPro
28
5.2.2 数据库的修改
在 Visual FoxPro中,修改数据库实际是打开数据
库设计器,在其中完成各种数据库对象的建立、修
改和删除等操作。 Visual FoxPro提供了专门的命令,
其格式是:
MODIFY DATABASE [<数据库文件名 > |?]
[NOWAIT] [NOEDIT]
Visual FoxPro
29
其中 <数据库文件名 >指定要修改的数据库名。如
果用户省略 <数据库文件名 >或用,?”代替数据库名,
系统会显示“打开”对话框。 NOWAIT只在程序中
使用,在命令窗口下无效。 NOWAIT选项的作用是
在数据库设计器打开后程序继续执行,即继续执行
MODIFY DATABASE NOWAIT之后的语句。如果
不使用该选项,则在数据库设计器打开后,程序暂
停,直到数据库设计器关闭后程序才会继续执行。
使用 NOEDIT选项只是打开数据库设计器,而禁止对
数据库进行修改 。
Visual FoxPro
30
5.2.3 数据库的删除
如果一个数据库不再使用了,需要将它删除。所采用
命令的格式是:
DELETE DATABASE [<数据库文件名
|?>][DELETETABLES][RECYCLE]
其中 <数据库文件名 >指定要删除的数据库名,此时要
删除的数据库必须处于关闭状态,被删除的数据库
中的表成为自由表。如果省略 <数据库文件名 >或用
,?”代替数据库名,系统会显示“打开”对话框,
可从其中选择要删除的数据库文件名 。
Visual FoxPro
31
Visual FoxPro的数据库文件并不真正含有数据库表
或其他数据库对象,只是在数据库文件中登录了相
关的条目信息,数据库表或其他数据库对象是独立
存放在磁盘上的。在一般情况下,删除数据库文件
并不删除数据库中的表等对象。要在删除数据库文
件的同时从磁盘上删除该数据库所含的表,可以在
命令中选择 DELETETABLES选项。
选择 RECYCLE选项则将删除的数据库文件和表文件
等放入 Windows的回收站中,需要时还可以还原它
们。
Visual FoxPro
32
第四章曾介绍了自由表的建立与修改,一个自由表
在数据库设计器中添加到数据库就成为一个数据库
表。在数据库环境下也可以直接建立表,而且也可
以对数据库中的表进行修改。
5.3 建立与修改数据库表
Visual FoxPro
33
5.3.1 在数据库中直接建立表
在数据库中直接建立表最简单的方法是使用数据库
设计器。打开数据库设计器后,在 系统菜单栏的
“数据库”菜单或 数据库设计器 快捷菜单中,选择
“新建表”命令,再在随后出现的“新建表”对话
框中选择“表向导”或“新建表”去建立新的表,
也可以选择“取消”暂时中断新建表的操作。
这里不介绍利用向导建立表,而是直接建立新表。
从“新建表”对话框中选择“新建表”,此时首先
出现“创建”对话框,在其中可以输入表名、选择
保存表的位置,然后单击“保存”按钮,此时便出
现数据库表的表设计器对话框。
Visual FoxPro
34
数据库表的表设计器
Visual FoxPro
35
第四章曾经介绍过用 CREATE命令建表。如果打
开了数据库,则 CREATE命令 在数据库中直接建立
表。 如果没有打开数据库,则 CREATE命令 建立的
表是自由表。第四章介绍的就是这种情况。
数据库表的表设计器对话框与自由表的表设计
器对 话框有所不同。数据库表的表设计器对话框的
下部,有显示、字段有效性、匹配字段类型到类和
字段注释 4个输入区域,这是自由表的表设计器所
没有的。这是因为数据库表具有一些自由表所没有
的属性,包括:
Visual FoxPro
36
( 1)数据库表可以使用长表名和长字段名。
( 2)可以为数据库表中的字段指定标题和添加注释。
( 3)可以为数据库表的字段指定默认值和输入掩码。
( 4)数据库表的字段有默认的控件类。
( 5)可以为数据库表规定字段级规则和记录级规则。
( 6)数据库表支持参照完整性的主关键字索引和表
间关系。
( 7)支持 INSERT,UPDATE和 DELETE事件的触
发器等。
( 8) INSERT,UPDATE 或 DELETE 事件的触发器。
Visual FoxPro
37
当建立数据库表时,不仅要确定字段名、类型、宽
度等内容,还可以给字段和表定义属性。当自由表
添加到数据库后,便可以立即获得许多自由表中得
不到的高级属性。这些属性被作为数据库的一部分
保存起来,并且一直为表所拥有,直到表从这个数
据库中移去为止。
1.字段的显示属性
字段的显示属性包括显示格式、输入掩码和标题。
( 1)字段显示属性
在数据库表设计器中,显示区的“格式”文本框用
于键入格式表达式,确定当前字段在浏览窗口、表
单或报表中显示时采用的大小写、字体大小和样式。
Visual FoxPro
38
( 2)输入掩码
输入掩码用于指定字段的输入格式。使用输入掩码
可减少人为的数据输入错误,提高输入准确性,保
证输入的字段数据格式统一和有效。
输入掩码必须按位指定,如设置 99-999,表示相应
字段只能输入数字,可输入 5位数字,第 3个符号,-”
不是输入掩码,照原样显示,,-”不用输入。
Visual FoxPro
39
( 3)标题
指定字段显示时的标题。
在 Visual FoxPro中,自由表的字段名最多包含 10
个字符,数据库表的字段名最多包含 128个字符。
在定义数据库表的字段名时,一般都比较简练,如
代表学生姓名的字段可用姓名,XM,NAME等作
为字段名,但在输出时难于表现字段的含义。为此,
Visual FoxPro提供了“标题”属性,标题用于为
当前字段指定在浏览窗口、表单或报表中的标题显
示内容。
Visual FoxPro
40
2.有效性规则
有效性规则是一个与字段或记录相关的表达式,
通过对用户的值加以限制,提供数据有效性检查。
建立有效性规则时,必须建立一个有效的规则表
达式,以此来控制输入到数据库表字段和记录中
的数据。有效性规则把所输入的值与所定义的规
则表达式进行比较,如果输入的值不满足规则要
求,则拒绝该值。
Visual FoxPro
41
根据激活方式的不同,有效性规则分两种:字段有
效性规则和记录有效性规则。字段有效性规则是对
一个字段的约束,检查单个字段中输入的数据是否
有效。记录有效性规则是对一个记录的约束,当插
入或修改记录时被激活,常用来检查数据输入的正
确性。记录有效性规则只有在整条记录输入完毕后
才开始检查数据的有效性。
有效性规则只在数据库表中存在。如果从数据库中
移去或删除一个表,则所有属于该表的字段有效性
规则和记录有效性规则都会从数据库中删除。因为
规则存储在数据库文件中,而从数据库文件中移去
表会破坏表文件和数据库文件之间的链接。
Visual FoxPro
42
( 1)字段有效性
字段有效性用于对当前字段输入数据的有效性、合
法性进行检验。规则栏输入一个逻辑表达式,如对
于性别字段输入:性别 =”男” OR 性别 =”女”。对
该字段输入数据时,Visual FoxPro将根据表达式
对其进行检验,如不符合规则,要修改输入数据,
至到符合规则才允许光标离开该字段。信息栏指定
输入有误时的提示信息,如“性别只能是男或女”。
默认值栏用于指定当前字段的默认值,在增加新记
录时,默认值会在新记录中显示出来,当该字段为
默认值时,不用输入,从而提高输入速度。
字段有效性区的 3个栏目均可单击其右边的按钮,
在弹出的对话框中输入信息。
Visual FoxPro
43
( 2)记录有效性
记录有效性验证指建立一规则对同一记录中不同字
段之间的逻辑关系进行验证。在数据库表的表设计
器中,“表”选项卡“记录有效性”中的“规则”
和“信息”框,可以为数据库表设置记录有效性规
则和违反该规则时显示的错误提示信息。
“规则”和“信息”两栏的指定均可单击其右边按
钮,在弹出的对话框中输入信息。
Visual FoxPro
44
显示“表”选项卡的表设计

Visual FoxPro
45
( 3)触发器
字段级有效性和记录有效性规则主要限制非法
数据的输入,而数据输入后还要进行修改、删除等
操作。若要控制对已经存在的记录所作的非法操作,
则应使用数据库表的记录级触发器。触发器是在某
些事件发生时触发执行的一个表达式或一个过程。
这些事件包括插入记录、修改记录和删除记录。当
发生了这些事件时,将引发触发器中所包含的事件
代码。
触发器包括插入触发器、更新触发器和删除触发
器。指定一规则,当对数据库表进行插入(包括追
加)、更新和删除时,验证规则,只有当规则成立
时才能进行相应操作。例如,设置“删除触发器”
的表达式为,EMPTY(姓名 )”,表示只有当相应记
录的“姓名”字段为空时才能删除该记录,这个触
发器用于保证不误删除记录。
Visual FoxPro
46
5.3.2 修改数据库中的表
这里讲修改数据库中的表是指在数据库设计器中
直接修改表的内容和表结构。如果不在数据库设计
器中,要对数据库表进行操作,第四章介绍过的命
令都是可用的。
在数据库设计器中,用鼠标右键单击要修改的表,
出现表的快捷菜单,然后从快捷菜单中选择“浏
览”,即进入表的浏览窗口,以后的操作和对自由
表的浏览操作相同。从快捷菜单中选择“修改”,
即打开相应表的表设计器,在表设计器可以完成表
结构的修改、建立索引以及设置字段属性和表的有
效性规则。
此外,双击要修改的表也能打开表的浏览窗口。
Visual FoxPro
47