第 6章 数据库的辅助操作命令
第 6章 数据库的辅助操作命令
6.1 内存变量数组和屏幕型内存变量
6.2 有关变量的操作
6.3 文件操作命令
6.4 几个通用命令
第 6章 数据库的辅助操作命令
6.1 内存变量数组和屏幕型内存变量
6.1.1 内存变量数组
在 FoxPro中,用户可使用数组, 但首先应定义数组 。
1,定义数组命令 ——DIMENSION
命令格式, DIMENSION〈 数组名 1〉
(〈 数字表达式 1〉 [,〈 数字表达式 2〉 ] )
[,〈 数组名 2〉 (〈 数字表达式 1〉 [,〈 数字表达式
2〉 ] )…]
本命令可以定义若干个一维或二维数组 。
第 6章 数据库的辅助操作命令
例 1
DIMENSION X(4),Y(2,3)
此例建立了两个数组 X和 Y。 数组 X由 1列 4行组成,
共 4个单元 ; 数组 Y由 2行 3列组成, 共 6个单元 。
此命令执行后,所建数组的所有单元都赋了一个逻
辑型的初值,F.; 但以后可以给各单元赋不同类型的值 。
第 6章 数据库的辅助操作命令
2,使用数组 ——下标变量
尽管一个数组是一个变量 (数组变量 ),但它的每一
个单元都可像一个一般变量那样被使用 。 数组单元是
以下标来区分的,也称为下标变量 。 下标的起始值为 1。
例如,在上面的例子中,数组 X有 4个下标, X(1)、
X(2), X(3),X(4); 数组 Y有 6个下标, Y(1,1),Y(1,2)、
Y(1,3),Y(2,1),Y(2,2),Y(2,3)。
第 6章 数据库的辅助操作命令
总结如下,
① 一个数组只算作一个内存变量,但每个单元都
可像一个内存变量一样使用 。 因此,称为下标变量 。 ;
② 数组必须先定义,后使用 。 定义时,各下标变量
都是逻辑型,F.,但以后可存入其它类型的值 。 一下标
变量的类型即为所存数据的类型 。
③ 每个字符型下标变量需占内存数为该字符变量
的字符个数加 7,其它类型的下标变量不增加额外的内
存空间 。
第 6章 数据库的辅助操作命令
④ 二维下标变量可用单下标方式访问 。 如,二维
数组 X(2,3)中,各下标变量的存储顺序为 (1,1),(1,2)、
(1,3),(2,1),(2,2),(2,3)。 因此,下标变量 X(2,1)
可用 X(4) 调用 。 为清晰起见,用单下标访问 2维数组
时,单下标称为序号 。
⑤ 定义数组时,也可用方括号 。 方括号与圆括号
完全等价 。
第 6章 数据库的辅助操作命令
例 3
DIMENSION AA[ 2,4]
DIMENSION AA(2,4)
是等价的 。
⑥ 可以用 DIMENSION命令重新定义一个已经存在
的数组,以改变它的维数和大小 。 重新定义后,只要下
标变量个数增加了,则原数组的各下标变量值将依次拷
贝到新数组的下标变量中,多出来的下标变量值为,F.。
重新定义后,若下标变量数减少了,被减少的下标变量
及其内容也就被删掉了 。
第 6章 数据库的辅助操作命令
3,当前记录数据送入变量 ——SCATTER命令
命令格式, SCATTER [ FIELDS〈 字段名清单 〉 ]
[ MEMO ] TO〈 数组名 〉 /TO〈 数组名 〉
BLANK/MEMVAR/MEMVAR BLANK;
功能, 把当前打开库文件的当前记录内容,以字段
为单位拷贝到一个数组或一组内存变量中 。 若数组或
内存变量不存在,则首先自动生成之 。
FIELDS〈 字段名清单 〉, 无此项时,将拷贝所有
字段 ; 否则,只拷贝列出的字段 。
第 6章 数据库的辅助操作命令
MEMO,无此项时,将忽略记忆型字段 。 若 〈 字段
名清单 〉 中有记忆型字段,必须使用本项 。 执行
SCATTER 时,若内存不够,将显示, Insufficient
memory”。
TO〈 数组名 〉, 按序把字段内容分别拷贝到该数组
对应次序的下标变量中。
TO〈 数组名 〉 BLANK,选择此项,则仅仅建立数组,
但不拷贝内容。
第 6章 数据库的辅助操作命令
MEMVAR,选用此项,将为每一个要拷贝字段建立
一同名, 同类型, 同宽度的内存变量,并把字段内容
拷贝过去 。
MEMVAR BLANK,此项将为每一个要拷贝字段
建立一同名, 同类型, 同宽度的内存变量,但并不把
字段内容拷贝过去 。
第 6章 数据库的辅助操作命令
4,变量内容送当前记录 ——GATHER命令
命令格式, GATHER FROM〈 数组名 〉 /MEMVAR
[ FIELDS〈 字段名表 〉 ] [ MEMO]
功能, 把数组或一组内存变量内容存入当前打开库
文件的当前记录 。
FIELDS〈 字段名表 〉, 若包含本子句,仅有 〈 字段
名表 〉 中的字段内容被数组或内存变量内容替代 ; 否则,
所有字段内容都被替代 。
第 6章 数据库的辅助操作命令
EMO,只有包含本子句后,才可以替代记忆型字段
内容 ; 否则,即使在上述 FIELDS的 〈 字段名表 〉 中包含
有某记忆型字段,也将被忽略 。
FROM〈 数组名 〉, 此项规定了替代数据来源的数
组 。
第 6章 数据库的辅助操作命令
例 4 现有一库文件, 职工 2.DBF”,与库文件, 职
工,DBF”同结构 。 若要把, 职工 2.DBF” 中姓名为王
文华的记录追加到, 职工,DBF”中,可用下列步骤实现,
USE 职工 2
LOCATE FOR 姓名 =“王文华,
SCATTER TO X
USE 职工
APPEND BLANK
GATHER FROM X
第 6章 数据库的辅助操作命令
5,当前打开库文件内容送数组 ——COPY TO
ARRAY命令
命令格式, COPY TO ARRAY〈 数组名 〉
[ FIELDS〈 字段名表 〉 ] [ 〈 范围 〉 ]
[ FOR〈 条件 1〉 ] [ WHILE〈 条件 2〉 ]
和 SCATTER不同,本命令将把范围内符合条件的
所有记录的有关字段内容全部送入数组 。
FIELDS〈 字段名表 〉, 有此项时,只有 〈 字段名表 〉
中规定的字段准备送入数组 ; 否则,所有字段都将送入
数组 。
第 6章 数据库的辅助操作命令
〈 数组名 〉, 规定了接收数据的数组。 若不存在,系统自
动建立之。
若只拷贝一条记录,用一维数组即可 ; 否则,用二维
数组 。 数组的第一下标 (数组行数 )决定了能存放的记录
数 ; 第二下标 (数组列数 )决定了能存放的字段数 。
拷贝结束后,数组中每一行为一条记录内容,每一列
为同一字段内容 。 库文件中相邻记录在数组中也相邻 。
第 6章 数据库的辅助操作命令
6,数组内容追加入库文件 ——APPEND FROM
ARRAY命令
命令格式, APPEND FROM ARRAY〈 数组名 〉
[ FOR〈 条件 〉 ] [ FIELDS〈 字段名表 〉 ]
本命令为当前打开库文件追加新记录 。 新记录数
据来源于命令中 〈 数组名 〉 规定的数组 。
FIELDS〈 字段名表 〉, 本命令只对新记录的数字
型 (浮点型 ),日期型, 字符型, 逻辑型字段赋值 。
若规定数组仅为 1维数组,则只能追加一条记录 ; 否
则,可追加多条记录 。
第 6章 数据库的辅助操作命令
FOR〈 条件 〉, 无此项,则为数据每一行追加一条
记录 ; 有此项,则为每一满足条件的行追加一条记录 。
各类型字段默认值如下,
第 6章 数据库的辅助操作命令
追加时,若某下标变量的类型与对应字段的类型不
同,则在有些情况下,系统将自动把数据转换成所需类
型 ; 但其它情况下,为该字段赋默认值 (对应下标变量内
容被忽略 )。 能自动转换的类型称为匹配类型,不能自
动转换的类型称为不匹配类型 。
第 6章 数据库的辅助操作命令
表 6 — 1 列出了匹配类型情况
第 6章 数据库的辅助操作命令
6.1.2 屏幕型内存变量
屏幕型内存变量 (S型 )用来暂存当前屏幕或窗口的
映像,它有特殊的建立和使用方法 。
1,建立屏幕型内存变量
命令格式, SAVE SCREEN
[ TO〈 内存变量名 〉 /〈 下标变量名 〉 ]
此命令把当前的屏幕映像 (或活动窗口映像 )存入屏
幕缓冲区 (无选择项时 ),或内存变量 (选择项为 TO〈 内存
变量名 〉 时 ),或下标变量 (选择项为 TO〈 下标变量名 〉
时 )。
第 6章 数据库的辅助操作命令
以屏幕 (活动窗口 )映像为其值的内存变量,下标
变量,在执行 LIST MEMORY命令时,以,S”数据类型
出现。
2,恢复屏幕
命令格式, RESTORE SCREEN[ FROM〈 S型内存
变量名 〉 /〈 S型下标变量名 〉 ]
本命令从缓冲区 (无选择项时 )或内存变量 (选择项
为 FROM〈 S型内存变量名 〉 )或下标变量 (选择项为
FROM〈 S型下标变量名 〉 )中取值并恢复屏幕 。
采用上述两条命令,可以方便地转换屏幕。
第 6章 数据库的辅助操作命令
6.2 有关变量的操作
6.2.1 清除变量命令 ;
1,清除部分或全部变量命令 ——RELEASE
此命令可分为四种格式 。
(1) 格式 1,RELEASE〈 变量名表 〉
此格式的 RELEASE命令将从内存中清除掉 〈 变量
名表 〉 中所列的全部内存变量和数组 。
(2) 格式 2,RELEASE ALL
采用此格式,RELEASE命令将从内存中清除所有内
存变量和数组 。
第 6章 数据库的辅助操作命令
(3) 格式 3,RELEASE ALL LIKE〈 通配符 〉
(4) 格式 4,RELEASE ALL EXCEPT〈 通配符 〉
例 1 清除内存中全部内存变量和数组 。
RELEASE ALL
例 2 清除变量名中第二个字符为 A,第三个字符为 C
的所有内存变量和数组 。
RELEASE ALL LIKE? AC *;
例 3 清除变量名的第三个字符不为 B的所有内存变
量和数组 。
RELEASE ALL EXCEPT B *
第 6章 数据库的辅助操作命令
2,清除全部变量命令 ——CLEAR MEMORY
该命令的功能与 RELEASE ALL 命令完全相同,清
除掉内存中全部内存变量和数组 。
第 6章 数据库的辅助操作命令
6.2.2 显示变量全部情况命令 —
—DISPLAY/LIST MEMORY
命令格式, DISPLAY/LIST MEMORY
[ LIKE〈 通配符 〉 ]
[ TO PRINTER/TO FILE〈 文件名 〉 ]
DISPLAY MEMORY和 LIST MEMORY两条命令的功
能基本相同,都显示, 当前内存中所有内存变量的名, 类
型和当前值,所有数组变量名及每一个数组的下标变量的
类型和当前值,正在使用的变量个数, 共占字节数, 还可
建立多少变量等 。 两命令的不同点在于, 当显示内容超过
一屏时,DISPLAY分页显示,LIST则滚动显示 。
第 6章 数据库的辅助操作命令
LIKE〈 通配符 〉, 选用本子句后,命令只显示变量
名与通配符相匹配的内存变量和数组 。
TO PRINTER,此子句将把命令的输出传给打印机 。
TO FILE〈 文件名 〉, 此子句把命令的输出传到磁
盘上指定的文件中 。
NOCONSOLE,有了此子句,命令的输出将不在屏
幕上显示。
第 6章 数据库的辅助操作命令
6.2.3 保存变量命令 ——SAVE TO
命令格式, SAVE TO〈 内存变量文件名 〉 /TO
MEMO〈 记忆型字段名 〉 [ ALL
[ LIKE/EXCEPT〈 通配符 〉 ]]
此命令把所有符合条件的内存变量, 数组的各种
信息全部存入到一个文件或一个记忆字段中去 。
TO〈 内存变量文件名 〉, 命令建立的文件,所有符
合条件的内存变量, 数组的各种信息, 变量名, 类型,
值等,全部存入该文件 。 文件的默认扩展名为,MEM。
第 6章 数据库的辅助操作命令
TO MEMO〈 记忆字段名 〉, 指定存储变量信息的
记忆型字段 。
ALL,把内存中所有内存变量, 数组都存储起来 。
ALL LIKE〈 通配符 〉, 存储变量名与通配符匹配
的内存变量, 数组 。 (不匹配的不存储 。 )
ALL EXCEPT〈 通配符 〉, 存储变量名与通配符不
匹配的内存变量, 数组 。 (匹配的不存储 。 )
第 6章 数据库的辅助操作命令
例 1 把内存中所有变量存入 NCBL.MEM文件 。
SAVE TO NCBL
例 2 把内存中变量名以 A开头的变量全部存入
NCBM.MEM文件 。
SAVE TO NCBM LIKE A*
例 3 把内存中变量名第三个字母不为 A的变量全部
存入 NCBN.MEM文件 。
SAVE TO NCBN EXCEPT A*
第 6章 数据库的辅助操作命令
6.2.4 从内存变量文件读回变量
已经存入内存变量文件中的变量,可以使用
RESTORE FROM命令读回内存 。 命令格式为
RESTORE FROM〈 内存变量文件名 〉 /FROM MEMO
〈 记忆型字段名 〉 [ADDITIVE]
〈 内存变量文件名 〉, 本子句规定从该文件中读回变
量,文件的默认扩展名为,MEM。
FROM MEMO〈 记忆型字段名 〉, 本子句规定从该
字段中读回变量 。
第 6章 数据库的辅助操作命令
ADDITIVE,无此项时,系统首先清除内存中现有的
所有内存变量和数组,然后再把命令中指定文件 (或字段 )
的所有内存变量和数组全部读入内存 有 ADDITIVE时,不
清除内存中现有内存变量和数组,把指定文件 (或字段 )的
所有内存变量和数组追加入内存 。 仅当新增加的内存变
量与内存中原有的内存变量同名时,才将内存中原有的同
名内存变量覆盖掉 。 命令执行完后,内存中将存在新加入
的全部变量及原内存中与新增变量不同名的那部分变量 。
当然,内存中的变量总数不能超过限定 。 因此,在追加过
程中,一旦总数达到规定,以下的变量就不再读入了 。
第 6章 数据库的辅助操作命令
例 1 把内存变量文件 NCBL.MEM中的变量读入
内存,不保留内存中原有变量 。
RESTORE FROM NCBL
例 2 把内存变量文件 NCBM.MEM中的变量读入
内存,保留内存中原有变量 。
RESTORE FROM NCBM ADDITIVE
第 6章 数据库的辅助操作命令
6.3 文件操作命令
6.3.1 文件的复制命令 ——COPY
把一个文件的全部或者部分内容转录到一个新的
将要建立的文件中,称为文件的复制 (或叫拷贝 )。 我们
称前者为源文件,新组成的文件叫目的文件 。
文件的复制是由 COPY命令实现的 。 根据用户的
不同需要,FoxPro提供了六种不同格式的 COPY命令 。
下面分别予以叙述 。
第 6章 数据库的辅助操作命令
1,任何类型文件的整体复制
为了把任何不同类型的文件整个复制到目的文件中去,
可用如下格式的文件复制命令,
COPY FILE〈 源文件名 〉 TO〈 目的文件名 〉
新组建的目的文件的结构和内容与源文件相同 。 使
用中还应注意,
① 源文件名与目的文件名必须带上各自的扩展名
② 被复制的源文件,必须是没有被打开的
第 6章 数据库的辅助操作命令
③ 若源文件是一个包含有记忆型字段或 /和结构化
复合索引文件的库文件,由于执行一次本命令只能复制
一个文件,所以必须再次使用本命令,以复制与该库文
件相应的记忆文件和结构化复合索引文件。
第 6章 数据库的辅助操作命令
例 1 把数据库文件, 职工,DBF”复制到名为
,ZGB.DBF”的新库文件中 。
COPY FILE 职工,DBF TO ZGB.DBF
COPY FILE 职工,FPT TO ZGB.FPT
第 6章 数据库的辅助操作命令
2,数据库文件部分内容的复制
如果想从当前打开库文件中提取部分记录的部分字
段来组建一个新库文件,可用如下格式的 COPY命令,
COPY TO〈 目的库文件名 〉
[ FIELDS〈 字段名表 〉 ] [ 〈 范围 〉 ]
[ FOR〈 条件 1〉 ]
[ WHILE〈 条件 2〉 ]
该命令把源数据库文件中指定范围内符合条件的记
录复制到目的库文件 。 目的库文件所包含的字段,由
FIELDS任选项确定 。 若无此任选项,则表示要复制源库
文件的全部字段 。 有关范围和条件任选项的规定同前 。
第 6章 数据库的辅助操作命令
使用此命令应该注意,源数据库文件必须是当前打
开的数据库文件 。 目的库文件名的扩展名若为,DBF,
则可省略 。 若在 FIELDS任选项中包含有记忆型字段,
则系统会在复制数据库文件的同时,生成相应的记忆型
文件,其内容也同时被复制 。
第 6章 数据库的辅助操作命令
例 2 把, 职工,DBF”库文件按原样复制到名为
,ZGB.DBF”的库文件中 。
USE 职工
COPY TO ZGB
由于, 职工,DBF”中包含有记忆型字段,故复制后
同时生成了, ZGB.DBF”和, ZGB.FPT” 两个文件 。
第 6章 数据库的辅助操作命令
3,数据库文件结构的复制
有时,我们想借用已经存在的库文件的某些字段结
构 (字段名,类型,长度 )来形成一个新的库文件,新文件
仅仅包含源文件的结构,而没有任何具体的记录,好像
一个空框子,可用如下格式的 COPY命令来实现,
COPY STRUCTURE TO〈 目的库文件名 〉
[ FIELDS〈 字段名表 〉 ]
此命令是按字段名清单所列的字段及其排列顺序,
把当前打开的库文件的结构复制到目的库文件中 。 若
没有 FIELDS任选项,则把当前库文件的全部字段的结
构,复制到目的库文件中 。
第 6章 数据库的辅助操作命令
例 3 前面已经利用, 职工,DBF”库文件复制了
,ZGB.DBF”库文件 。 下面用, ZGB.DBF” 中的职
工号, 姓名, 职称和工资等四个字段的结构,来组建
一个新的库文件, ZGJG.DBF” 的结构 。
USE ZGB
COPY STRUCTURE TO ZGJG FIELDS 职工号,
姓名,职称,工资
第 6章 数据库的辅助操作命令
6.3.2 其它的文件操作命令
1,列文件目录命令 ——DIR/DIRECTORY
为了查看磁盘上是否存在我们所关心的文件,可以
使用如下格式的命令,
DIR/DIRECTORY[ ON〈 驱动器号 〉 ]
[[ 〈 路径 〉 ] [ 〈 文件名 1〉 ]]
[ TO PRINTER/TO FILE〈 文件名 〉 ]
该命令显示在指定磁盘上要查找的全部或部分文件名。
ON〈 驱动器号 〉, 本子句规定了要显示文件目录
的驱动器 。 无此项时,则为默认盘 。
第 6章 数据库的辅助操作命令
[ 〈 路径 〉 ] [ 〈 文件名 1〉 ], 无此项时,显示全
部库文件信息,包括, 库文件名, 它的记录数, 最后更
新日期, 占用字节数, 总的库文件数, 磁盘还可使用
的自由空间 。
选择 〈 路径 〉 项,此项规定显示此路径下的文件。
第 6章 数据库的辅助操作命令
2,显示 ASCII码文件内容的命令 —— TYPE
命令格式, TYPE〈 文件名 1〉 [ AUTO]
[ WRAP] [ TO PRINTER/TO FILE〈 文件名 2〉 ]
本命令将显示 〈 文件名 1〉 的内容, 该文件只能
是由 ASCII码组成 。 这类文件有,高级语言的源程序,
FoxPro程序 ( 扩展名为,PRG的命令文件, 扩展名
为,TXT文本文件 )等 。 (FoxPro程序将在以后几章介
绍 。 )而像库文件,索引文件就不能用此命令显示内容 。
〈 文件名 1〉 必须带上其扩展名,且不能是打开文件 。
第 6章 数据库的辅助操作命令
TO PRINTER/TO FILE〈 文件名 2〉 项意义同前 。
NUMBER,有了此项,则输出文件内容时,自动在每
一行前加上一个行号 。
WRAP,选用本选择项后,若行尾的单词太长而本
行上排不下时,将自动转到下一行 。
AUTO,包含本项时,将置自动缩进为 ON。
第 6章 数据库的辅助操作命令
3,文件更名命令 ——RENAME
对于一个已经建立的文件,如果认为其文件名不合适,
可用 RENAME命令来更名 。
命令格式, RENAME〈 原文件名 〉 TO〈 新文件名 〉
该命令仅更改一个文件的文件名,而保留其结构和内容 。
〈 原文件名 〉 必须存在且未打开,〈 新文件名 〉 必须不存
在 。
两个文件名都应带上各自的扩展名 。 若缺省扩展名,则
默认为,DBF若文件名后只有句点,,”,则表示无扩展名 。 若
文件不在默认的驱动器或目录中,则需指明路径 。
第 6章 数据库的辅助操作命令
4,删除文件命令 ——ERASE,DELETE FILE
命令格式 1,ERASE〈 文件名 〉 /?
命令格式 2,DELETE FILE〈 文件名 〉 /?
两命令都删除磁盘上的指定文件 。 被删文件不能
为已打开的,并必须带上自己的扩展名 。 若文件不在默
认盘当前目录,必须带上路径 。
带,?”的删除命令,将在屏幕上打开一个对话框,
由用户选择一个文件进行删除 。
第 6章 数据库的辅助操作命令
5,关闭文件命令 ——CLOSE
命令格式, CLOSE〈 文件类型 〉
该命令根据指定的文件类型,关闭已打开的该类型
全部文件 。 文件类型有以下几种,
ALL 关闭所有类型的文件,不影响内存,回到 1号工
作区为当前工作区 (有关工作区概念见第 12章 )
DATABASE 关闭全部数据库文件
INDEX 关闭全部索引文件 (结构化索引文件除外 )
第 6章 数据库的辅助操作命令
PROCEDURE 关闭全部过程文件
FORMAT 关闭全部格式文件
ALTERNATE 关闭全部后备文件
关于过程文件,格式文件和后备文件将在以后的
有关各章介绍。
第 6章 数据库的辅助操作命令
例 1 关闭全部数据库文件 。
CLOSE DATABASE
例 2 关闭主程序所包含的全部过程文件 。
CLOSE PROCEDURE
第 6章 数据库的辅助操作命令
6,存盘命令 ——FLUSH
命令格式, FLUSH
执行本命令后,将在不关闭当前打开库文件的前提下,
把对当前库文件所做的修改全部写回磁盘的相应文件中 。
此命令既保证了数据的安全性,又提高了工作效率 。
第 6章 数据库的辅助操作命令
6.4 几个通用命令
本节再介绍几个经常用到的命令 。
1,系统初始化命令 ——CLEAR ALL
命令格式, CLEAR ALL
该命令关闭所有打开库文件及其有关文件 ——索引
文件, 记忆文件等,清除所有内存变量数组,清除所有
用户自定义光条菜单, 弹出式菜单和窗口,选择 1号工
作区为当前工作区 (见第 12章 )。 常用于应用程序主控
模块的开头 。
第 6章 数据库的辅助操作命令
2,清屏命令 ——CLEAR
命令格式, CLEAR
本命令将清除屏幕桌面或当前用户自定义窗口 。
该命令常用于应用程序某模块的开头,或在各输出
命令前使用。