第 4章 库文件的维护及基本应用
第 4章 库文件的维护及
基本应用
?4.1 编辑控制键的功能
?4.2 数据库文件的编辑
?4.3 建立排序库文件命令 — SORT
?4.4 索引文件
?4.5 数据库记录的查找
?4.6 数据库数值参数的统计
第 4章 库文件的维护及基本应用
4.1 编辑控制键的功能
FoxPro在执行许多命令时,都使系统进入窗口编辑
状态 。 例如, 在执行建立库文件结构命令 CREATE、
追加记录命令 APPEND,插入记录命令 INSERT时, 都
要进入窗口编辑状态 。 在这一状态下,系统不再执行命
令,所输入的各种数据都只是暂存在内存中,各数据间的
相对位置由它们在显示屏幕上的相对位置来确定 。 在
这种状态下,系统向用户提供了很多控制键 。
第 4章 库文件的维护及基本应用
第 4章 库文件的维护及基本应用
第 4章 库文件的维护及基本应用
第 4章 库文件的维护及基本应用
4.2 数据库文件的编辑
4.2.1 对记录的编辑命令 —— EDIT
1,命令的基本格式
EDIT[[ RECORD] 〈 数字表达式 〉 ] [ 〈 范围 〉 ]
[ FIELDS〈 字段名清单 〉 ]
[ FOR〈 条件 1〉 ][ WHILE〈 条件 2〉 ]
[ FREEZE〈 字段名 〉 ]
若缺省 〈 范围 〉 和条件,则从当前记录开始编辑。
第 4章 库文件的维护及基本应用
2,EDIT命令的常用格式
与基本格式相比,常用格式中增加了如下的选择项,
[ NOAPPEND] [ NODELETE]
[ NOEDIT/NOMODIFY]
[ TITLET〈 字符表达式 〉 ]
[ VALID[, F] 〈 条件表达式 〉
[ ERROR〈 出错信息 〉 ]]
[ WHEN〈 条件表达式 〉 ]
第 4章 库文件的维护及基本应用
4.2.2 库文件翻阅命令 —— BROWSE
BROWSE 命令是 FoxPro 最有 用的命令之 一 。
BROWSE命令将打开一个窗口 (Browse窗 ),在窗中显示
一个打开库文件的记录 。 用户可方便地进行编辑或追
加记录 。
1,BROWSE命令的基本格式
BROWSE[ FIELDS〈 字段名清单 〉 ]
[ FOR〈 条件表达式 〉 ] [ FREEZE〈 字段名 〉 ]
该命令在 Browse窗中分页横式显示从当前记录开始
所有符合条件的记录 。
第 4章 库文件的维护及基本应用
无 FIELDS选择项时,显示全部字段 ;有 FIELDS选项
时 (先把 〈 字段名清单 〉 理解为用,,”分隔的字段名 ),按
〈 字段名清单 〉 的次序,显示 〈 字段名清单 〉 中给出字
段的内容 。
无 FOR选择项时,显示全部记录 ;否则,只显示使
〈 条件表达式 〉 为 T的记录 。
无 FREEZE选择项时,可编辑所有字段 ;否则,只能编
辑 FREEZE中给出的字段。
第 4章 库文件的维护及基本应用
2,BROWSE命令的常用格式
与基本格式相比,常用格式中增加了如下选择项,
[ LOCK〈 数字表达式 〉 ] [ NOAPPEND]
[ NODELETE] [ NOEDIT/NOMODIFY]
[ TITLE〈 字符表达式 〉 ] [ VALID[,F]
〈 逻辑表达式 〉 [ ERROR〈 字符表达式 〉 ]]
[ WHEN〈 逻辑表达式 〉 ]
第 4章 库文件的维护及基本应用
无 LOCK子句时,当用户用 ^← 和 ^→ 控制键时,整个
Browse窗中的显示内容都将左右移动,有些字段将从窗
中移走,有些字段将移入窗中 。 有了 LOCK子句,〈 数字
表达式 〉 将给出一个数字 n,当左右移动窗口内容时,在
最左边显示的 n个字段的内容始终留在窗中不动 。
BROWSE常用格式中增加的其它选择项都与 EDIT
命令常用格式中的选择项相同,形式相同,功能也相同 。
因此,在此不再赘述了 。
第 4章 库文件的维护及基本应用
4.2.3 修改命令 ——CHANGE
在 FoxPro26中,CHANGE命令无论在命令格式上还
是在功能上都与 EDIT命令全相同,只是命令名不同而已 。
请读者查阅 EDIT命令 。
第 4章 库文件的维护及基本应用
4.2.4 替换命令 ——REPLACE
对字段值进行有规则的修改时,可以利用 REPLACE
命令来自动完成修改任务 。
命令格式, REPLACE〈 字段名 1〉 WITH〈 表达式 1〉
[ ADDITIVE ] [,〈 字段名 2〉 WITH〈 表达式 2〉
[ ADDITIVE],..] [ 〈 范围 〉 ] [ FOR〈 条件 1〉 ]
[ WHILE〈 条件 2〉 ][ NOOPTIMIZE]
若缺省了范围和两个条件项,则仅对当前记录进行操
作 。
功能,对所有符合要求的记录,系统自动地用每个
WITH后的表达式值来修改 WITH前的字段值 。
第 4章 库文件的维护及基本应用
无 ADDITIVE 时,则进行替换 ; 有 ADDITIVE 时
(ADDITIVE只能用于修改记忆型字段 ),〈 表达式 〉 值
追加在原数据后 。
若被修改的数字型字段宽度小于对应表达式宽度,
则系统自动作如下处理,
首先,截去多余小数位,剩下的小数位四舍五入 。 若
无法完成,则用科学计数法表示该数 。 若仍不行,则用一
串, *” 替代该字段内容 。
第 4章 库文件的维护及基本应用
对于字符型字段来说,若 〈 表达式 〉 内容超宽,则截
去尾部超宽部分 。
NOOPTIMIZE项,该项将禁止对 REPLACE命令进
行优化操作, 详见 SETOPTIMIZE命令 。
第 4章 库文件的维护及基本应用
4.2.5 修改库文件结构命令 ——
MODIFYSTRUCTURE
命令格式,MODIFYSTRUCTURE
功能,对当前打开库文件进行修改结构工作 。 若无
当前打开库文件,系统将提示用户选择一个库文件 。
此命令执行过程如下,
① 系统自动在磁盘上建立一与当前打开库文件同
名,但扩展名为 BAK的后备文件 。
② 在屏幕桌面上开出一矩形区域,并在其中显示库
文件结构,格式与 CREATE命令相同 。
第 4章 库文件的维护及基本应用
③ 修改结束后,系统自动把同名后备文件内容读回库
文件。
还有类似的其它情况发生,即修改后的库文件数据失
去了一些原有数据 。 不管发生什么情况,只要是使用
MODIFYSTRUCTURE产生了问题,都可用下法恢复原样,
① 删去被修改了结构的库文件及记忆文件 。
②把 BAK和 TBK后备文件改名为同名 DBF,FPT文件。
第 4章 库文件的维护及基本应用
4.2.6 删除库文件记录
对记录的删除应持谨慎态度 。 FoxPro把删除记录的
操作分为两步,删除操作和打包操作 。 删除操作不删除记
录,只在准备删除的记录上打上删除标记, *”, 这种标
记是可以取消的 。 打包操作才真正删除记录 。
1,给记录打删除标记命令 —— DELETE
DELETE命令用于给记录打删除标记, *” 。
命令格式, DELETE[ 〈 范围 〉 ] [ FOR〈 条件 1〉 ]
[ WHILE〈 条件 2〉 ] [ NOOPTIMIZE]
在缺省 〈 范围 〉 和两条件项时,仅给当前记录打删除
标记 ;否则,对范围内符合条件的记录打删除标记 。
第 4章 库文件的维护及基本应用
在执行 BROWSE,EDIT,CHANGE命令时也可给
记录打删除标记,这些命令在前面已介绍过 。
NOOPTIMIZE项,见 SETOPTIMIZE命令 。
例 1
USE 职工
DELETENEXT3
执行上述命令后,职工 DBF库文件中,记录号为 1,2、
3的三条记录打上了删除标记 。
第 4章 库文件的维护及基本应用
2,恢复记录命令 ——RECALL
已经打上的删除标记,可以用 RECALL命令撤消 。
命令格式, RECALL[ 〈 范围 〉 ] [ FOR〈 条件 1〉 ]
[ WHILE〈 条件 2〉 ] [ NOOPTIMIZE]
在缺省 〈 范围 〉 和两个条件项时,仅给当前记录撤
消删除标记 ;否则,范围内符合条件记录的删除标记 (若
有 )都被撤消 。
NOOPTIMIZE项,禁止对 RECALL语句进行优化处
理,详见 SETOPTIMIZE命令。
第 4章 库文件的维护及基本应用
例 2
USE 职工
RECALL NEXT 5
执行上述两条命令后,记录号为 1,2,3,4,5记录
的删除标记 (若有 )都被撤消。
第 4章 库文件的维护及基本应用
3,压缩命令 ——PACK
格式,PACK[ MEMO][ DBF]
在无选择项时,PACK命令把当前打开库文件中所有打
上了删除标记的记录, 真正地从库文件中删除掉;同时,
也压缩了与库文件同名, 扩展名为 FPT的记忆文件 。 归纳
成一句话,就是把库文件和记忆文件同时压缩掉 。
在执行 PACK命令的过程中,若磁盘空间不够的话,源
库文件也将被覆盖掉 。
MEMO子句,选择 MEMO子句,将不压缩当前打开库文
件,而只压缩记忆文件 。 也即,并不删除库文件中打有删除
标记的记录,仅把记忆文件中无用空间压缩掉 。
第 4章 库文件的维护及基本应用
4,决定删除标记影响的命令 ——SETDELETED
删除标记对执行命令有否影响,SETDELETED命令
可以决定这个问题 。
命令格式,SETDELETEDOFF/ON
执行 SETDELETEDOFF命令后,删除标记对任何命
令均无影响 。 而执行 SETDELETEDON命令后,系统在
执行命令时,一般都不包括打有删除标记的记录 。 例外
情况有,
① 命令中有 RECORD〈 表达式 〉 或 NEXT〈 表达
式 〉 范围项,且范围内第一个记录是打上了删除标记的 。
第 4章 库文件的维护及基本应用
② 本章后面讲到的 INDEX和 REINDEX命令不受
SETDELETED命令的影响 。
DELETED的初始默认值为 OFF。
5,清除库文件中所有记录命令 ZAP和保护命令 ——
SETSAFETY
(1)ZAP命令
命令格式,ZAP
功能,清除已打开库文件中全部记录,但库文件还存
在,库文件结构也不变 。
为慎重起见,汉字 FoxPro还为 ZAP命令加了一个 。
第 4章 库文件的维护及基本应用
保护级,这就是 SETSAFETY命令
(2)SETSAFETY命令
命令格式,SETSAFETYON/OFF
执行 SETSAFETYON命令后,当要求系统执行 ZAP
命令时,,
ZAP文件名?(Y/N)
若用户用 Y键回答,系统立即执行 ZAP命令 (清除库
中所有记录 );若以 N键回答,系统不执行 ZAP命令,返回到
命令状态 。
第 4章 库文件的维护及基本应用
执行 SETSAFETYOFF命令后,若要求系统执行 ZAP
命令,则系统立即执行之,而不显示任何提示信息 。
系统的初始状态是 SAFETYON状态 。
其实,当 SAFETY为 ON,在发出任何重写文件命令
时,系统都要向用户显示上述提示,用户确认后,才真正重
写文件 。 当 SAFETY为 OFF时,则在重写一个文件前不
提示用户 。
第 4章 库文件的维护及基本应用
4.3 建立排序库文件命令 —— SORT
在输入记录数据时, 记录在库文件中的实际排列
次序就已确定 。 这种排列次序往往是随机的,与实际需
要不相吻合 。 SORT命令能根据用户对记录实际排列次
序的要求重建库文件 。
命令格式, SORTTO〈 新库文件名 〉 ON〈 字段名 1〉
[ /A] [ /C] [ /D] [,〈 字段名 2〉
[ /A] [ /C] [ /D],..] [ 〈 范围 〉 ]
[ FOR〈 条件 1〉 ]
第 4章 库文件的维护及基本应用
[ WHILE〈 条件 2〉 ] [ FIELDS〈 字段名清单 〉 ]
[ ASCENDING/DESCENDING] [ NOOPTIMIZE]
当范围项缺省时,等价于 ALL。 〈 新库文件名 〉 的
默认扩展名为 DBF。
此命令将根据打开的数据库文件,在磁盘上生成一
个新的库文件 。 新库文件与打开库文件结构相同 ;新库
文件中的记录包括当前打开库文件中符合范围和条件
的所有记录 。
若无 FIELDS〈 字段名清单项 〉,则新库文件包括当
前打开库文件中所有字段 ;否则,仅包括 〈 字段名清单 〉
中给出的字段 。
第 4章 库文件的维护及基本应用
/C选择项只应用于 C型字段 。 选用此项,则英文字母
大小写无区分 ;不选用此项,则小写比大写的排列次序优
先 。 /C可以和 /A或 /D同时使用,这时,可只用一条斜线 (/AC、
/DC)。
ON后的各字段不能是 M型, G型, L型,只能是 C型,
N型或 D型 。 C型字段,按字符的 ASCII码排序 (汉字按机内
码 )。
ASCENDING/DESCENDING:对于既无 /A又无 /D选
择项的所有字段,可统一规定一种升 (或 )降序排序 。
ASCENDING为升序,DESCENDING为降序 。 (两者都没
有,默认为升序 。
第 4章 库文件的维护及基本应用
SORT命令不改变打开库文件中各记录的次序,只是
产生了一个新的与打开库文件同结构的库文件 。 在新库
文件中,各记录的次序是根据 SORT命令的要求排列的 。
第 4章 库文件的维护及基本应用
4.4 索引文件
SORT命令可以改变记录在库文件中的排列顺序,但
由于 SORT命令要生成新库文件,所以存在下述的一些
问题 。
① 执行 SORT命令需要相当多的时间,特别是当记录
较多时,所需时间相当可观 。
② 需要占用的空间也相当多,原打开库文件中所有
的记录,要原样复制到新库文件中 。 也即,不同的库文件
由相同的记录组成 。
第 4章 库文件的维护及基本应用
索引是根据指定的关键字建立起来的顺序 。 它的实际结
构比较复杂,用户可以不失本质地把它理解为一个映照表 。
关键字可以是一个字段名,也可以是字段名的某种组合 。
根据这个关键字,每一个记录都能得到一个确定的值,称
为关键字值 。 在映照表 (索引 )中,给出了排序后的关键字
值及其相应的记录号 。 以, DBF”为例,若令关键
字为, 工资, 字段,则索引示意图如表 4—2所示 。
第 4章 库文件的维护及基本应用
表 4— 2 索引示意图
第 4章 库文件的维护及基本应用
对一个库文件可建立多个索引,也可同时打开多个
索引 。 但在任何时刻,最多只有一个索引起作用 。 这个
索引称为主索引 。 下面介绍几个基本定义 。
(1) 记录的物理顺序、逻辑顺序和使用顺序。
物理顺序,记录在库文件中的实际排列次序。
逻辑顺序,对于一打开库文件,若有主索引存在,则库
文件中的记录将按主索引中的顺序展现给用户,供用户
使用 。
使用顺序,实际展现给用户,供用户使用的记录顺序
称为记录的使用顺序 。
第 4章 库文件的维护及基本应用
(2)首记录和末记录 。 在使用顺序中处于第一位的记
录称为首记录,处于最后一位的记录称为末记录 。
(3)指针的自动移动及范围项 。 在执行一些命令时,指
针会自动地移动,这种移动是按记录的使用顺序进行的 。
第 4章 库文件的维护及基本应用
4.4.1 建立索引文件命令 —— INDEX
利用 INDEX命令建立两种索引文件,单索引关键字
的索引文件 (简称单索引文件 )和多索引关键字的索引文
件 (简称复合索引文件 )。 一个单索引文件中只包含一个
索引, 一个复合索引文件中可包含有多个索引 。 本书
仅介绍单索引文件 。 有关复合索引文件内容, 请参阅
本书主要参考文献 [ 3] 。
1.建立单索引文件命令
命令格式, INDEXON〈 关键字表达式 〉 TO〈 索引
文件名 〉 [ FOR〈 条件表达式 〉 ] [ UNIQUE]
[ ADDITIVE] [ COMPACT]
第 4章 库文件的维护及基本应用
此命令根据指定的 〈 关键字表达式 〉 为当前打开
库文件建立一个单索引文件 。 其文件名即为命令中的
〈 索引文件名 〉, 默认扩展名为 IDX。
命令中,〈 关键字表达式 〉 既可以是一个字段名,也
可以是包含字段名的表达式 。
一般在使用本命令时,将关闭所有以前打开的所有
索引文件 。 但使用 ADDTIVE选择项,将保留已打开的索
引文件 。
COMPACT:采用本选择项,将压缩所建的单索引文
件 。 压缩后,有益于快速存取, 检索 。
第 4章 库文件的维护及基本应用
4.4.2 打开索引文件
只有打开的索引文件,才能对记录的逻辑顺序产生作
用 。 有四种打开索引文件的方法,
① 采用 INDEX命令建立索引文件后,刚建立的索引文
件即处于打开状态 。
② 在打开库文件时,结构化复合索引文件就自动打开 。
详见本书参考文献 [ 3] 。
③ 在打开库文件的同时打开索引文件 。 命令常用格
式为,
④ 在库文件已打开的情况下,可利用打开索引文件命
令单独打开索引文件。
第 4章 库文件的维护及基本应用
4.4.3 更换主索引
命令格式, SETORDERTO[ 〈 数字表达式 〉 /
〈 单索引文件名 〉 ]
命令中指定的索引成为主索引,原来的主索引不再
是主索引了。
第 4章 库文件的维护及基本应用
4.4.4 修改索引文件
对于已经不能反映库文件实际内容的索引文件,可
以在打开库文件后用 REINDEX命令使它们重新适应之 。
命令格式,REINDEX[ COMPACT]
该命令按当前打开库文件的内容,对所有打开的索
引文件中的索引进行修改 。 修改后,每个索引文件名不
变,关键字表达式也不变,但内容已符合变化了的库文件 。
COMPACT:使用该项后,把一般的 IDX索引文件变
为压缩了的 IDX索引文件 。
第 4章 库文件的维护及基本应用
4.5 数据库记录的查找
4.5.1 直接查找命令 —— LOCATE
命令格式, LOCATE[ 〈 范围 〉 ]
[ FOR〈 条件 1〉 ] [ WHILE〈 条件 2〉 ]
[ NOOPTIMIZE]
在缺省“范围”任选项时,等价于 ALL。
功能,在规定范围内,根据物理顺序顺次查找满足条
件的第一个记录。
第 4章 库文件的维护及基本应用
4.5.2 继续查找命令 —— CONTINUE
LOCATE命令在找到一个符合条件的记录后,即停
止继续查找 。 但在指定范围的以下区域,还有可能存在
符合条件的记录,CONTINUE命令将继续查找下去 。
命令格式,CONTINUE
此命令必须在 LOCATE命令后执行,在所剩下的区
域内按照记录的物理顺序继续查找符合条件的记录 。
相当于在缩小了的范围内又一次执行了 LOCATE命令 。
第 4章 库文件的维护及基本应用
4.5.3 索引查找命令 ——SEEK
打开索引文件后,记录将按照索引关键字值由小到
大的逻辑顺序进行排列 。 因此,当根据索引关键字值进
行查找时,可采用二分法 (折半法 )进行查找,可大大加快
查找速度,索引查找命令是 SEEK命令 。
1,命令格式,SEEK〈 表达式 〉
执行这一命令时,系统根据主索引,查找与命令中
〈 表达式 〉 值相匹配的记录 。
2,查找失败时的记录指针指向 —— SETNEAR
SET NEAR OFF/ON命令将决定, NEAR”的状态 。
而 NEAR的状态又影响索引查找失败时记录指针的指向 。
第 4章 库文件的维护及基本应用
4.6 数据库数值参数的统计
4.6.1 统计记录个数命令 —— COUNT
命令格式, COUNT[ 〈 范围 〉 ]
[ FOR〈 条件 1〉 ] [ WHILE〈 条件 2〉 ]
[ TO〈 内存变量名 〉 ] [ NOOPTIMIZE]
在缺省, 范围, 项时, 等价于 ALL。
功能,在当前打开的库文件中,统计符合, 范围, 和
,条件, 的记录个数,计算结果立即在屏幕上显示 。 若命
令中有, 内存变量, 任选项,则统计结果送入此内存变量
加以保存 。 若不存在此内存变量,则自动建立之 。
第 4章 库文件的维护及基本应用
4.6.2 求和命令 —— SUM
命令格式, SUM[ 〈 表达式清单 〉 ]
[ 〈 范围 〉 ] [ FOR〈 条件 1〉 ]
[ WHILE〈 条件 2〉 ]
[ TO〈 内存变量名清单 〉 /TOARRAY〈 数组名 〉 ]
[ NOOPTIMIZE]
在缺省, 范围, 项时, 等价于 ALL;在缺省, 表达
式, 清单时, 表示对库文件中所有数字型字段执行操作 。
执行本命令时,将在当前打开的库文件中,对符合,
第 4章 库文件的维护及基本应用
范围, 和, 条件, 的所有记录进行求和操作 。 根据命
令中, 表达式清单, 逐项求和,结果在屏幕上显示 。
TO ARRAY项,有此项时,求和结果将送入规定的数
组中 (见第 6章 6.1节 )。 若不存在此数组,系统自动建立之 ;
若存在,但过小,系统自动增加其尺度 。
第 4章 库文件的维护及基本应用
命令格式,AVERAGE[ 〈 表达式清单 〉 ]
[ 〈 范围 〉 ] [ FOR〈 条件 1〉 ] [ WHILE〈 条件 2〉 ]
[ TO〈 内存变量名清单 〉 /TOARRAY〈 数组名 〉 ]
[ NOOPTIMIZE] 该命令对任选项的规定与 SUM命令
相同 。
执行本命令时,将对当前数据库文件中符合, 范围,
和, 条件, 的记录,根据命令中, 表达式清单, 分别求
平均值, 结果送屏幕显示 。 若有, 内存变量名清单,,
结果还要送到对应的内存变量中保存起来 。 若有, 数
组名,,结果送数组保存 。
第 4章 库文件的维护及基本应用
4.6.4 求分类和命令 ——TOTAL
命令格式,TOTALON〈 关键字段 〉 TO〈 目的库文
件名 〉
[ FIELDS〈 字段名清单 〉 ] [ 〈 范围 〉 ]
[ FOR〈 条件 1〉 ]
[ WHILE〈 条件 2〉 ] [ NOOPTIMIZE]
执行此命令时,将建立一数据库文件,文件名由命令
提供 。 此目的库文件除了没有记忆型字段外,与当前打
开的库文件具有相同的结构 。
在缺省, 范围, 项时, 则等价于 ALL。
第 4章 库文件的维护及基本应用
执行 TOTAL命令时,系统将对打开库文件中, 关键
字段, 的字段值相同的相继记录进行求和操作 。 同时,
根据这几个相继记录,在目的库文件中生成一个记录 。
凡未求和的字段,生成记录的字段值等于这几个记录中
第一个记录的字段值 ;在求和字段上,生成记录的字段值
等于求和的结果 。
若在某字段上的求和结果超过了该字段的宽度,系
统将,
① 截去一部分小数部分,使结果不超过字段宽度 。
若成功,则剩下部分四舍五入 ;若不成功,则转频骤 ② 。
第 4章 库文件的维护及基本应用
② 当求和字段包含 7位以上位数时,采用科学计数法;
若还不成功,则转步骤 ③ 。
③ 以一串 *号填满该字段 。