1
第四章
Visual FoxPro 数据库及操作
目录
上页
下页
退出
2
本 章 目录
第一节 Visual FoxPro 数据库及其建立
第二节 数据库表的建立和操作
第三节 表的排序与索引
第四节 数据完整性
第五节 自由表
第六节 多表操作
目录
上页
下页
退出
3
第一节 Visual FoxPro 数据库及其建立
数据库是表的集合 。 从 Visual FoxPro 3.0开始引入
了真正意义上的数据库概念 。 把一个二维表定义为表,
把若干个关系比较固定的表集中起来放在一个数据库中
管理, 在表间建立关系, 设置属性和数据有效性规则使
相关联的表协同工作 。 数据库文件具有,dbc扩展名, 其
中可以包含一个或多个表, 关系, 视图等 。
一个 Visual FoxPro表或,dbf文件, 能够存在以下两种
状态之一:与数据库相关联的数据库表, 与数据库不关
联的自由表 。 二者的绝大多数操作相同且可以相互转换 。
相比之下, 数据库表的优点要多一些 。 当一个表是数据
库的一部分时, 它就可以具有以下内容:
● 长表名和表中的长字段名
● 表中字段的标题和注释
● 默认值, 输入掩码和表中字段格式化
● 表字段的默认控件类
目录
上页
下页
退出
4
● 字段级规则和记录级规则
● 支持参照完整性的主关键字索引和表间关系
● INSERT,UPDATE或 DELETE事件的触发器
一、建立数据库
1,命令方式
【 格式 】 CREATE DATABASE [<数据库文件名 >|? ]
【 功能 】 建立一个新的扩展名为,DBC的数据库文件并打
开此数据库 。
【说明】 <数据库文件名 >指定生成的数据库文件,若省
略扩展名,则默认为,DBC,同时也自动建立相关联的
数据库备注文件扩展名为,DCT,关联的索引文件扩展
名为,DCX。 如果未指定数据库文件名或用“?”代替
数据库名,Visual FoxPro系统会弹出创建对话框,以
便用户选择数据库建立的路径和输入数据库名。保存
后该数据库文件被建立,并且自动以独占方式打开该
数据库。
目录
上页
下页
退出
5
2.菜单方式
用菜单方式建立数据库的具体步骤如下,
( 1) 选择 【 文件 】 ∣ 【 新建 】 出现新建对话框 。
( 2) 选择, 数据库, 单选按钮, 再单击, 新建文件,
按钮, 出现, 创建, 对话框 。
( 3) 在, 创建, 对话框中输入文件名 。 选择, 保存,
按钮, 系统自动打开数据库文件, 并且将数据库
设计器 也自动打开 。
3,利用项目管理器建立数据库
打开已建立的项目文件, 出现项目管理器窗口 。 在
,数据, 选项卡中选择, 数据库,, 然后单击, 新
建数据库, 按钮, 再通过, 创建, 对话框提示用户
输入数据库名, 即扩展名为,DBC的文件名, 单击
,保存,, 出现数据库设计器 。
目录
上页
下页
退出
6
1,打开数据库
1),命令方式
【 格式 】 OPEN DATABASE [<数据库文件名 > |?]
[ EXCLUSIVE|SHARED]
【 功能 】 将磁盘上一个扩展名为,DBC的指定数据库文
件打开 。
【说明】 打开一个数据库文件,同名的,DCT相关的数
据库备份文件与,DCX相关的索引文件也一起被打开。
数据库打开后, 在常用工具栏中可以看见当前正
在使用的数据库名, 同时当数据库设计器为当前窗
口时, 系统菜单上出现 【 数据库 】 菜单项 。
<数据库文件名 >:指定要打开的数据库名。如果用
户省略 <数据库文件名 >或用“?”代替数据库名。系
统会显示打开对话框。
二、数据库的打开与关闭
目录
上页
下页
退出
7
在数据库被打开的情况下,它所包含的所有表
可以使用。但是,表并没有被真正打开,用户要打
开它,仍要用 USE命令。
2),菜单方式
( 1) 选择 【 文件 】 |【 打开 】, 出现打开对话框 。
( 2) 选择数据库文件所在的文件夹, 将文件类型
选择为, 数据库 (,dbc),。
( 3) 选择所要打开的数据库文件名,单击“确定”
按钮。
3),利用项目管理器打开数据库
打开已建立的项目文件,出现项目管理器窗口,
选择“数据”标签,选择要打开的数据库名,然后
单击“打开”按钮。
目录
上页
下页
退出
8
数据库文件操作完成后, 或暂时不用时, 必须
将其关闭, 保存在外部存贮器中以确保数据的安全
性 。 关闭数据库文件有以下几种方式:
1,命令方式
【 格式 】 CLOSE [ALL|DATABASE ]
【 功能 】 关闭当前打开的数据库 。
【 说明 】 ALL用于关闭所有对象 。 如数据库, 表, 索
引, 项目管理器等 。
DATABASE关闭当前数据库和数据库表;如
果当前没有打开的数据库,则关闭所有打开的自由
表、所有工作区内所有索引和格式文件。
三、数据库的关闭
目录
上页
下页
退出
9
2,利用项目管理器关闭数据库
打开已建立的项目文件, 出现项目管理器窗口,
选择, 数据, 标签, 选择, 数据库, 下面需要关闭
的数据库名, 然后单击, 关闭, 按钮 。 在常用工具
栏上的当前数据库下拉列表框中该数据库名消失,
同时在项目管理器中, 关闭, 按钮变成, 打开, 按
钮 。
四, 数据库的修改
在 VFP中,修改数据库实际是打开数据库设计器,
用户可以在数据库设计器中完成各种数据对象的建
立、修改、删除等操作。
目录
上页
下页
退出
10
数据库设计器打开的方法:
( 1) 从项目管理器中打开数据库设计器 。
( 2)从, 打开, 对话框中打开数据库设计器。
( 3) 用命令方式打开数据库设计器 。
命令格式:
MODIFY DATABASE [数据库文件名 |? ][NOWAIT][NOEDIT]
说明:
( 1) 数据库文件名, 是指定要修改的数据库文件名, 选用
,?,, 则弹出, 打开, 对话框, 选定要打开的数据库文
件 。
( 2) NOWAIT选项:只用于程序中,交互方式下无效。
( 3) NOEDIT,指打开数据库设计器,但禁止对数据库进行修
改。
目录
上页
下页
退出
11
1,命令方式
【 格式 】 DELETE DATABASE <数据库文件名 |? >
【 功能 】 从磁盘上删除一个扩展名为,DBC的数据库文件 。
【 说明 】 被删除的数据库不能处于打开状态 。 被删除的
数据库中的表成为自由表 。
数据库文件名可以包括数据库的路径和数据库名字 。 如
果用,?, 代替数据库文件名, 将显示打开对话框, 用
户从打开对话框中选择要从磁盘上删除的数据库的名字 。
2,使用项目管理器
打开已建立的项目文件, 出现项目管理器窗口, 单
击, 数据, 标签, 选择要删除的, 数据库,, 然后单击
,移去, 按钮 。 若选择, 移去, 仅将数据库从项目中移
去, 被删除的数据库中的表成为自由表 。 若选择, 删除,
将从磁盘上删除数据库 。
五、删除数据库
目录
上页
下页
退出
12
前面我们已经知道表有二种, 一种是数据库表,
另一种是自由表 。 如果建表时数据库是打开的, 则
建立的表为当前数据库表, 否则, 建立自由表 。
无论建立那种表, 其方法都相同 。 一个表由表
结构和表记录两部分组成 。 表结构描述了数据存放
形式以及存贮的顺序, 确定了表的字段, 就完成了
对表结构的定义;表记录是表所要保存的数据主体,
数据由记录组成, 字段是构成记录的基本单元 。
建立一个表文件首先第一步就是建立表结构,
然后再输入表记录 。
建立表结构的方法有很多, 在这里主要讲述三
种方法:命令方式, 菜单方式和使用项目管理器的
方式 。
第二节 数据库表的建立 和操作
目录
上页
下页
退出
13
一, 数据库表的建立
1,命令方式
【 格式 】 CREATE [<表文件名 > |?]
【 功能 】 建立一个新的, 扩展名为,DBF的表文件 。
【 说明 】 <表文件名 >指定生成的表文件名, 若缺省扩展
名, 则默认为,DBF。 如果使用,?, 或末指定表
文件名, Visual FoxPro系统会弹出创建对话框,
以便用户输入表名 。
目录
上页
下页
退出
14
现在用命令方式来建立 stud.dbf表 。 表内容如下:
学号 姓名 性别 班级名 系别代号 地址 出生日期 是否团员 照片 备注
011110 李建国 男 计 0121 01 湖北武汉 09/28/84 T
011103 李宁 女 电 0134 02 江西九江 05/06/85 F
011202 赵娜 女 英 0112 03 广西南宁 02/21/84 F
021204 孙亮 男 电 0134 02 湖南长沙 09/08/86 T
011111 赵琳 女 计 0121 01 江苏南京 11/18/85 T
021405 罗宇波 男 英 0112 03 江苏南通 12/12/85 F
目录
上页
下页
退出
15
用命令方式建立表的具体步骤为:
( 1) 如果没有建立 STUDENT数据库, 则先建立数据库再
打开它 。 如果创建自由表, 该步可略去 。
( 2) 在命令窗口中输入 CREATE STUD回车, 系统打开
,表设计器, 对话框, 如图 3-1和图 3-2所示 。
( 3) 在, 字段名, 文本框中输入第一个字段名:, 学
号,, 在, 类型, 下拉列表框中, 选择字段的类型为
字符型, 在宽度输入框中输入 10或单击右边的微调按
钮至 10。
( 4) 将输入光标定位在第二个字段的字段名上, 用同样
的方法依次输入各个字段的字段名, 类型, 宽度和小
数位数 。
( 5)将所有字段的参数确定好之后,单击, 确定, 或按
快捷键 CTRL+W存盘。系统会打开提示窗口,询问用户
是否立即输入记录,选择, 是, 立即开始输入记录,
选择, 否, 不输入记录,光标返回命令窗口,只建立
表结构。
目录
上页
下页
退出
16
图 3-1 自由表设计器
图 3-2 数据库表设计器
目录
上页
下页
退出
17
表设计器对话框中包含, 字段,,, 索引,,, 表, 三
个选项卡 。
1), 字段, 选项卡,适用于建立表结构, 确定表中每个
字段的字段名, 字段类型, 字段宽度和小数位数等 。
● 字段名:是某字段的名字 。 在表中必须是唯一的, 字
段名必须以汉字, 字母和下划线开头, 由汉字, 字母,
数字和下划线组成, 对于数据库表支持长字段名, 字
段名最多为 128个字符, 自由表不支持长字段名, 字段
名最多为 10个字符 。 当数据库表转化为自由表时截去
超长部分的字符 。 字段名不能使用系统的保留字 。
● 字段类型:表示该字段中存放数据的类型。一个字段
即二维表中的一列,其中的数据应具有共同的属性。
若存放的是一些符号,不进行数值运算,则定义为字
符型;若需要进行数值运算,则根据数值表示的实际
意义,选择数值型、货币型、浮点型、双精度型、整
型中的一种。对描述日期的字段,可根据需要定义为
日期型或日期时间型。对取值只有两种情况,为, 真,
或为, 假, 的数据定义为逻辑型。
目录
上页
下页
退出
18
若存储的字符超过 254,为节省存储空间可定义为备
注型。若要保存图片或 OLE对象,可定义为通用型。
备注型和通用型字段的信息都没有直接存放在表文
件中,而是存放在一个与表文件同名的,FPT文件中。
● 字段宽度:表示该字段所允许存放数据的最大宽度 。
由数据的最大宽度决定 。 过大浪费存储空间, 过小
数据溢出 。 字符型字段的最大宽度 254个字符, 数值
型字段和浮点型字段的宽度为 20位, 逻辑型字段的
宽度固定为 1,日期型字段的宽度固定为 8,通用型
字段和备注型字段的宽度固定为 4。
● 小数位数:只对数值型字段和浮点型字符等数值类
型有效,允许最大宽度 20。在计算数值型字段和浮
点型字段的宽度时,小数点本身也算作一个字符。
数值型字段的小数位数由数据的精度决定位数。
若建立的是数据库表,则下面还有显示、字段有效
性等框。
目录
上页
下页
退出
19
① 字段的显示属性
● 格式:控制字段在浏览窗口, 表单, 报表等显示
时的样式 。 格式字符及功能如表 3-1所示 。
字符 功 能 字符 功 能
A 字母字符,不允许空格和标点符号 R 显示文本框的格式掩码,但不保存到字段中
D 使用当前的 SET DATA格式 T 删除前导空格和结尾空格
E 英国日期格式 ! 字母字符转换成大写
K 光标移至该字段选择所有内容 ^ 用科学计数法表示数值数据
L 数值字段显示前导 0 $ 显示货币符号
表 3-1 字段的格式字符
目录
上页
下页
退出
20
表 3-2 字段的显示掩码字符
● 标题:若表结构中字段名用的是英文,则可以在
标题中输入汉字,这样显示该字段值时就比较直
观了。没有设置标题,则将表结构中的字段名作
为字段的标题。
字符 功 能 字符 功 能
X 任意字符 * 左侧显示 *
9 数字字符和 +-号, 指定小数点位置
# 数字字符,+-号和空格,用逗号分隔整数部分
$ 指定位置显示货币符号 $$ 货币符号与数字不分开显示
● 输入掩码:控制输入该字段的数据的格式。掩码
字符及功能如表 3-2所示。
目录
上页
下页
退出
21
② 字段有效性
● 规则:限制该字段的数据的有效范围 。 在规则中输入:
性别 ="男 ".OR.性别 ="女 "。 这样当给, 性别, 字段输
入记录值时就只能输入, 男, 或, 女, 。
● 信息:当向设置了规则的字段输入不符合规则的数据
时, 就会将所设置的信息显示出 。
● 默认值:当往表中添加记录时,系统向该字段预置的
值。在, 性别, 字段中输入默认值为, 男, 。输入记
录时只有女生才需要改变默认值,可以减少输入。
字段有效性的设置可在图 3-2中进行 。
2) 表选项卡,字段选项卡上主要介绍的是字段属性,
它控制了字段值的输入, 表选项卡则对表的记录属性
进行描述, 控制记录数据 。
在这里主要介绍记录有效性和触发器。如图 3-3所示。
目录
上页
下页
退出
22
图 3-3 记录有效性和触发器
目录
上页
下页
退出
23
① 记录有效性
● 规则:指定记录的有效条件, 满足该条件, 数据
才能输入到表中, 它确定的是该记录各字段值之
间的总体数据关系是否有错 。
● 信息:当记录的数据不符合规则时, 由系统显示
给用户的提示信息 。
② 触发器
当对记录进行操作时, 若设置了触发器, 则
对触发器设置的条件表达式进行验证, 若其值为
真,T.,则允许进行相关操作, 否则, 则拒绝操作 。
● 插入触发器:当向表中插入或追加记录时, 判断
其表达式的值, 为, 真, 允许插入或追加, 为
,假, 不允许插入或追加 。
● 更新触发器:当要修改记录时, 判断其表达式的
值, 为, 真, 允许修改, 为, 假, 不允许修改 。
目录
上页
下页
退出
24
● 删除触发器:当要删除表中记录时, 判断其表达
式的值, 为, 真, 允许删除, 为, 假, 不允许删
除 。
以上三类触发器也可以用相应的命令实现:
CREATE TRIGGER ON 表名 FOR INSERT AS触
发条件表达式
CREATE TRIGGER ON 表名 FOR UPDATE AS触
发条件表达式
CREATE TRIGGER ON 表名 FOR DELETE AS触
发条件表达式
2,菜单方式
选择 【 文件 】 |【 新建 】 打开新建对话框, 选择
,表,, 单击, 新建文件, 出现创建对话框, 确
定需要建立表的路径和表名, 按, 保存, 按钮后,
出现, 表设计器, 对话框 。 以下步骤同命令方式 。
目录
上页
下页
退出
25
3,用项目管理器新建表
打开已建立的项目文件,出现项目管理器窗口,选
择, 数据, 选项卡中的, 数据库, 下的表,然后单击
,新建, 按钮。出现新建表对话框,选择, 新建表, 出
现创建对话框,确定需要建立表的路径和表名,按, 保
存, 按钮后,出现图 3-1所示的, 表设计器, 对话框。
以下步骤同命令方式。
二, 数据库表记录的输入
如果在刚建好表结构时, 在系统提示是否立即输入记
录的对话框中选择, 是, 可直接进入输入记录窗口 。 如
果选择了, 否,, 再想输入表记录就要以追加方式输入
记录 。
输入表记录的方法又分为命令方式和菜单方式两种方法 。
1,命令方式
【 格式 】 APPEND [BLANK]
【 功能 】 在当前已打开表的末尾追加一条或多条记录 。
目录
上页
下页
退出
26
【说明】 BLANK,表示在表末尾追加一条空记录,并
自动返回命令窗口,此时系统并不弹出编辑窗口。
【 例 4-1】 在学生表末尾追加记录 。
USE STUD &&打开表
APPE &&或 EDIT
注意,输入逻辑值时只输入 T或 F,定界符系统自动生成
输入日期值时只输入 数码,分隔符系统自动生成
输入备注值时,光标位于 MEMO上时,按
CTRL+PgDn进入编辑窗口,完成后按 CTRL+W
返回下一个字段继续输入。
2.菜单方式
( 1) 首先打开表 STUD.DBF。
( 2) 选择 【 显示 】 |【 浏览 】 命令 。
( 3) 选择 【 表 】 |【 追加新记录 】 命令, 用户可以输
入追加记录的各个字段 。
目录
上页
下页
退出
27
1,表的打开
表文件建好后, 以文件的形式保存在磁盘上, 在
进行各种操作之前, 首先必须打开表 。 打开表的过程
实质上就是将表从磁盘调入内存, 这样就可以对表中
的数据进行各种操作 。 系统在任何时刻都只能对内存
中的表进行访问 。
( 1) 命令方式
【 格式 】 USE [[<盘符 >][<路径 >]<[数据库名 ! ]表文件
名 |?>
【 功能 】 打开指定磁盘的指定路径下的表和相关的索
引文件 。
【 说明 】 <盘符 >和 <路径 >:指定表文件所在的驱动器
及路径, 若 省 略 盘 符 和 路 径 参 数, 则 打 开 当
前盘, 当前路径下的表文件 。
三、表的打开与关闭
目录
上页
下页
退出
28
[数据库名 ! ]表文件名:指定打开指定数据库中
的表文件 。 若末指定数据库名, 则在当前数据库
中查找, 没有则在自由表中查找 。 两者同名, 则
打开数据库中的表 。
如果表文件中含有通用型, 备注型字段, 同名
的,FPT文件也同时打开 。
若不指定表文件名而使用,?”, 系统会弹出
,使用, 对话框, 以便用户指定打开表的文件名 。
【 例 4-2】 打开在 E盘 VFP子目录中 STUD.DBF表 。
USE E:\VFP\STUD
( 2) 用项目管理器打开表
在项目管理器中选中需要打开的表, 选择, 浏览,
或, 修改, 都能直接打开表且进行浏览或修改,
关闭浏览或修改窗口后, 该表仍处于打开状态 。
目录
上页
下页
退出
29
2,表的关闭
表文件操作完成后, 或暂时不用时, 必须将其关
闭, 保存到外存中以确保数据的安全性 。 关闭表就是
将表文件从内存中调出, 保存在磁盘上 。 关闭表文件
有以下几种方式:
( 1) 打开另一个表文件
如果工作区中已打开有表文件, 打开另一表文件时,
系统将自动将先前打开的表文件关闭 。
( 2) 使用不带任何选项的 USE命令
【 格式 】 USE
【 功能 】 关闭当前已打开的表文件 。
( 3) 使用 CLEAR命令
【 格式 】 CLEAR ALL
【 功能 】 关闭所有工作区中已打开的表文件, 索引文
件, 格 式 文 件 及 备 注 文 件 等, 同 时 释 放 所 有
的内存变量 。 并选择工作区 1为当前工作区 。
目录
上页
下页
退出
30
( 4) 使用 CLOSE命令
【 格式 1】 CLOSE ALL
【 功能 】 关闭各种类型文件, 并选择工作区 1为当前
工作区 。
【 格式 2】 CLOSE DATABASES
【 功能 】 关闭所有已打开的数据库文件, 表文件, 索
引文件, 格 式 文 件 及 备 注 文 件 等, 并 选 择 工 作
区 1为当前工作区 。
( 5) 退出 Visual FoxPro系统
【 格式 1】 QUIT
【 功能 】 退出 Visual FoxPro系统, 并关闭所有打开的
文件, 返回操作系统 。
( 6) 在数据工作窗口中关闭
在数据工作窗口中选择要关闭的表文件, 然后
选择, 关闭, 按钮, 系统将关闭所选择的表文件 。
目录
上页
下页
退出
31
1,删除自由表
【 格式 】 DELETE FILE [表文件名 |? ]
【 功能 】 将指定的表文件从磁盘上删除 。
【 说明 】 如果删除的表文件存在有与之相关的,fpt备注文
件和 (, cdx或, idx) 索引文件, 则同时删除这
些文件 。 删除一个表文件, 应保证该表文件是
处于关闭状态的 。 要删除的表文件如果不是在
默认的路径下, 则文件名应指明路径 。 表文件
名不能包含通配符 。
若不指定文件名或使用,?”,系统会弹出
“删除” 对话框,选择要删除的表文件路径、
文件类型 及文件名后,单击,删除”按钮。
四、表的删除
目录
上页
下页
退出
32
2,删除数据库表
先将数据库表从数据库中移去, 然后再用删除自
由表的方法进行删除 。
移去数据库表的命令是:
【 格式 】 REMOVE TABLE [表文件名 |? ]
[DELETE][RECYCLE]
【 功能 】 从当前数据库中移去一个表 。
【说明】 表文件名:准备从数据库中移去的表文件名。
选择?将出现移去对话框,从中选择一个要
从当前数据库中移去的表。
选择 DELETE在移去数据库表的同时,从磁盘上
删除。选择 RECYCLE在移去数据库表的同时,不会
立即从磁盘上删除,而是放入回收站中。
目录
上页
下页
退出
33
3,在项目管理器中删除表
在项目管理器中选中需要删除的表,选择“移去”
按钮或选择主菜单中【项目】 |【移去文件】命令,出
现一个选择对话框,若选择“移去”按钮,则将表文
件移出项目文件,若选择“删除”按钮,则将表文件
从磁盘上删除。
五、表的显示
1,表结构的显示
在表的使用过程, 要经常查看表的结构和记录, 以
随时了解表的变化情况 。
【 格式 】 LIST | DISPLAY STRUCTURE [TO PRINT
[PROMPT] | TO [FILE] [<文件名 >]]
【 功能 】 显示或打印当前表文件的结构。
目录
上页
下页
退出
34
在执行以上命令时, 如果系统中没有已打开的表文件,
系统提示输入文件名 。 用 LIST命令, 所有信息连续显示,
信息较多时, 屏幕停止在最后一屏;用 DISPLAY命令, 如
果信息较多则分屏显示, 敲任意键继续显示下一屏 。
【例 4-3】显示表 STUD.DBF的结构。
USE STUD
LIST STRUCTURE
需要指出的是,最后一行显示出的记录字节数是所有
字段宽度之和再加 1。这额外的一个字节是用来存放记录的
删除标记( *)的。
2,表记录的显示
1),命令方式
【 格式 】 LIST | DISPLAY [FIELDS <字段名表 >][<范围 >]
[ FOR< 条件表达式 >] [ WHILE < 条件表达式
>][OFF][NOCONSOLE] [TO PRINTER [PROMPT] | TO
FILE<文件名 >]
【 功能 】 将当前表文件的记录按照指定的选项进行显示。
目录
上页
下页
退出
35
【 说明 】 DISPLAY命令与 LIST命令的功能相似, 当表
文件的数据记录较多时, 用 DISPLAY命令较为方便 。
还有一点不同之处就是, 如果同时缺省 <范围 >和 <条
件 >子句, DISPLAY命令只显示当前的一条记录, 而
LIST命令则是取默认值 ALL而显示全部记录 。
FIELDS <字段名表 >:用来指定显示的字段 。
<范围 >:用来指定显示哪些记录 。
,范围, 有以下四种表示方法:
● ALL,所有记录 。
● NEXT N,从当前记录开始, 后面的 N条记录 ( 包括
当前记录 )
● RECORD N,第 N条记录。
● REST,当前记录后的全部记录(包括当前记录)。
目录
上页
下页
退出
36
FOR<条件表达式 >:指定对表文件中指定范围内满
足条件的记录进行操作 。
WHILE<条件表达式 >:也是指定对表文件中指定范
围内满足条件的记录进行操作, 但是, 当第一次
遇到不满足条件的记录时, 停止继续往后搜索 。
WHILE<条件表达式 >若与 FOR<条件表达式 >同时
使用, 则 WHILE项优先;若两者都不选用, 则显
示 <范围 >中指定的全部记录 。
OFF,表示不显示记录号;若不选此项,则在各记
录前显示记录号。
【 例 4-4】 显示表 STUD.DBF的全部记录 。
USE STUD
LIST
目录
上页
下页
退出
37
【 例 4-5】 显示男生的记录 。
USE STUD
DISPLAY FOR 性别 =’ 男 ’ FIELDS 学号,
姓 ;名,性别,班级名,系别代号
【 例 4-6】 显示表中所有记录的学号, 姓名和性别 。
USE STUD
LIST FIELDS 学号,姓名,性别
【 例 4-7】 显示 表 中 1985年出生的同学的学号, 姓名,
性别及出生日期 。
USE STUD
LIST FIELDS 学号,姓名,性别,出生日期 ;
FOR YEAR(出生日期 )=1985
目录
上页
下页
退出
38
2),菜单方式
( 1) 打开表 。
( 2) 选择 【 显示 】 |【 浏览 】 命令, 系统弹出记录浏览窗
口, 显示当前表中的记录 。 这时还可以选择 【 显示 】
|【 浏览 】 或 【 编辑 】 来改变显示方式 。
3),利用项目管理器
在项目管理器中, 选择需要显示的表文件, 单击
,浏览, 按钮或选择主菜单中 【 项目 】 |【 浏览 】 命令,
系统弹出记录浏览窗口, 显示当前表中的记录 。
目录
上页
下页
退出
39
六、表的修改
1,表结构的修改
表结构的改变有时会引起表记录的变化, 所以在
一般情况下不轻易进行修改 。 但在确实需要时也可以
进行修改 。 无论进行何种修改, 使用的命令都是一个
1),命令方式
【 格式 】 MODIFY STRUCTURE
【 功能 】 将当前已打开的表文件的表设计器打开进行修
改 。
【 说明 】 要修改表结构必须要先打开需要修改结构的表
文件 。 如果当前工作区中没有已打开的数据库, 执行
此命令时系统会弹出, 打开, 对话框, 以便用户选择
需要修改表结构的文件名及路径等信息, 用户选择完
成后, 系统将弹出表设计器对话框 。
主要有增加, 修改, 删除和移动几种操作 。
目录
上页
下页
退出
40
( 1) 增加字段:将光标移至需插入位置上的字段上, 选
择, 插入, 按钮或按快捷键 ALT+I,在该位置上出现
一个新字段, 原位置以下的各字段均下移一行 。 确定
增加字段的字段名, 字段类型, 字段宽度等参数, 选
择, 确定, 按钮即可 。
( 2) 修改字段:将光标定位在需要修改处, 编辑修改,
完成后选择, 确定, 按钮即可 。
( 3) 删除字段:将光标移至需删除的字段上, 选择, 删
除, 按钮或按快捷键 ALT+D,在该位置上的字段被删
除, 原位置以下各字段均上移一行 。 选择, 确定, 按
钮 。
( 4) 移动字段:将光标移至需移动位置的字段上, 用鼠
标拖动字段名前的,” 按钮, 出现一个虚框, 当虚框
出现在目标位置上时松开鼠标, 移动完成, 选择, 确
定, 按钮即可 。
无论是何种修改, 选择, 确定, 按钮后, 由于表结构
的变化要影响表记录数据, 所以都要出现对话框由用
户确认修改是否有效 。
目录
上页
下页
退出
41
使用 MODIFY STRUCTURE命令要注意以下几点:
① 在 MODIFY STRUCTURE命令的执行期间, 如果
强行退出, 有可能丢失数据 。
② 不能同时修改字段名和它的类型, 否则系统将不
能正确地送回原来的数据而造成数据的丢失 。
③ 如果在修改字段名的同时插入或删除了字段, 会
引起字段位置发生变化, 有可能造成数据丢失 。 但
是, 在插入或删除字段的同时却可以修改字段的宽
度或字段的类型, MODIFY STRUCTURE将根据字
段名正确地从备份文件中传送数据 。
④ 如果修改表结构完成后出现了数据丢失现象,或
者对其不满意,可利用备份文件将表恢复到修改前
的状态,方法是先将新的表文件删除掉,再将备份
文件的扩展名,BAK改为表文件扩展名,DBF,将备
注备份文件扩展名,TBK改为备注文件的扩展名,FPT。
目录
上页
下页
退出
42
2),利用数据库设计器
在数据库设计器中选中需要修改的表文件, 再选
择主菜单中 【 数据库 】 |【 修改 】 命令, 具体的修改
方法同命令方式 。
3),利用项目管理器
在项目管理器中选中需要修改的表文件, 再选择
主菜单中 【 项目 】 |【 修改 】 命令或单击项目管理器
中的, 修改, 按钮 。
2,修改记录
在表的使用维护过程中, 有大量的工作是对数据
记录的修改, 编辑与更新, 通常可以采用编辑修改,
浏览修改和替换修改三种方式 。
目录
上页
下页
退出
43
1),编辑修改
【 格式 】 EDIT / CHANGE [FIELDS <字段名表 >]
[<范围 >] [FOR <逻辑表达式 1>] [WHILE <逻辑
表达式 2>]
【 功能 】 按照给定条件编辑修改当前打开的表文件记录 。
【 说明 】 [FIELDS <字段名表 >]:若选择此选项, 则只
列出字段 名表中 的字 段, 且 显示顺 序同字 段名
表中的顺 序;若 未选 择此选 项, 将 显示表 中的
所有字段, 显示顺序同表中的字段顺序 。
[<范围 >]:若未选择此选项, 则 EDIT/CHANGE命令的
范围为全部记录 。
[FOR <逻辑表达式 1>]和 [WHILE <逻辑表达式 2>]:
同前面其他命令所述, 在此不再重复叙述 。
目录
上页
下页
退出
44
【 例 4-8】 修改 STUD.DBF中计 0121班学生的学号,
姓名和性别等信息 。
USE STUD
EDIT FIELDS 学号,姓名,性别 FOR 班级名
=” 计 0121”
全部修改完毕,使用 Ctrl+End 或 Ctrl+W 键保
存所有修改的结果。
目录
上页
下页
退出
45
2),浏览修改
( 1) 命令方式
【 格式 】 BROWSE [FIELDS <字段名表 >] [FOR <逻
辑表达式 1>]
【 功能 】 显示当前表的记录内容, 以供编辑修改 。
【 说明 】 编辑结束后, 按 Ctrl+W或 Ctrl+End存盘退出
BROWSE 编辑窗口, 或者按 Ctrl+Q 或 Esc 键
放弃存盘退出 BROWSE窗口 。
( 2) 菜单方式
利用菜单方式进行浏览修改的操作步骤如下:
① 打开表 。
② 选择 【 显示 】 |【 浏览 】 命令, 系统弹出记录浏览窗
口 。
③ 在编辑修改窗口中编辑修改数据内容, 完成后按
Ctrl+W键存盘退出 Browse窗口 。
目录
上页
下页
退出
46
3),替换修改
( 1) 命令方式
【 格式 】 REPLACE <字段名 1> WITH <表达式 1>
[ ADDITIVE][,< 字 段 名 2 > WITH < 表达式 2 >
[ADDITIVE]],.,[<范围 >][ FOR <逻辑表达式 1>]
[WHILE <逻辑表达式 2>] [NOOPTIMIZE]
【 功能 】 用指定表达式的值替换当前表中满足条件记
录的指定字段的值 。
【 说明 】
该命令适合对当前库进行成批地, 有规律地修改 。
缺省范围, 条件时, 仅替换当前记录 。
该命令回车后,数据修改自动完成。适用于程序设计。
ADDITIVE,只对备注型字段修改有效。
选择:表示添加内容,不选择:表示替换内容。
表达式的类型必须与字段类型一致 。
表达式的值不能超出字段宽度,否则,数据无效。
目录
上页
下页
退出
47
【 例 4-9】 修改 STUD.DBF中的, 学号, 字段数据, 。
USE STUD
REPLACE 学号 WITH,20”+学号 ALL
( 2) 菜单方式
① 打开表文件 。 选择 【 显示 】 |【 浏览 】 命令 。
② 选择 【 表 】 |【 替换字段 】 命令, 弹出图 3-4
所示的, 替换字段, 对话框 。
③ 单击字段下拉按钮选择要进行替换操作的字
段名, 在, 替换为, 显示栏中输入替换表达式,
再选择, 替换条件, 显示框中的范围, 条件 。
④ 单击, 替换, 按钮, 系统将自动完成替换操
作 。
目录
上页
下页
退出
48
表 3-4 替换字段对话框
目录
上页
下页
退出
49
七、记录指针的定位
记录号用于标识数据记录在表文件中的物
理顺序 。
记录指针是一个指示器, 它始终指向当前
表中正在操作处理的那条记录, 此记录被称
为当前记录 。 如果要对某条记录进行处理,
必须移动记录指针, 使其指向该记录 。 在任
意时刻指针只能指向唯一的一条记录 。
记录指针定位有绝对定位, 相对定位和查
询定位三种 。 在这里暂时只讲前二种, 查询
定位在讲到查询时再详细介绍 。
目录
上页
下页
退出
50
1,绝对定位
【 格式 】 [GO | GOTO] <[RECORD] <数值表达式 1> [IN
<数值表达式 2> | IN <字符表达式 >]
【 功能 】 将记录指针绝对定位到 <数值表达式 1>指定的记
录上 。
<数值表达式 1>:记录的物理记录号 。
IN <数值表达式 2> | IN <字符表达式 >:指定操作
表所在的工作区;若缺省, 则对当前工作区表操
作 。 工作区的概念在后面再详细介绍 。
绝对定位与是否打开索引文件没有关系。
目录
上页
下页
退出
51
2,相对定位
【 格式 1】 SKIP [<数值表达式 1>] [IN <数值表达式 2> | <字
符表达式 >]
【 功能 】 记录指针从当前记录向前 ( 或向后 ) 移动若干个
记录 。
【 说明 】 <数值表达式 1>:表示移动的记录个数 。 若数值
表达式的值为负值, 表示向前移动记录;否则, 表示向
后移动记录 。 如果缺省此项, 则表示向后移动 1个记录 。
如果记录指针已经移过文件的最后一个记录, 则
RECNO( )函数返回的值等于文件中的记录总数加 1,
EOF( )函数返回逻辑真 (,T.) 值 。
【 格式 2】 GO|GOTO <|TOP | BOTTOM>
【 功能 】 将记录指针移动到表文件的首记录或尾记录 。
TOP,将记录指针移动到表文件的首记录 。
BOTTOM,将记录指针动到表文件的最后一条记录 。
目录
上页
下页
退出
52
相对定位与是否打开索引文件有关。如果打
开了索引文件,记录指针按索引文件中顺序移动。
否则按表文件中物理顺序移动。
【 例 4-10】 绝对定位命令的用法 。
USE STUD
GOTO 2
GO 3
【 例 4-11】 相对定位的用法 。
USE STUD
SKIP 4 && 系统主窗口显示为 5
SKIP –3 && 系统主窗口显示为 2
SKIP 8 && 超出了记录总数 6
go top && 系统主窗口显示为 1
目录
上页
下页
退出
53
表记录的删除也是表维护的一项经常性的工作, 因
为删除意味着数据的消失, 所以对记录的删除操作比较
慎重, 删除可分为逻辑删除和物理删除两种操作 。 逻辑
删除还可以恢复, 而物理删除则不可恢复 。
1,逻辑删除记录
逻辑删除就是给指定的记录作删除标记, *, 。
( 1) 命令方式
【 格式 】 DELETE [<范围 >] [FOR <条件 >] [WHILE <条件 >]
【 功能 】 对 当前表中指定范围内满足条件的记录作删除
标记,*”。
【说明】 DELETE命令仅仅是在要删除的记录前加上一
个删除标记,*”,并不是真正地从表文件中将该记录
删除掉。可以用 LIST或 DISP命令显示带删除标记的记
录。
八、表记录的删除
目录
上页
下页
退出
54
<范围 >,FOR<条件 >,WHILE<条件 >等各项选项意
义同前;如果同时缺省 <范围 >和 <条件 >子句, 则仅
仅删除当前的记录 。
【 例 4-12】 删除 STUD.DBF中所有男同学的记录 。
USE STUD
DELETE FOR 性别 ="男 "
LIST FIELDS 学号, 姓名, 性别, 班级名, 系别 ;
代号, 地址, 出生日期, 是否团员
( 2) 菜单方式
利用菜单方式逻辑删除记录的具体操作步骤如下:
① 首先打开表文件
② 选择 【 显示 】 |【 浏览 】 命令, 系统弹出记录浏览
窗口, 显示当前表中的记录 。 主菜单上增加 【 表 】
菜单项 。
目录
上页
下页
退出
55
③ 选择 【 表 】 |【 删除记录 】 命令, 出现图 3-5所示
的, 删除, 对话框 。
④ 单击删除对话框中的 For… 按钮或 While… 按钮,
系统弹出表达式生成器, 用户可以在表达式框中
输入一个逻辑表达式, 如性别 =” 男,, 单击
【 确定 】 按钮完成条件表达式的输入 。
⑤ 在, 作用范围, 下拉列表框中选择范围, 如 ALL。
⑥ 单击,删除”对话框中的“删除”按钮,系统将
完成对指定范例内满足指定条件的记录的逻辑删
除。
2,隐藏逻辑删除记录
【 格式 】 SET DELETED ON | OFF
【 功能】 将表文件中已逻辑删除的记录隐藏,仿佛
真正删除一样。
目录
上页
下页
退出
56
图 3-5 记录删除对话框
目录
上页
下页
退出
57
【 说明 】 表文件中被逻辑删除的记录只是在该记录上加
一个删除标记, 当 SET DELETED设置为 OFF时, 对
该表文件的各种操作, 对被删除的记录同样有效 。 当
SET DELETED ON时, 可使对表文件中数据的各种
操作, 一般均不包括有删除标记的记录, 但下列情况
例外:命令的记录范围是当前记录或 RECORD(n) 时;
INDEX或 REINDEX命令不受 SET DELETED的影响,
始终处理带删除标记的记录 。
SET DELETED的缺省状态是 OFF。
【 例 4-13】 隐藏上题中 STUD.DBF的标记删除记录 。
USE STUD
SET DELETED ON
3,恢复逻辑删除记录
恢复逻辑删除是将被逻辑删除的记录恢复为正常
记录 。 即去掉, *” 号 。
目录
上页
下页
退出
58
( 1) 命令方式
【 格式 】 RECALL [<范围 >] [FOR <条件 >]
[WHILE <条件 >][NOOPTIMIZE]
【 功能 】 将当前表文件中指定范围内满足条件的
已作删除标记, *” 的记录恢复, 即去掉这些
删除记录的删除标记, 使之成为正常记录 。
【 说明 】 RECALL命令与 DELETE命令相对应, 它
可以去掉被逻辑删除记录的删除标记, *” 。
<范围 >,FOR<条件 >,WHILE<条件 >等各项选项
意义同前;如果同时缺省 <范围 >和 <条件 >子句,
则仅仅恢复当前记录 。
【 例 4-14】 恢复 STUD.DBF中删除的所有记录 。
USE STUD
RECALL ALL
( 2) 菜单方式
① 首先打开表文件
目录
上页
下页
退出
59
② 选择 【 显示 】 |【 浏览 】 命令 。
③ 选择 【 表 】 |【 恢复记录 】 命令, 出现类似图 3-5所示
对话框 。 余下操作与, 删除, 对话框的操作相同 。
4,物理删除记录
物理删除是将当前表文件中被逻辑删除的记录全部清除 。
( 1) 命令方式
【 格式 】 PACK [MEMO][DBF]
【 功能 】 将当前表文件中所有带删除标记 ( *) 的记录全
部真正地删除掉 。
【 说明 】 若选用 MEMO选项, PACK MEMO将压缩与表
文 件 同 名 的 备 注 文 件 中 的 无 用 空 间, 但 并 不 删
除表文件中作了删除标记的记录 。
若选用 DBF选项, 而不用 MEMO选项, 则只删除表文
件中作了删除标记的记录, 而不压缩相应的备注文件 。
目录
上页
下页
退出
60
若不带任何选项, PACK命令将删除数据库文件中
作了删除标记的记录, 同时压缩相应的备注文件 。
注意,执行该命令后被删除的记录将不能被恢复, 因此
使用时应特别小心 。
【 例 4-15】 将 STUD.DBF中的学号为, 021405” 的记录进
行物理删除 。
USE STUD
DELETE FOR 学号 =” 021405”
PACK
( 2) 菜单方式
利用菜单方式物理删除表记录的具体步骤如下:
① 首先打开表文件
② 选择 【 显示 】 |【 浏览 】 命令, 系统弹出记录浏览 窗
口, 显示当前表中的记录 。 主菜单上增加 【 表 】 菜单 。
③ 选择 【 表 】 |【 彻底删除 】 命令, 出现, 确 认, 对话框 。
目录
上页
下页
退出
61
④ 单击, 是, 按钮, 完成物理删除过程 。
注意,用户也可以在 EDIT,CHANGE,BROWSE窗口中,
按 Ctrl+T键对当前记录作(或取消)删除标记,也可
以用鼠标单击记录最左边的删除标记栏作删除(或取
消)标记。
5,删除全部记录
【 格式 】 ZAP
【 功能 】 将当前打开的表文件中的所有记录完全删除掉 。
【 说明 】 执行该命令之后, 将只保留表文件的结构, 而
不再有任 何数据 存在 。 这种 删除无 法恢复, 因
此, 为防 止用户 发生 错误操 作而删 除有用 的表
文件记录, 执行 该命 令时, 系统会 弹出提 示窗
口, 以确认是否删除全部记录, 单击, 是, 按钮
清除所有记录, 单击, 否, 按钮放弃 ZAP操作 。
目录
上页
下页
退出
62
1,表结构的复制
【 格式 】 COPY STRUCTURE TO <文件名 > [FIELDS
<字段名表 >][[WITH] CDX | [WITH] PRODUCTION]
【 功能 】 复制当前表文件的结构作为新表文件的结构 。
【 说明 】 命令执行前, 需复制的表文件必须是打开的 。
执行后, 生成的新表文件只有结构 。
<字段名表 >,确定新表结构的字段名, <字段名表 >中
的字段必须是原表文件中具有的字段名 。 若省略该选
项, 则原样复制当前表文件的结构 。
【 例 4-16】 用复制命令将 STUD.DBF中的学号, 姓名,
性别, 出生日期等四个字段, 构成一个新表结构 。
九、表的复制
目录
上页
下页
退出
63
USE STUD
COPY STRUCTURE TO STUD1 FIELDS 学号,姓名,
性别,出生日期
2,表文件的复制
【 格式 】 COPY TO <文件名 >[FIELDS <字段名表 >][<范
围 >] [FOR <逻辑表达式 1>][WHILE <逻辑表达
式 2>][[WITH]CDX] | [[WITH] PRODUCTION]
【 功能 】 将当前打开的表文件全部或部分复制到一个新
生成的表文件中 。
【 说明 】 新生成表文件中的字段顺序由 FIELDS选择项 <
字段名表 > 确定, 缺 省表 示 新表 的 结构 与 原 表
的结构完全相同, 新表文件中的记录由 <范围 >
选择项以及 < 条件 > 选择 项确定 。 同时缺 省 < 范
围 >, < 条件 > 表示将原 表的全部记录都 复制到
新表中 。 若 <范围 >,<条件 >和 <字段名表 >都缺
省, 则表示将原表进行备份 。
目录
上页
下页
退出
64
<文件名 > 指定新生成的表文件。若当前原表文件中有备
注型字段,则相应的备注文件(,FPT文件)将同时被复
制。新表文件名不能与被复制的原表文件同名,省略盘
符和路径表示在当前盘当前目录下生成新表文件。
【 例 4 - 17】 复制 STUD.DBF 中 所有 女同学 的记 录到
STUD2.DBF中 。
USE STUD
COPY TO STUD2 FOR 性别 =“女”
3,表记录保存为文本文件
【 格式 】 COPY TO <文件名 >[FIELDS <字段名表 >][<范
围 >] [FOR <逻辑表达式 1>][WHILE <逻 辑 表
达式 2 > ] < TYPE SDF | DELIMITED [WITH <
定界符 >|WITH BLANK | WITH TAB]>
【 功能】 将当前表的记录全部或部分保存到一个文本文
件中。
目录
上页
下页
退出
65
【 说明 】 FIELDS<字段名表 >,确定文本文件中的字段
顺序, 缺省表示将表中记录的全部字段值保
存到文本文件中, 。
<范围 >以及 <条件 >选择项:确定哪些记录的字段值保
存到文本文件中 。 同时缺省 <范围 >,<条件 >表示将
原表的全部记录的字段值都保存到文本文件中 。
[TYPE],当用户生成的新文件不是 DBF格式文件时,
可以用 TYPE选项指定新文件的格式, 系统会自动产
生不同格式的新文件, 并为新文件加上相应的扩展
名 。
TYPE文件类型包括下列几种:
● SDF,复制为 SDF( System Data Format) 格式的
ASCII文本文件, 默认扩展名为,TXT。
● DELIMITED [WITH <定界符 > WITH BLANK | WITH
TAB],复制为带分隔符的 ASCII文本文件, 默认扩展
名为,TXT。
目录
上页
下页
退出
66
SDF和 DELIMITED格式的区别:
SDF是将表文件的每一条记录复制到 SDF文本文件中,
在每一行中, 字段与字段间没有分隔符, 每一行以
回车换行结束 。 字段在 SDF文件中的宽度是固定的,
等于源表中该字段的定义宽度 。 在 SDF文件中, 表
文件中的字符型字段和数值型字段原样存贮, 即字
符型左对齐存贮, 不足部分在右边填以空格;数值
型则以右对齐方式存贮, 不足部分在左边填以空格 。
日期型数据以 YYYYMMDD格式存贮 。 逻辑型数据
以 T或 F存贮 。 SDF文本文件不接受备注型字段和
通用型字段 。
DELIMITED文件带定界符格式文本文件, 也是将源
表文件中的每一条记录作为一行存贮, 每行以回车
换行结尾 。 但记录的各字段间以分隔符隔开, 各字
段的宽度为字段值的实际宽度 。
目录
上页
下页
退出
67
字段间的分隔符默认为,,, 号, 字符型字段的定界
符为双引号 。 用户可以用 WITH <定界符 >WITH BLANK
| WITH TAB指定分隔符, WITH <定界符 >表示用指定的
<定界符 >为字符型字段的定界符; WITH BLANK |
WITH TAB则指定空格或 Tab键作为字段间的分隔符 。 若
使用 WITH BLANK,则字符型字段不再有定界符 。
注意:该命令和表文件的复制命令实际上是同一个命令,
是复制为表文件还是文本文件, 看是否带 TYPE子句 。
【 例 4 - 18】 复制 STUD.DBF 中 的 记 录 内 容 复 制 到
SSTUD.TXT(SDF格式 ),DSTUD.TXT(DELIMITED格式 )
和 ESTUD.TXT(以空格为分隔符的 DELIMITED格式 )中 。
USE STUD
COPY TO SSTUD SDF
COPY TO DSTUD DELIMITED
COPY TO ESTUD DELIMITED WITH BLANK
目录
上页
下页
退出
68
十, 表记录的追加
维护数据库的一项经常性的操作就是根据需要随时
向表文件中添加记录, 添加记录包括追加记录, 插入记
录和利用其他文件追加 。 追加记录在前面已经介绍, 在
这里就介绍后面两种方法 。
1,从另一个表文件中追加记录
【 格式 】 APPEND FROM<文件名 |?>[FIELDS<字段名表
>][FOR<逻辑表达式 >]
【 功能 】 从指定的表文件中读入数据, 并添加到当前表
文件的末尾 。
【 说明 】 数据的追加是从命令中指定的表文件追加到当
前表文件中, 所以, 应 先 将 需 要 追 加 记 录 的 表
文件打开, 设 置 为 当 前 表, 然 后 再 使 用 该 命 令
进行追加 。
目录
上页
下页
退出
69
追加原则是同名原则, 即将数据来源表中的
字段与当前表的字段进行比较, 同名则将符合条
件的记录的值追加过来 。 若数据来源表中缺少某
些字段, 则当前表中该字段值为空 。
追加数据记录时, 若两个表文件同名字段的宽
度不相同, 一般情况下, 若当前表的字段宽度大
于数据来源表的字段宽度, 记录能正常追加, 对
字符型数据后面加空格, 对数值型数据前面加
,0”, 但若当前表的字段宽度小于数据来源表
的字段宽度, 记录不能正常追加, 数据失去原来
的意义 。 对字符型数据截去后面多余字符, 对数
值型数据进行小数部分的四舍五入, 仍不够根据
当前表的宽度用, *” 号填充, 表示溢出 。
目录
上页
下页
退出
70
2,从另一个文本文件中追加记录
( 1) 命令方式
【 格式 】 APPEND FROM <文件名 |?> [FIELDS <字
段 名 表 > ] [ FOR < 逻 辑 表 达 式 >] [[TYPE]
SDF|[DELIMITED [WITH TAB | WITH < 定
界符 > | WITH BLANK]]
【 功能 】 从指定类型的文本文件中读入数据, 并添加
到当前表文件的末尾 。
【 说明 】 <文件名 >是指获取数据的文本文件名 。 文本
文 件 中 的 每 一 行, 追 加 为 一 条 记 录 。 可以在
文 本 文 件 中 输 入 文 本, 但 要 保 证 文 本 格 式 相
同, 再利用此命令追加为记录 。
注意,数据文件若由 COPY TO 命令生成的且定义了文
本文件的分隔符, 则追加记录时也应用相同的分隔符 。
因为系统以每个分隔符作为字段值的分隔符 。 这样才
能保证数据能正确还原 。
目录
上页
下页
退出
71
( 2) 菜单方式
① 打开表文件 。
② 选择 【 显示 】 |【 浏览 】 命令 。
③ 选择 【 表 】 |【 追加记录 】 命令, 弹出图 3-6所示的
,追加来源, 对话框 。
④ 单击类型下拉按钮选择用来追加记录的数据文件的
类型, 在, 来源于, 显示栏中输入数据来源文件的路
径和文件名, 再选择, 选项, 显示框中的字段, 条件 。
确定后返回追加来源窗口 。
⑤ 单击, 确定, 按钮, 系统将满足条件的记录完成追
加操作 。
3,插入记录
【 格式 】 INSERT [BEFORE] [BLANK]
【 功能 】 在当前表文件的指定位置插入新记录或空记录 。
目录
上页
下页
退出
72
图 3-6 追加来源对话框
目录
上页
下页
退出
73
【 说明 】 INSERT是在当前记录之后插入新记录,
INSERT BEFORE是在当前记录之前插入新记录,
INSERT BLANK是在当前记录之后插入空记录 。
若表文件建立了索引, 则插入的新记录按索引值
进行排列 。
【 例 4-19】 在表 STUD.DBF的第 2号记录前插入一条
新记录, 在第 4号记录后插入一条新记录 。
USE STUD
GOTO 2
INSERT BEFORE
&& 在 2号记录前插入一条新记录
GOTO 5
&& 因已插入了一条新记录, 原 4号现为 5号
INSERT
&& 在 4号记录后插入一条新记录
目录
上页
下页
退出
74
十一, 文件管理命令
Visual FoxPro除了表文件之外, 还有其他多种类型的文
件, 系统对各类文件提供了通用的管理手段, 其功能类似于
DOS的文件管理命令, 但必须注意它们之间的区别 。
1,显示文件目录
【 格式 】 DIR | DIRECTORY [ON <盘符 >][[LIKE] [<路径 >] [<
通配符 >]][TO PRINTER [PROMPT] | TO FILE <文件名 >]
或 LIST | DISPLAY FILES [ON <盘符 >] [LIKE <通配符 >]
[TO PRINTER [PROMPT] | TO FILE <文件名 >]
【 功能 】 显示磁盘文件目录信息 。
【说明】 该命令类似于 DOS操作系统的 DIR命令。
ON<盘符 >:指定所显示文件目录所在的驱动器符号, 缺省此
项为当前盘 。
[LIKE] [<路径 >] [<通配符 >],<路径 >指定显示文件所在路径;
目录
上页
下页
退出
75
2,文件改名
【 格式 】 RENAME <文件名 1> TO <文件名 2>
【 功能 】 将 <文件名 1>改为 <文件名 2>。
【 说明 】 该命令类似于 DOS操作系统的 REN命令 。
改名之前文件必须关闭, 正在使用的文件不能改名 。
如果有备注文件, 对表文件改名时, 不要忘记为相
应的,FPT文件改名, 否则打不开改名后的表 。
【 例 4-20】 将 STUD.DBF改为 GL.DBF。
USE
RENAME STUD.DBF TO GL.DBF
RENAME STUD.FPT TO GL.FPT
目录
上页
下页
退出
76
3,文件删除
【 格式 】 ERASE [<文件名 > |?]
或 DELETE FILE [<文件名 > |?]
【 功能 】 从磁盘上删除指定的文件 。
【 说明 】 此命令类似于 DOS操作系统的 DEL命令 。
如果选择参数?或缺省文件名选项, 系统将弹出 Open
对话框, 供用户选择所需删除的文件 。
为防止误操作, 该命令不默认扩展名, 所以 <文件名 >
必须用全称, <文件名 >不能使用通配符, 如果 <文件
名 >不在目录下, 则需指定路径 。 同时, 此命令也不
能删除已打开的文件 。
【 例 4-21】 删除当前目录下的,BAK文件 。
ERASE ABC.BAK
ERASE STUD.BAK
DELETE FILE XSCJ.BAK
DIR *.BAK
目录
上页
下页
退出
77
4,文件复制
【 格式 】 COPY FILE <文件名 1> TO <文件名 2>
【 功能 】 对各类文件进行复制
【 说明 】 此命令类似于 DOS操作系统的 COPY命令 。
<文件名 1>和 <文件名 2>必须给出全名, 不能使用通配
符;不能复制已打开的文件;当复制含有备注型字段或
已建立索引的表文件时, 必须复制相应的备注文件和索
引文件 。
【 例 4-22】 将 STUD.DBF改名为 STUDBAK.DBF复制到 A:
盘上 。
COPY FILE STUD.DBF TO A,STUDBAK.DBF
COPY FILE STUD.FPT TO A,STUDBAK.FPT
&& 复制,FPT备注文件
目录
上页
下页
退出
78
5.显示文本文件
【 格式 】 TYPE <文件名 1> [AUTO] [WRAP] [TO PRINTER
[PROMPT] | TO FILE <文件名 2>][NUMBER]
【 功能 】 显示或同时打印文本文件
【 说明 】 此命令类似于 DOS操作系统的 TYPE命令 。
文本文件是指非结构式文件, 即没有任何内部控制符的
ASCII码文件 。 例如命令文件,PRG,屏幕格式文件,FMT和文
本文件,TXT。
<文件名 1>和 <文件名 2>:必须带扩展名, 不能使用通配符,
且不能是打开的文件 。
6,调用外部命令
如果觉得 Visual FoxPro的文件管理命令不方便, 可以调用
DOS的有关命令 。
【 格式 】 RUN | ! [/N [K]] <MS-DOS 命令 | 程序名 >
【 功能 】 执行 MSDOS的系统命令 。
【说明】 此命令直接完成外部程序的功能。使用本命令必须有
足够的内存空间,否则会产生“内存不足”的错误。
目录
上页
下页
退出
79
为了高效方便地存取数据, 往往要求表记录以
某一定的顺序排放或显示, 因此, Visual FoxPro提
供了两种方法重新组织数据, 即排序和索引 。
排序是从物理上对表进行重新整理, 按照指定
的关键字段来重新排列表中数据记录的顺序, 并产
生一个新的表文件 。 由于新表的产生即费时间也浪
费空间, 实际中很少用 。
索引是从逻辑上对表进行重新整理,按照指定
的关键字段的建立索引文件。一个表文件可以建立
多个索引文件,但对于打开的表文件,任何时侯只
有一个索引文件起作用,此索引文件称为主控索引。
第三节 表的排序与索引
目录
上页
下页
退出
80
一, 表的排序
【 格式 】 SORT TO <新文件名 > ON <字段 1> [/A | /D] [/C]
[,<字段 2>[/A | /D] [/C]...]
[ASCENDING | DESCENDING] [<范围 >]
[FOR<逻辑表达式 1>][WHILE <逻辑表达式 2>]
[FIELDS <字段名表 >]
【 功能 】 对当前打开的表, 按指定的字段进行排序, 生成
新的表文件 。
【说明】 生成的排序文件也是一个数据库文件。
范围、条件的含义同 COPY TO命令。
用作排序的字段的数据类型允许是 N,C,D,L
型。 /A 表示升序 /D 表示降序 /C 表示不区
分大小写。
目录
上页
下页
退出
81
当有多个关键字段时,先按字段 1的值排列,其
值相同的,再按字段 2的值排列。
原库中的记录发生变化,排序文件不能自动完成
同步修改。 该命令执行后,当前表不变,产生的新表
不会自动打开。
该排序方法占空间、废时间,很少用。
【 例 4-23】 将 STUD.DBF按性别进行降序排列
USE STUD
SORT TO STUD2 ON 性别 /D
目录
上页
下页
退出
82
二, 索引的基本概念
1,索引及索引文件的概述
索引是以索引文件的形式存在的, 它根据指定的索
引关键字表达式建立的 。 索引文件可以看成索引关键字
的值与记录号之间的对照表, 关键字可以是一个字段,
也可以是几个字段的组合 。 在建立索引文件时, 把表所
有记录的索引关键字表达式的值按指定顺序排序, 并把
每个索引关键字表达式值与该值在表中所对应的记录对
应起来, 保存在索引文件中 。
索引文件必须与原表一起使用, 查询时根据索引关
键字表达式的值先在索引文件中找到某字段所在的记录
号, 然后再到表里直接定位 。 这样的查找方式使顺序查
找和随机查找都有较高的效率 。 打开索引文件时, 将改
变表中记录的逻辑顺序, 但并不改变表中记录的物理顺
序 。
目录
上页
下页
退出
83
一个表文件可建立多个索引文件, 也可同时打开
多个索引文件, 但在同一时间内只有一个索引起作用,
这个索引称为主控索引 。
Visual FoxPro系统中支持两种不同的索引文件
类型, 即单索引文件和复合索引文件 。
单索引文件是根据一个索引关键字表达式 ( 或关键
字 ) 建立的索引文件, 文件扩展名为,IDX,它可用
INDEX命令的各种形式建立 。 单索引文件分为标准和
压缩两种类型 。
复合索引文件是指索引文件中可以包含多个索引
标识的扩展名为,CDX。 每个索引标识与单索引文件类
似, 也可以根据一个索引关键字表达式 ( 或关健字 )
建立 。 每一个索引标识均有一个特殊的标识名
( TAG) 。 标识名由字母或下划线开头, 由字母, 数
字或下划线组成, 长度不超过 10个字符 。 用户可以利
用标识名来使用标识, 向复合索引文件中追加标识 。
复合文件中标识的数目, 仅受内存和磁盘空间的限制 。
目录
上页
下页
退出
84
复合索引文件又有两种:一种是独立复合索引文件;
另一种是结构复合索引文件。
结构复合索引文件是由 Visual FoxPro自动命名的, 与
相应的表文件同名, 扩展名为,CDX。 当 Visual FoxPro打
开一个表时, 便自动查找一个结构复合索引文件, 如果
找到便自动打开, 该索引文件随表文件同时打开和同时
关闭 。
独立复合索引文件不与表文件同名, 扩展名为,CDX。
在打开表时不会自动打开此索引文件, 由命令指定打开 。
索引可分为下列四种类型:
2.主索引
主索引是一个永远不允许在指定字段和表达式中出现
重复值的索引 。 它也是在数据库表的永久关联中创建参
照完整性时主表和被引用表使用的索引 。 每一个表只能
建立一个主索引, 只有数据库表才能建立主索引 。
目录
上页
下页
退出
85
3,侯选索引
侯选索引也是一个不允许在指定字段和表达式中
出现重复值的索引 。 数据库表和自由表都可以建立侯
选索引, 一个表可以建立多个侯选索引 。
主索引和侯选索引都存储在,CDX结构复合索引文
件中, 不能存储在独立复合索引文件和单索引文件中,
因为主索引和侯选索引都必须与表文件同时打开和同
时关闭 。
4,唯一索引
系统只在索引文件中保留第一次出现的索引关键
字值 。 数据库表和自由表都可以建立唯一索引
5,普通索引
是一个最简单的索引, 允许关键字值的重复出现,
适合用来进行表中记录的排序和查询, 也适合于一对
多永久关联中, 多, 的一边 ( 子表 ) 的索引 。 数据库
表和自由表都可以建立普通索引 。
目录
上页
下页
退出
86
三, 索引文件的建立
1,命令方式
【 格式 】 INDEX ON <索引关键字表达式 >TO<单索引文件 >|
TAG <标识名 >
[OF <独立复合索引文件名 >] [FOR <逻辑表达式 >]
[ COMPACT][ASCENDING | DESCENDING][UNIQUE]
[ADDITIVE]
【 功能 】 对当前表文件按指定的关键字建立索引文件 。
【 说明 】 <索引关键字表达式 >:指定建立索引文件的关
键字表达式, 可以是单一字段名, 也可以是多个
字段组成的字符型表达式, 表达式中各字段的类
型只能是数值型, 字符型和日期型和逻辑型 。
当表达式是单个字段名时, 字段类型不用转换;应转
换成同一类型的表达式 。
目录
上页
下页
退出
87
TAG <标识名 >:此选项只对建立复合索引文件时有效,
指定建立或追加索引标识的标识名 。
OF <独立复合索引文件 >:指定独立复合索引文件名 。
若有此选项, 表示在指定的独立复合索引文件中追加
一个索引标识, 若指定的独立复合索引文件不存在,
系统将自动建立指定的文件 。 若没有此选项, 表示在
结构复合文件中追加一个索引标识, 若结构复合索引
文件不存在, 系统将自动建立结构复合索引文件 。
FOR <逻辑表达式 >:表示只对满足条件的记录建立索
引 。
COMPACT,此选项只对单索引文件有效, 表示建立压
缩索引文件 。
ASCENDING|DESCENDING,ASCENDING表示按升
序建立索引, DESCENDING表示按降序建立索引 。
缺省时, 按升序建立索引 。 单索引文件不能选用
DESCENDING选项 。
目录
上页
下页
退出
88
UNIQUE,表示建立的是唯一索引 。
ADDITIVE,表示保留以前打开的索引文件 。 否则, 除结
构复合索引文件外, 以前打开的其他索引文件都将被
关闭 。
新建的索引文件自动打开, 并开始起作用 。
【 例 4-24】 对 STUD.DBF表文件建立出生日期单索引文
件 STUD.IDX。
USE STUD
INDEX ON 出生日期 TO STUD
【 例 4-25】 对表文件 STUD.DBF,建立一个基于出生日期
字段的结构复合索引文件 。
USE STUD
INDEX ON 出生日期 TAG 出生日期 DESCENDING
目录
上页
下页
退出
89
【 例 4-26】 在表文件 STUD.DBF的结构复合索引文
件中, 按学号和姓名各追加一个标识 。
USE STUD
INDEX ON 学号 TAG 学号
【 例 4-27】 在表文件 STUD.DBF的结构复合索引文
件中, 先按性别再按学号追加一个标识 。
USE STUD
INDEX ON 性别 +学号 TAG 性别学号
【 例 4-28】 在表文件 STUD.DBF中, 先按性别再按
是 否 团 员 建 立 一 个 独 立 复 合 索 引 文 件
SXBTY.CDX。
USE STUD
INDEX ON 性别 +IIF(是否团员,’ 团员 ’,’
非团员 ’ ) TAG 性别团员 OF SXBTY
目录
上页
下页
退出
90
2,菜单方式
① 打开表文件 。
② 选择 【 显示 】 |【 表设计器 】 命令, 打开表设计器对
话框, 选择, 索引, 标签, 如图 3-7所示 。
③ 在索引名中输入索引标识名, 在类型的下拉列表框
中确定一种索引类型, 在表达式中输入索引关键字
表达式, 在筛选中输入确定参加索引的记录条件,
在排序序列下默认的是升序按钮, 单击可改变为降
序按钮 。
④ 确定好各项后, 选择, 确定,, 关闭表设计器, 同
时索引建立完成 。
⑤ 同样的方法也可以将以前建立的索引调出, 利用表
设计器上的, 插入, 或, 删除, 按钮进行插入或删
除 。
注意:用表设计器建立的索引都是结构复合索引文件 。
目录
上页
下页
退出
91
图 3-7 在表设计器中建立索引
目录
上页
下页
退出
92
四, 索引的使用
1,索引文件的打开
【 格式 1】 USE <文件名 > [INDEX <索引文件名表 |?
> ] [ ORDER <数值表达式 2 > | <单索引文件 >
| [ TAG] < 标 识 名 > [ OF < 复 合 索 引 文 件 名
>][ASCENDING | DESCENDING]]
【 功能 】 打开指定的表文件及相关的索引文件
【 说明 】 INDEX <索引文件名表 > |?:表示打开的索
引文件;如果选择,?”, 则系统将出现, 打开, 对
话框, 供用户选择索引文件名;如果 <索引文件
名表 >中的第一个索引文件是单索引文件, 则它
是主索引文件, 若第一个索引文件是复合索引文
件, 则表文件的记录将以物理顺序被访问 。
<索引文件名表 >:指定要打开的索引文件,索引文
件中的文件扩展名可以省略,但如果存在同名的单索
引文件和复合索引文件,必须带扩展名。
目录
上页
下页
退出
93
<索引文件名表 >中的单索引文件和复合索引文件的标
识有一个唯一的编号, 编号最小值为 1,编号规则为:
先将单索引文件按它们在 <索引文件名表 >中的顺序编
号, 再将结构复合索引文件按标识产生的顺序连续编号,
最后将独立复合索引文件中的标识先按它在 <索引文件
名表 >中的顺序, 再按标识产生的顺序连续编号 。
[ORDER]子句:指定主索引 。 选择此选项时, 主索引
文件将不是 <索引文件名表 >中的第一个单索引文件,
而是此选项指定的单索引文件或标识 。 [ORDER]子句
中各选项的含义如下:
● <数值表达式 2>指定主索引的编号, 若 <数值表达式 2>
的值为 0,表示不设主索引 。
● <单索引文件 >指定的单索引文件设置为主索引 。
● [TAG] <标识名 > [OF <复合索引文件名 >]:表示将 <复
合索引文件名 >中的指定标识作为主索引。 [OF <复合
索引文件名 >]缺省表示为结构复合索引文件。
目录
上页
下页
退出
94
● ASCENDING | DESCENDING,表示主索引被强制以
升序或降序索引;缺省此选项, 主索引按原有顺序打开 。
【 格式 2】 SET INDEX TO [<索引文件名表 > ] [ORDER
<数值表达式 > | <单索引文件名 > | [ TAG] <标
识名 > [ OF < 复合 索引 文件 名 >] [ ASCENDING
| DESCENDING]][ADDITIVE]
【 功能 】 在已打开表文件的前提下, 打开相关索引文件 。
【说明】 ADDITIVE,表示保留以前打开的索引文件。
否则,除结构复合索引文件外,以前打开的其
他索引文件都将被关闭。
2,索引文件的关闭
【 格式 1】 USE
【 功能 】 关闭当前工作区中打开的表文件及所有索引文
件 。
目录
上页
下页
退出
95
【 格式 2】 SET INDEX TO
【 功能 】 关闭当前工作区中打开的所有单索引文件和
独立复合索引文件 。
【 格式 3】 CLOSE INDEXS
【 功能 】 关闭当前工作区中打开的所有单索引文件和
独立复合索引文件 。
注意:结构复合索引文件不能用以上命令关闭, 它
随表文件的打开而打开, 随表文件的关闭而关闭 。
3,改变主索引
【 格式 】 SET ORDER TO [<数值表达式 1> | <单索引
文件名 > | [TAG] <标识名 > [OF <复合索引
文件名 >] [IN <数值表达式 2> | <字符表达式
>][ASCENDING | DESCENDING]]
【 功能 】 重新指定打开的索引文件中的主索引 。
【 说明 】 <数值表达式 1>的值为指定主索引的编号 。
目录
上页
下页
退出
96
如果 <数值表达式 1>的值为 0或缺省, 则恢复表文
件的原始顺序, 使所有打开的索引文件都无效 。
【 例 4-29】 打开 STUD.DBF表文件及其相关索引文件,
并指定结构复合索引文件中的姓名为主控索引 。
USE STUD INDE STUD.IDX ORDER TAG 姓名
【 例 4-30】 打开 STUD.DBF表及其相关索引文件, 改变
主索引文件 。
USE STUD INDEX STUD.IDX
SET ORDER TO 4
SET ORDER TO && 使所有索引均无效
4,索引文件的更新
当表中的记录被修改时, 系统会自动地更新所打开
的索引文件, 及时反映数据的变化 。 对于没有打开的
索引文件, 索引不能自动更新 。 为避免使用旧的索引
文件导致错误, 应该使用重新索引命令更新已经建立
的索引文件 。
目录
上页
下页
退出
97
( 1) 命令方式
【 格式 】 REINDEX [COMPACT]
【 功能 】 重新建立已索引过的索引文件 。
【 说明 】 COMPACT,表示将标准的单索引文件变为
压缩的单索引文件 。
【 例 4-31】 将表 STUD.DBF的索引文件重新索引 。
USE STUD
SET INDEX TO STUD.IDX
REINDEX
( 2) 菜单方式
① 打开表文件 。
② 选择 【显示】 |【 浏览 】命令 。
③ 选择【表】 |【重新建立索引】命令,系统自动根
据各索引表达式重新建立索引。
目录
上页
下页
退出
98
5,索引的删除
( 1) 标识的删除
【 格式 】 DELETE TAG <标识名 1> [OF <复合索引
文件名 1 > ] [,<标识名 2 > [ OF <复合索引文
件名 2>]],..
或,DELETE TAG ALL [OF <复合索引文件名 >]
【 功能 】 从指定的复合文件中删除标识
【 说明 】 OF <复合索引文件名 >:指定复合索引文件
名, 若缺省, 则为结构复合索引文件 。
( 2) 单索引文件的删除
【 格式 】 DELETE FILE <单索引文件名 >
【 功能 】 删除指定的单索引文件
【说明】 关闭的索引文件才能被删除,文件名必须
带 扩展名。
目录
上页
下页
退出
99
【 例 4-32】 删除表文件 STUD.DBF的单索引文件 STUD.IDX
及结构复合索引文件中的所有标识 。
DELETE FILE STUD.IDX
USE STUD
DELETE TAG ALL
6,索引文件的转换
( 1) 单索引文件复制到复合索引文件
【 格式 】 COPY INDEXES <单索引文件名表 > | ALL [TO
<复合索引文件名 >]
【 功能 】 将当前表文件已打开的所有单索引文件或 <单索
引 文 件 名表 > 中所 列 的单 索 引文 件, 复制 到 指 定
的复合索引文件中 。
【 说明 】 TO <复合索引文件名 >:指定复合索引文件名,
缺省为结构复合索引文件 。
ALL,表示将所有的单索引文件复制到指定的复合索
引文件中复制前必须打开指定的单索引文件 。
目录
上页
下页
退出
100
在数据资源的管理过程中, 使用最频
繁的操作莫过于查询满足一定条件的一系
列数据, 从而为日常决策提供足够的判断
依据 。 对表记录的查询系统提供了两类查
询命令:顺序查询和索引查询 。
在前面介绍定位时,省略了条件定位,
查询操作实际上就是起到了条件定位的作
用。
五、查询
目录
上页
下页
退出
101
1,顺序查询
1),命令方式
【 格式 】 LOCATE FOR< 逻辑表达式 1 > [ < 范围
>][WHILE <逻辑表达 2>]
【 功能 】 在表指定范围中查找满足条件的记录 。
【 说明 】 LOCATE 命令在表指定范围中查找满足条件
的第一条记录 。
<逻辑表达式 1>:表示所需满足的条件 。
<范围 >:指定查找范围,缺省时为 ALL,即在整个表
文件中查找。
找到第一条满足条件的记录后,记录指针指向该
记录,并将函数 FOUND()( 用于检测是否找到满足条
件的记录)置为,T.; 否则,记录指针指向 <范围 >的底
部或文件结束标志,并且将函数 FOUND()置为,F.,并
在状态栏给出提示信息“已到定位范围末尾”。
目录
上页
下页
退出
102
如果没有打开索引文件, 查找按记录号顺序进
行 。 若打开了索引, 查找按索引顺序进行 。
该命令的最大特点是可以在没有进行排序或索引
的无序表中进行任意条件的查询, 这是索引查询做
不到的, 但在大型表中查询速度和效率也是最低的 。
CONTINUE命令,LOCATE找到第一条满足条件的
记录后, 可以用 CONTINUE继续查找下一个满足条
件的记录 。
CONTINUE命令必须在 LOCATE命令之后使用, 否
则出错 。
在 CONTINUE命令中实际隐含了前一个 LOCATE命
令中的条件 。
【 例 4-33】 在 STUD.DBF中查找学号前四位为 0111的
同学记录 。
目录
上页
下页
退出
103
USE STUD
LOCATE FOR 学号 ="0111"
2),菜单方式
① 首先打开表文件
② 选择 【 显示 】 |【 浏览 】 命令 。
③ 选择 【 表 】 |【 转到记录 】 |【 定位 】 命令, 出现
如图 3-19所示的定位记录对话框 。
④ 在, 作用范围, 下拉列表框中选择查询范围,
在 FOR或 WHILE框中输入查询条件, 选择定位
按钮 。 系统将指针定位于符合条件的第一条记录
上 。
2,索引查询 ( FIND,SEEK)
LOCATE命令用于按条件进行顺序定位,无
论索引文件是否打开都可使用。在打开索引文件
后,还可以用 FIND,SEEK命令进行快速检索。
目录
上页
下页
退出
104
1),FIND命令
【 格式 】 FIND <字符串 >/<数值常量 >
【 功能 】 在表文件的主控索引中查找关键字值与 <字符串 >
或 <数值常量 >相匹配的第一个记录 。
【 说明 】 必须打开相应的库文件, 主索引文件 。
查询字符串,字符串可以不用定界符括起来,但 前后
有空格的,则必须要括进来。
查询常数,必须使用索引关键字的完整值。
允许查询字符型内存变量,但必须使用宏替换函数。
由于索引文件中关键字表达式值相同的记录总是排
在一起的,可用 SKIP,DISP命令来逐个查询。
查询完满足条件的记录后,不能自然给出提示,常
借助于 EOF() 函数来判断查询是否完成。
多关键字查询,建立索引时 STR函数若没有指定小
数位,则应补齐不足 10位的空格。
目录
上页
下页
退出
105
如果用 SET EXACT ON命令, 则匹配必须是精确
的 。 即 FIND命令中的查询内容必须与记录的关键字
段值完全相等 。 如果用 SET EXACT OFF命令, 则匹
配可以是不精确的, 即只要 FIND命令中的查询内容
与记录的关键字段值的左侧相等即可 。
【 例 4-34】 打开表文件 STUD.DBF,查找姓, 赵, 的记
录 。
USE STUD
SET ORDER TO 姓名
FIND 赵
2),SEEK命令
【 格式 】 SEEK <表达式 >
【 功能 】 在表文件的主索引中查找关键字值与 <表达
式 >值相匹配的第一个记录 。
【 说明 】 SEEK命令可以查找字符型, 数值型, 日期
型, 逻辑型表达式的值 。
目录
上页
下页
退出
106
SEEK命令中的表达式的类型必须与索引表达式的
类型相同。可以查找字符、数值、日期和逻辑型字段
的值。
内存变量可以直接进行查询,不用进行宏替换。
表达式为字符串时,必须用定界符括起来。日期常量
也必须用大括号括起来。
表达式可以为一复杂的表达式,计算机先计算表达
式的值,然后用其值进行查询。
由于索引文件中关键字表达式值相同的记录总是排
在一起的,可用 SKIP,DISP命令来逐个查询。
如果用 SET EXACT ON命令,则匹配必须是精确的。
【 例 4-35】 用 SEEK命令在 STUD.DBF中查找记录 。
USE STUD
INDEX ON 是否团员 TAG 是否团员
SET ORDER TO 姓名
SEEK "孙 "
目录
上页
下页
退出
107
1,统计记录数
【 格式 】 COUNT [<范围 >] [ FOR <逻辑表达式 1>]
[WHILE <逻辑表达式 2>] [TO <内存变量 >]
【 功能 】 用于统计当前表中指定范围内满足条件的记录个
数 。
【 说明 】 除非指定了 <范围 >或 FOR/WHILE <条件 >,否
则将计算所有记录个数, 如选择了 TO <内存变
量 >,则可将计算结果保存在 <内存变量 >中, 否
则统计结果只在屏幕上显示 。
若选择了 SET TALK OFF将不显示统计结果 。
若选择了 SET DELETE OFF,则加删除标志的记录将被计算 。
【 例 4-36】 统计 STUD.DBF中的男同学记录个数和表记
录 总数 。
六、数据统计与计算
目录
上页
下页
退出
108
USE STUD
COUNT FOR 性别 ="男 " TO A
COUNT TO B
2.求和
【 格式 】 SUM [<表达式表 >] [<范围 >] [FOR <条件
>] [WHILE <条件 >] [TO <内 存 变 量 表 >
| TO ARRAY <数组 >] [NOOPTIMIZE]
【 功能 】 对指定范围内, 满足条件的记录按指定的各
个表达式分别求和 。
【 说明 】 缺省范围, 条件表示全部记录 。
缺省数值型表达式表,表示对库中所有数值型
字段求和。
数值型表达式表中表达式的个数应与内存变量
的个数一致。
目录
上页
下页
退出
109
【 例 4-37】 有一表文件 GZGL.DBF内容如下,
记录号 姓名 性别 车间 基本工资 岗位工资 奖金 工资总额
1 张小红 女 金工一 645 340 120 1105
2 李建军 男 金工一 690 370 130 1190
3 孙爱国 男 金工一 580 340 120 1040
4 吴晓英 女 金工一 540 360 110 1010
5 张 斌 男 金工二 670 400 140 1210
6 赵 娜 女 金工二 570 330 110 1010
7 赵明明 男 金工二 560 300 100 960
8 李 菲 女 机修 650 350 150 1150
9 苏汉胜 男 机修 600 340 100 1040
10 罗 丹 女 工具 600 350 130 1080
11 李会明 男 工具 670 350 120 1140
目录
上页
下页
退出
110
对 GZGL.DBF中的基本工资, 岗位工资, 奖金和工
资总额求和, 并将结果存贮成数组 A中 。
USE GZGL
SUM TO ARRAY A
3,求平均值
【 格式 】 AVERAGE [<表达式表 >] [<范围 >] [FOR <
逻辑表达式 1>][WHILE <逻辑表达式 2>] [TO <内
存变量表 >| TO ARRAY <数组 >][NOOPTIMIZE]
【 功能 】 对当前表文件中指定范围内满足条件的记录,
按指定的数值型字段计算平均值 。
【说明】 缺省范围、条件表示全部记录。
缺省数值型表达式表,表示对当前库中所有数
值型字段求平均值。
数值型表达式表中表达式的个数应与内存变量
的个数一致。
目录
上页
下页
退出
111
【 例 4-38】 分别计算 GZGL.DBF中的男女各项收入的
平均值 。
USE GZGL
AVER FOR 性别 =” 男, TO ARRAY B
AVER FOR 性别 =”女” TO ARRAY C
4.综合计算
【 格式 】 CALCULATE<表达式表 >[<范围 >][FOR<逻
辑表达式 1>][WHILE<逻辑表达式 2>][TO<
内存变量表 >|TO ARRAY<数组 >]
【 功能 】 对当前表文件中指定范围内满足条件的记录
进行指定的计算工作 。
【说明】 <表达式表 >可以是表 3-4中函数的任意组合。
【例 4-39】 计算 GZGL.DBF中的人数、奖金收入的平
均值和最大值、工资总额的最大值、平均值。
目录
上页
下页
退出
112
USE STUD
CALC CNT(),AVG(奖金 ),MAX(奖金 ),AVG(工资总 ;
额 ),MAX(工资总额 ) TO X1,X2,X3,X4,X5
5.分类汇总
【 格式 】 TOTAL TO <汇总文件名 > ON <关键字段 >
[FIELDS <字段名表 >] [<范围 >] [FOR <逻达 式
1>] [WHILE <逻辑表达式 2>] [NOOPTIMIZE]
【 功能 】 按关键字段对当前表文件的数值型字段进行分
类汇总, 形成一个新的表文件 。
【 说明 】 当前表必须在关键字上排序或索引, 否则仅将
关键字段值相同的紧挨的记录值汇总 。
汇总命令执行后,将生成一个新的数据库文件
(并没有被打开 )。
对非数值型字段,则把关键字相同的连续记录
的第一条记录的字段内容送入新库。
目录
上页
下页
退出
113
缺省待汇总字段名表,则将所有数值型字段的值进
行汇总。 若数值型字段的汇总值超过了原数据库该字段
的宽度,系统会自动修改汇总库中该字段的宽度。
汇总文件的结构与当前表的结构完全相同,汇总记
录个数由 <关键字段 >的值确定 。
【例 4-40】对 GZGL.DBF按“车间”分类汇总。
USE GZGL
INDEX ON 车间 TAG 车间
TOTAL ON 车间 TO GZCJ
TOTAL TO GZCJ ON 车间
USE GZCJ
对 GZGL.DBF按, 性别, 分类汇总 。
USE GZGL
INDEX ON 性别 TAG 性别
TOTAL TO GZXB ON 性别
USE GZXB
目录
上页
下页
退出
114
第四节 数据完整性
数据完整性是为了保证数据库中数据的
正确性和相容性,对数据库提出的某种约束
条件或规则。数据完整性通常包括实体完整
性、参照完整性和域完整性等。其中实体完
整性和参照完整性是关系模型必须满足的完
整性约束条件。
目录
上页
下页
退出
115
一、实体完整性与主关键字
实体完整性是保证表中记录唯一的特性 。
即在一个表中不允许出现重复的记录 。 在 VFP
中利用主关键字或候选关键字来保证表中的
记录唯一 。 即保证实体唯一性 。
主关键字中的属性不能取空值,否则表
明表中存在不可标识的实体。如果主关键字
是多个属性的组合,则所有主属性都不能取
空值。
目录
上页
下页
退出
116
二、域完整性与约束规则
域完整性又称用户定义完整性规则,是根据应
用环境的要求和实际的需要,对某一具体应用所涉
及的数据提出约束条件。
建立字段有效性规则比较简单的方法仍然是在
表设计器中建立, 如图 4-8所示 。
在字段有效性区域的规则栏输入一个逻辑表达
式,如性别字段输入:性别 =,男, OR 性别 =,女, 。
对该字段输入数据时,VFP将根据表达式对其进行检
验,如不符合规则,则要修改数据,直到符合规则
才允许光标离开该字段。信息栏中指定输入有误时
的提示信息,如, 性别只能是男或者女,,默认值
栏用于指定当前字段的默认值。在增加新记录时,
默认值会在新记录中显示出来,当该字段为默认值
时不用输入,以提高输入速度。
目录
上页
下页
退出
117
图 4-8 表设计器中设计字段有效性
目录
上页
下页
退出
118
三、参照完整性与表之间的联系
参照完整性是定义建立表之间联系的主关键字与
外部关键字引用的约束条件。具体说,当插入、删除
或修改一个表中的数据时,通过参照引用相互关联的
另一个表中的数据,来检查对表的数据操作是否正确。
1.建立表之间的永久联系
为了设置表的参照完整性, 必须先在表之间建立
永久联系, 表之间的永久联系是基于索引建立的一种
永久关系, 这种联系被作为数据库的一部分而保存在
数据库中 。 可以在数据库设计器中建立表之间的永久
联系, 具体操作方法是:
在数据库设计器对话框,用鼠标左键选中父表中
的主索引字段,保持按住鼠标左键并拖至其建立联系
的子表中的对应索引字段;再松开鼠标左键,数据库
的两个表间就有了一条联线,其永久关系就建立完成。
目录
上页
下页
退出
119
例如:建立图书管理数据库中读者表、借书表、图书
表以及作者表之间的永久联系。如图 4-9所示。
图 4-9 建立永久关系后的图书管理数据库
目录
上页
下页
退出
120
如果要修改编辑已建立的联系,可用鼠标右键
单击要修改的连线,从弹出的快捷菜单中选择, 编
辑关系, 命令,或直接用左键双击连线,将弹出
,编辑关系, 对话框,如图 4-10所示。 在对话框中,
通过下拉列表重新选择表或相关的索引名则可以修
改指定的关系。
图 4-10, 编辑关系, 对话

目录
上页
下页
退出
121
说明,数据库表之间的永久联系和不同工作区打开的
表之间的关联是两个不同概念 。 其主要区别是:
( 1), 永久联系, 被保存在数据库中, 在每次使用时不
需要重新建立, 是数据库的一部分 。 而, 关联, 称为
,临时联系,, 每次打开表时都需重建 。
( 2), 永久联系, 反映的是数据库表间的默认联接条件,
而, 临时联系, 反映的是不同工作区间中表的记录指
针的联动关系 。
( 3)只有数据库表间才有, 永久联系,,而, 临时联系,
在自由表和数据库都可随时建立。
目录
上页
下页
退出
122
2,设置参照完整性
在设置参照完整性之前必须首先清理数据库。
所谓清理数据库是物理删除数据库各表中所有删除
标记的记录。具体方法是:选择, 数据库, 菜单下
的, 清理数据库, 。
清理完数据库后,用鼠标右键单击表之间的联
系,从快捷菜单中选择, 编辑参照完整性,,将打
开, 参照完整性, 生成器如图 4-11所示。
图 4-11 参照完整性规则
目录
上页
下页
退出
123
参照完整性规则包括更新规则、删除规则和插入规则。
(1) 更新规则 规定了当更新父表中的连接字段时,如何处理相关
子表中的相关记录。
① 级联:当更改父表中某一记录时,子表相应记录将随之改变。
② 限制:若子表中有相应记录,则禁止修改父表中的连接字段。
③ 忽略:不作参照完整检查,可以随意更改两表。
(2) 删除规则 规定了当删除父表中的记录时,如何处理子表中相
关记录。
① 级联:当删除父表中某一记录时,则自动删除子表相应记录。
② 限制:若子表中有相应记录,则禁止删除父表中的记录。
③ 忽略:不作参照完整检查,即删除父表中的记录时与子表无关。
(3) 插入规则 规定了当插入子表中的记录时,是否进行参照性检
查。
① 限制:若父表中没有相匹配的连接字段值则禁止子表插入记录。
② 忽略:不作参照完整检查,即子表可随意插入记录。
目录
上页
下页
退出
124
第五节 自由表
在 VFP中,每个表可以有两种存在状态:数据库表和
自由表,使用何种表来处理数据取决于管理的数据之
间是否存在某种关系以及关系的复杂程度。
所谓自由表就是不属于任何数据库的表。
一、数据库表与自由表
1.建立自由表的方法有以下几种:
1),在项目管理器中, 从, 数据, 选项卡选择, 自由
表,, 然后选择, 新建, 命令按钮打开表设计
器 。
2),确认当前没有打开数据库, 单击, 文件, 菜单下
,新 建,, 从, 新建, 对话框中的, 文件类型,
组框中选择, 表,, 然后单击, 新建文件, 钮打开
表设计器建立自由表 。
3),确认当前没有打开数据库, 使用命令打开表设计器
建立自由表,CREATE [ 表名 |? ]
目录
上页
下页
退出
125
2.数据库表与自由表相比具有的特点:
( 1) 数据库表可以使用长表名和长字段名 。
( 2) 可以为数据库表中的字段指定标题和注释 。
( 3) 可以为数据库表中的字段指定默认值和输入掩码 。
( 4) 数据库的字段有默认的控件类 。
( 5) 可以为数据库表规定字段级规则和记录级规则 。
( 6) 数据库表支持主关键字, 参照完整性和表之间的
永久联系 。
( 7)支持 INSERT,UPDATE和 DELETE事件的触发器 。
目录
上页
下页
退出
126
二、将自由表添加到数据库
1.在项目管理器中,将要加入表的数据库展开至表,
并确认当前选择了, 表,,如参见图 4-30。单击
,添加, 按钮,然后从弹出的, 打开, 对话框中选
择要加入数据库的自由表。
2.在数据库设计器中,可以从, 数据库, 菜单中选择
,添加表,,也可单击数据库设计器工具栏上的,
添加表, 按钮,然后从, 打开, 对话框中选择要添
加的表到当前数据库中。
3.运用 ADD TABLE命令添加一个自由表到当前数据库,
命令格式是:
ADD TABLE 表名 |? [NAME 长表名 ]
目录
上页
下页
退出
127
注意:
一个表只能属于一个数据库,当一个自由
表加入到某个数据库后就不再是自由表。因
此也不能把属于另一个数据库的表添加到当
前数据库。
目录
上页
下页
退出
128
三、从数据库中移去表
1.在项目管理器中,将数据库下的表展开,并选择所
要移出去的表,参见图 4-31(a),接着单击, 移去,
按钮,弹出对话框,从中选择移去, 。
如果选择, 删除, 则指不仅从数据库中移出该表,
且从磁盘上删除该表。
2.在数据库设计器中,先用鼠标单击选定要移出的表,
然后单击数据库设计器工具栏上的, 移去表, 按钮,
或者从, 数据库, 菜单项的下拉菜单中选择, 移去,,
就可将该表移出数据库。使之成为自由表。
3.还可以使用命令方式把一个表从数据库中移出。其
命令格式是:
REMOVE TABLE 表名 |? [DELETE][RECYCLE]
目录
上页
下页
退出
129
注意:
( 1) 一旦某个表从数据库中移出, 那么与之联系的
主索引, 默认值及有关的规则都随之消失, 因
此将一个表从数据库中移出将影响到当前数据
库中与该表有联系的其他表 。
( 2)如果移出的表在数据库中使用了长表名,那么
移出后长表名将不可再用。
目录
上页
下页
退出
130
迄今所讲述的对表的操作都是在一个
工作区进行的,每个工作区最多只能打开
一个表文件,用 USE命令打开一个新的表,
同时也就关闭了前面已打开的表。在实际
应用中,用户常常需要同时打开多个表文
件,以便对多个表文件的数据进行操作。
为了解决这一问题,Visual FoxPro引入了
工作区的概念。 Visual FoxPro允许用户在
表间建立临时关系和永久关系。
第六节 多表的操作
目录
上页
下页
退出
131
一, 工作区的概念
1,工作区和当前工作区
Visual FoxPro 能同时提供 32767个工作区 。
系统默认值为 1区 。
在任意时刻,只有一个工作区是当前工作区,
用户只能在当前工作区对打开的当前库进行操作。
每一个工作区都可以并且只能打开一个数据
库文件。
同一个数据库文件不允许同时在多个工作区
打开,但在其它工作区中被关闭之后,可以在任
意一个工作区中被打开。
各工作区中打开的数据库彼此相互独立(指
针不受影响)。
目录
上页
下页
退出
132
2.选择当前工作区
每一个工作区用工作区号或别名来标识
( 1)工作区号
利用数字 1~32767来标识 32767个不同的工作区
( 2)别名
前 10工作区用 A~J10个字母来标识。
采用该工作区中已打开的数据库的库名来作别名
用户自己定义
【 命令格式 】 USE 〈 数据库名〉 [ALIAS〈 别名〉 ]
【 功能 】 打开数据库文件并为该数据库起一个别名。
【 说明 】 给数据库起了别名后,数据库名就不是默认
的别名了。
目录
上页
下页
退出
133
( 3) 工作区的选择
当系统启动时, 1号工作区是当前工作区, 若想
改变当前工作区, 则可使用 SELECT命令来转换当前
工作区 。
【 命令格式 】 SELECT<工作区号 >/<工作区别名 >
【 功能 】 选择一个工作区作为当前工作区 。
【 说明 】 <工作区号 > | <工作区别名 >:指定当前工作
区 。 选择工作区时, 可以直接指定区号, 也
可以通过别名指定工作区, 二者是等效的 。
别名可以是系统规定的别名, 也可以是用户规定的
别名, 甚至可以用已打开的表名替代工作区别名 。 此
命令允许选用, 0” 号工作区 。 如果指定, 0”, 则表
示选用当前未使用过的编号最小的工作区作为当前工
作区 。
执行该命令后, 对任何工作区中的表及记录指针均
不发生影响, 仅实现各个工作区之间切换 。
目录
上页
下页
退出
134
【 例 4-41】 在 1号和 2号工作区内分别打开 STUD.DBF
和 COURSE.DBF表文件, 并选择 1号工作区为当前
工作区 。
SELECT 1 && 或 SELECT A
USE STUD
SELECT 2
USE COURS
SELECT 1
3,非当前工作区字段的引用
Visual FoxPro系统对当前工作区上的表可以进行任
何操作, 也可以对其他工作区中的表文件的数据进
行访问 。 在主工作区可通过以下两种格式访问其他
工作区表中的数据 。
格式,<工作区别名 >-><字段名 >
<工作区别名 >,<字段名 >
目录
上页
下页
退出
135
通过用工作区别名指定欲访问的工作区, 所得到
的字段值为指定工作区打开的表当前记录的字段值 。
【 例 4 - 42】 在 1号和 2 号工作区打开 STUD.DBF和
SC.DBF,在 1号工作区内查看当前记录的学号, 姓
名, 性别, 出生日期, 课程号, 成绩等字段内容 。
SELECT A
USE STUD && 在一号工作区中打开 STUD
SELECT B
USE SC && 在二号工作区中打开 SC
SELECT A && 选择 1号工作区为当前工作区
DISPLAY 学号,姓名,性别,出生日期,B->课程 ;
号,SC.成绩
目录
上页
下页
退出
136
1,关联的概述
所谓表文件的关联是把当前工作区中打开的表
与另一个工作区中打开的表进行逻辑连接, 而不生
成新的表 。 当前工作区的表和另一工作区中的打开
表建立关联后, 当前工作区是表的记录指针移动时,
被关联工作区的表记录指针也将自动相应移动, 以
实现对多个表的同时操作 。
在多个表中, 必须有一个表为关联表, 此表常
称为父表, 而其他的表则称为被关联表, 常称为子
表 。 在两个表之间建立关联, 必须以某一个字段为
标准, 该字段称为关键字段 。 表文件的关联可分为
一对一关联, 一对多关联和多对多关联 。
三、表的关联
目录
上页
下页
退出
137
2,表文件关联的建立
( 1) 一对一关联的建立
1) 命令方式
【 格式 】 SET RELATION TO [<关键字段表达式 > | <数
值表达式 >] [INTO<别名 > | <工作区号 >] [ADDITIVE]
【 功能 】 将当前工作区的表文件与 <别名 >( 或工作区号 )
指定的工作区中的表文件按 <关键字段表达式 >或 <数
值表达式 >建立关联 。
【 说明 】 当用 <关键字段表达式 >建立关联时, 关键字必
须是两个表文件共有字段, 且别名表文件已按关键字
段建立了索引文件, 并已指定关键字段为主索引 。
当父表文件的记录指针移动时, 子表文件的记录指
针根据主索引文件指向关键字段值与父表文件相同的
记录 。 如果子表中没有与关键字段值相同的记录, 记
录指针指向文件尾, EOF()为,T.。
目录
上页
下页
退出
138
当按 <数值表达式 >建立关联时, 别名表不需
要打开索引文件, 两个表文件按照记录号相联系,
父表文件的记录指针移动时, 子表文件的记录指
针移至与数值表达式相等的记录上 。 若找不到此
记录, 记录指针指向文件尾, EOF()为,T.。
ADDITIVE,表示当前表与其他工作区表己有的
关联仍有效, 实现一个表和多个表之间的关联;
否则取消当前表与其他工作区表已有的关联, 当
前表只能与一个表建立关联 。
SET RELATION TO则表示取消当前工作区与其
他工作区的关联 。
【 例 4-43】 将表文件 STUD.DBF和 SC.DBF以学号
为关键字段建立关联 。
目录
上页
下页
退出
139
SELECT 2 && 选择工作区 2
USE SC && 打开表文件 SCORE.DBF
INDEX ON 学号 TAG 学号 && 建立学号标识
SET ORDER TO TAG 学号 && 指定学号为主索引
SELECT 1 && 选择工作区 1
USE STUD && 打开表文件 STUD.DBF
SET RELATION TO 学号 INTO 2 && 建立一对一关联
【例 4-44】 将表文件 STUD.DBF和 SC.DBF按数值表达式
建立关联。
SELECT 2 && 选择工作区 2
USE SC && 打开表文件 SC.DBF
SELECT 1 && 选择工作区 1
USE STUD && 打开表文件 STUR.DBF
SET RELATION TO RECNO() INTO 2
目录
上页
下页
退出
140
2) 菜单方式
① 选择 【 窗口 】 |【 数据工作期 】, 弹出数据工作期窗口 。
② 选择 【 打开 】, 将需要用到的表在不同的工作区打开 。
③ 在别名列表中选择主表, 再单击, 关系, 按钮, 再在
别名列表中选择子表 。
④ 如果子表文件未指定主索引, 系统会打开如图 3-21所
示的, 设置索引顺序, 对话框, 以指定子表文件的主
索引 。
⑤ 主索引建立后, 系统弹出如图 3-22所示的, 表达式生
成器, ( Expression Builder) 对话框, 在字段列表框
中选择关联关键字段, 然后单击, 确定, 按钮, 返回
数据工作期窗口 。
⑥ 此时在数据工作期窗口的右侧列表框中出现了子表,
在父表和子表之间有一单线相连, 说明在两表之间已
建立了一对一关联, 如图 3-23所示 。
目录
上页
下页
退出
141
( 2) 一对多关联的建立
1) 命令方式
【 格式 】 SET SKIP TO [<别名 1>[,<别名 2>],..]
【 功能 】 将当前表文件与其他工作区中的表文件建立一
对多关联 。
【 说明 】 先 要用 SET RELATION命令建立一对一的关联,
然后才能将一对一的关联进一步定义成一对多的关联 。
当前工作区表记录指针移动时, 别名库文件的记录
指针指向第一个与关键字表达式值相匹配的记录, 若找
不到相匹配的记录, 则记录指针指向文件尾部, EOF()
为,T.。
当父表中的一个记录与子库的多个记录匹配时, 在
父表中使用 SKIP命令, 并不使父表的指针移动, 而子
表的指针却向前移动, 指向下一个与父表相匹配的记录;
重复使用 SKIP命令, 直至在子表中没有与父表当前记
录相匹配的记录后, 父表的指针才真正向前发生移动 。
目录
上页
下页
退出
142
无任何选择项的 SET SKIP TO命令将取消一对
多的关联(一对一的关联仍然存在)。
2) 菜单方式
① 选择 【 窗口 】 |【 数据工作期 】, 弹出的数据工作期
窗口 。
② 按前面所述的步骤, 建立一对一关联 。
③单 击【一对多】按钮,系统弹出创建一对多关系对
话框。
④ 在 创建一对多关系对话框的子表别名列表框选择子
表别名, 单击, 移动, 按钮, 子表别名将出现在选定
别名列表框中, 单击, 确定, 按钮, 完成子表别名的
指定, 并返回到数据工作期窗口 。
⑤ 如果子表文件未指定主索引, 系统显示, 指定索引
顺序, 对话框, 以便用户指定主索引 。
目录
上页
下页
退出
143
⑥ 完成上述工作后,在数据工作期窗口的右侧列表框中
出现了子表文件名,在父表和子表之间有一双线相连,
说明在两表之间已建立了一对多关联 。
( 3) 一个表对多个表关联的建立
1) 命令方式
【 格式 】 SET RELATION TO [<关联表达式 1> INTO <
别名 1> | <工作区 1>[,<关联表达式 2> INTO <别名 2>
| <工作区 2>,..][ADDITIVE]]
【 功能 】 将主工作区中的表与多个其他工作区中的表建
立关联 。
【 说明 】 <关联表达式 1>表示与别名 1表文件建立关联时
的关键字段表达式, <关联表达式 2>表示与别名 2表
文件建立关联时的关键字段表达式, 建立关联时, 关
键字段必须是两个表文件共有字段, 且别名表文件已
按关键字段建立了索引文件, 并已指定为主索引 。
目录
上页
下页
退出
144
当父表文件的记录指针移动时, 多个子表文件的记
录指针根据各自的主索引文件指向关键字段值与父表文
件相同的记录 。 其他有关参数均同前述 。
2) 菜单方式
多次利用上节介绍的菜单步骤,只要每次选择的子
表不同,就可以分别建立一个表文件同多个表文件的关
联。
3,取消表的关联
( 1) 在建立关联的命令中, 如果不选用 ADDITIVE选项,
则在建立新关联的同时, 取消了当前表原来建立的关联 。
( 2) 命令 SET RELATION TO,取消当前表与其他表之
间的关联 。
( 3) 命令 SET RELATION OFF INTO <别名 > | <工作
区号 >,取消当前表与指定别名表之间的关联 。
( 4)关闭表文件,关联都被取消,下次打开时,必须重
新建立。
目录
上页
下页
退出
145
4,数据库的连接
在实际应用中, 经常需要把不同数据结构的表文件
按一定要求连接形成一个新的表文件, 这就是表文件
的连接, 称为物理连接 。
【 格式 】 JOIN WITH <工作区号 > | WITH <别名 > TO <
新文件名 > FOR <逻辑表达式 > [FIELDS <字段名表 >]
【 功能 】 将当前表文件和另一工作区中打开的 <别名 >表
文件按指定的条件连接, 生成一个以 <新文件名 >为名
的新表文件, 实现物理上的连接 。
【说明】 WITH <工作区号 > | WITH <别名 >指定另一工
作区打开的表文件,<新文件名 >表示连接生成的新表
文件,其扩展名可省略,系统默认为,DBF。
FOR <逻辑表达式 >指定两个表文件的连接条件,
它不同于其他命令中的 FOR子句,其他命令的 FOR子
句都是选择项,这里的 FOR子句不可缺省,否则,
JOIN命令无法执行。
目录
上页
下页
退出
146
【 例 4-50】 将 STUD.DBF和 SC.DBF表按学号连接, 生
成一个新的表文件 STUD_SC.DBF。
SELECT 2
USE SC
SELECT 1
USE STUD
JOIN WITH B TO STUD_SC FOR 学号 =B->学号
FIELDS 学号,姓名,班级名,系别代号, B->课程
号,B->成绩 && 连接生成新文件 STUD_SC
5,表间的数据更新
【 格式 】 UPDATE ON<关键字段 >FROM <别名 >|<工作
区号 > REPLACE <字段 1> WITH <表达式 1>[,
<字段 2> WITH <表达式 2>… ] [RANDOM]
【 功能 】 用 <别名 >或 <工作区号 >指定的表的数据更新当
前区表中的数据 。
目录
上页
下页
退出
147
【 说明 】 <关键字段 >必须为两个表所共有的 。
<别名 > | <工作区号 >:指定用来进行数据更新的表文件 。
<字段 1> WITH <表达式 1>:用表达式 1的值更新字段 1的
内容,表达式中出现的别名库中的字段应以前缀, 别名 -
>” 或, 别名,” 标识 。
如果选用 RANDOM选择项, 别名区中文件不需索引
或按关键字段升序排序;否则两个表文件都必须以关键
字段索引或按关键字段升序排序 。
若当前区表中有多个关键字值相同的记录,则只
对第一个进行更新;若别名库中有多个关键字值相同的
记录,则对当前表中相应的记录进行多次更新。
【 例 4-51】 表文件 ZFCJ.DBF内容如下, 用 SC.DBF中的
各课成绩值计算 ZFCJ.DBF中的总分成绩 。
目录
上页
下页
退出
148
记录号 学号 姓名 总分
1 961101 李建国 90.0
2 961103 李 宁 92.0
3 961202 赵 娜 89.0
4 961204 孙 亮 75.0
5 971110 赵 琳 92.0
6 971405 罗宇波 90.0
SELECT 2
USE SC
SELECT 1
USE ZFCJ
SET ORDER TO TAG 学号 && 指定主索引标识
UPDATE ON 学号 FROM SC REPLACE 总分 WITH;
总分 +A->成绩 RANDOM
目录
上页
下页
退出
149
一, 选择题
1,若当前驱动器号是 C,当前目录是 \FoxPro\,要
在 C盘的 USER目录下创建一个名为 TEACHER的
表, 下面不正确的命令是 ________。
A) CREAT C,\USER\TEACHER.DBF
B) CREAT C,\USER\TEACHER
C) CREAT TEACHER
D) CREAT \USER\TEACHER
2,用 DISPLAY命令显示数据时, 若未指定 <范围 >,
则 ________。
A) 不停地显示表中的全部记录
B) 显示当前一条记录
C) 显示下一条记录
D) 分屏显示表全部记录
思考题
目录
上页
下页
退出
150
3,修改表结构的命令是 ________。
A) MODIFY STRUCTURE
B) EDIT STRUCTURE
C) CHANGE STRUCTURE
D) BROWSE STRUCTURE
4,若要在表中真正删除记录, 先用 DELETE命令, 再用
________。
A) RECALL B) PACK
C) 按 ESC键 D) 不用其他命令
5,若对已有记录的表文件 STUD.DBF使用命令
USE STUD
GO 1
BOF( )
则显示结果是 ________。
A) 0 B) 1 C),F,D),T.
目录
上页
下页
退出
151
1.设计一张二维表。
2.建立一个数据表。
3.对已有的表进行数据输入、记录显示和修改、追
加记录等操作。
4.对已有的表进行逻辑删除记录和物理删除记录操
作。
实验题
152
结 束