Visual FoxPro程序设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.9 VFP表的修改

2.9.1 表结构的修改

用户可以利用“表设计器”修改表的结构。需要注意的是,只有以独占方式打开的表才可以被修改。表结构的修改包括:增加或删除字段,修改字段名、类型、宽度等,还可以增加、删除或修改索引标识等。

改变表结构时,系统会自动产生一个扩展名为.BAK的备份文件。如果表中含有备注型或通用型字段,也会同时生成对应备注文件(.FPT)的备份文件(.TBK)。当表结构的修改发生失误时,将备份文件.BAK和.TBK同时改成相对应的.DBF和.FPT文件,即可恢复原来的表结构。打开“表设计器”的方式有两种。

1.菜单方式

(1)以独占方式打开要修改结构的表。

(2)打开“显示”菜单,选择“表设计器”命令,弹出“表设计器”对话框进行修改即可。

(3)在“表设计器”对话框中,单击“确定”按钮,弹出如图2.25所示的对话框,单击“是”按钮。

图2.25 结构修改提示信息对话框

2.命令方式

【命令格式】 MODIFY STRUCTURE

【功能】 打开“表设计器”对话框,修改当前表的结构。

【例2.28】 用命令修改表teacher.dbf的结构。

USE teacher
MODIFY STRUCTURE

2.9.2 表记录的修改

1.在“浏览”窗口中修改记录

以独占方式打开表,在“浏览”窗口中,可对表中的记录直接进行修改,用户还可以拖动鼠标调整表中字段的显示顺序和显示的宽度。修改完毕,直接关闭“浏览”窗口或按Ctrl+W组合键,保存所做的修改。

2.EDIT/CHANG命令

【命令格式】 EDIT/CHANG [<范围>] [FIELDS<字段名表>] [FOR <条件表达式>]

【功能】 修改满足条件的记录中指定字段的数值。

【例2.29】 用EDIT命令修改表teacher.dbf中的记录。

USE teacher
EDIT 2          && 直接定位到第2条记录进行修改(可以修改所有记录)
EDIT FIELDS 姓名,职称   && 只显示姓名、职称两个字段供修改
EDIT FOR NOT 婚否     && 只修改所有未婚教师的记录

3.REPLACE命令

【命令格式】 REPLACE [<范围>] [<字段名1> WITH <表达式1>] [<字段名2> WITH <表达式2>]…[<字段名n> WITH <表达式n>] [FOR <条件表达式>]

【功能】 用表达式的值替换指定字段的值,即用表达式1的值替换字段名1原来的值;用表达式2的值替换字段名2原来的值;……

【例2.30】 将表teacher.dbf中所有教师的工资增加500元。

USE teacher
REPLACE ALL 月收入 WITH 月收入+500
BROWSE

显示结果如图2.26所示。

图2.26 【例2.30】显示结果

【例2.31】 将表teacher.dbf中教师景秀丽的职称由“讲师”改为“副教授”。

USE teacher
REPLACE 职称 WITH "副教授" FOR 姓名="景秀丽"
BROWSE

显示结果如图2.27所示。

【例 2.32】 给表teacher.dbf增加一条记录,各字段的值依次是:“石磊”、“男”、“10/30/ 63”、“已婚”、“计算机”、“教授”、“1800元”。

USE teacher
APPEND BLANK
REPLACE 姓名 WITH "石磊",性别 WITH "男",出生年月 WITH {^1963/10/30},婚否
WITH .t. ,;
教研室 WITH "计算机",职称 WITH "教授",月收入 WITH 1800
BROWSE LAST

图2.27 【例2.31】显示结果

显示结果如图2.28所示。

图2.28 【例2.32】显示结果

2.9.3 记录与数组间的数据传送

在VFP中,数据表与数组之间进行数据交换是应用程序设计中经常使用的一种操作,具有传送数据多、速度快和使用方便等优点。数据表与数组之间进行数据交换可以使用SCATTER和GATHER命令。

1.将当前记录复制到数组或内存变量中

【命令格式】 SCATTER [FIELDS<字段名表>][MEMO] [BLANK]TO [<数组名>]│[MEMVAR]

【功能】 将当前记录的字段值按<字段名表>顺序依次送入数组元素或一组内存变量中。

【说明】

(1)若使用FIELDS子句,则只传送字段名表中的字段,否则将传送所有字段(备注型字段除外);若传送备注型字段,还需使用MEMO选项。

(2)使用TO <数组名>子句能将数据复制到<数组名>所示的数组元素中。

(3)使用MEMVAR可将数据复制到一组变量名与字段名相同的内存变量中。

(4)如果使用BLANK,则将创建一组与各字段数据类型相同的空内存变量。

【例2.33】 SCATTER命令使用示例。

USE teacher
SCATTER BLANK TO a
GO 4
SCATTER TO b
GO 5
SCATTER MEMVAR
DISPLAY MEMORY

显示结果如下:

2.将数组或内存变量中的数据复制到当前记录

【命令格式】 GATHER FROM <数组名>│MEMVAR [FIELDS<字段名表>][MEMO]

【功能】 将数组或内存变量中的数据依次复制到当前记录,以替换相应的字段值。

【说明】

(1)修改记录前需确定记录指针的位置。

(2)若使用FIELDS子句,则只有<字段名表>中的字段才会被数组元素值替代;若传送备注型字段,还需使用MEMO选项。

(3)内存变量将传送给与它同名的内存变量;若某字段无同名的内存变量,则不对该字段进行数据替换。

(4)若数组元素多于字段数,则多出的数组元素不传送;若数组元素少于字段数,则多出的字段值不会改变。

【例2.34】 GATHER FROM命令使用示例。

USE teacher
COPY STRUCTURE TO teacher5
USE teacher5
APPEND BLANK
GATHER FROM a
APPEND BLANK
GATHER FROM b
APPEND BLANK
GATHER memvar
BROWSE

显示结果如图2.29所示。

图2.29 【例2.34】显示结果