4.3 表的基本操作

表一旦建立起来,自然需要以它进行添加、删除、修改等相应的操作。

1.使用浏览器操作表

使用Browse浏览器可以很方便地对表中的数据进行操作,打开浏览器的方法有多种,常用的方法有:

①在项目管理器中将数据库展开至表,并选择要操作的表,然后单击“浏览”按钮。

②在数据库设计器中选择要操作的表,然后单击“数据库”→“浏览”命令;或者右击要操作的表,然后从快捷菜单中选择“浏览”命令。

③在命令方式下,首先用USE命令打开要操作的表,然后输入BROWSE命令。

以上各种方式打开的BROWSE浏览器的界面如图4-21所示,在该界面中可以浏览、添加、删除和修改记录等。

2.增加记录

(1)菜单方式

①添加一条空记录。

a.单击“文件”→“打开”命令或单击“常用”工具栏中的“打开”按钮,在打开的对话框中选择要打开的表。

b.单击“显示”→“浏览”命令,打开浏览窗口。

图4-21 浏览窗口

c.单击“表”→“追加新记录”命令,使浏览窗口的记录指针定位到最后一条记录的下一行,然后输入新增记录各字段的字段值。

②添加若干条记录。打开表的浏览窗口后,单击“显示”→“追加新记录”命令,使记录指针指向表中最后一条记录的下一行,然后在表尾添加若干条记录。

③将其他表中的记录添加到当前表。打开表浏览窗口后,单击“表”→“追加记录”命令,弹出“追加来源”对话框,如图4-22所示。

在“类型”下拉列表中可以选择要添加到当前表的记录所在文件的文件类型,在“来源于”文本框中可以直接输入来源文件的路径和名称,也可单击其后的按钮,在弹出的“打开”对话框中选择来源文件的路径和名称。

如果需要从来源文件中选择满足条件的记录或指定字段,可先选择来源文件,然后在“追加来源”对话框中单击“选项”按钮,打开如图4-23所示的“追加来源选项”对话框。单击“字段”按钮,打开“字段选择器”对话框,从中可以选择要添加的字段名。也可以单击For按钮,打开“表达式生成器”对话框,从中设置要满足的条件。

图4-22 “追加来源”对话框

图4-23 “追加来源选项”对话框

(2)命令方式

先打开要添加记录的表,然后在命令窗口内输入相应的命令。

①添加一条空记录。添加一条空记录的命令格式为APPEND BLANK。

②添加若干条记录。添加若干条记录的命令格式为APPEND。

③在表的任意位置插入记录的命令格式为insert[before][blank]。

如果要在当前选中的记录之前插入一条新记录,就在insert后加上before,否则就会在当前记录之后插入新记录。

blank在指定的记录之前或之后插入一条空白记录。

注意:如果表是建立了主索引或候选索引,则不能用以上的APPEND或INSERT命令插入记录,而必须用SQL的命令语句,使用命令操作之前,必须要先打开要操作的表。

3.删除记录

(1)逻辑删除记录命令DELETE

格式:

DELETE [Scope] [FOR条件表达式1]

功能:

逻辑删除表中的记录即对记录打上删除标记。如果设有设置“SET DELETE ON”语句,Visual FoxPro的数据操作会忽略所有带删除标记的记录。

例如,对表文件“学生信息”.dbf的年龄为20周岁的记录进行逻辑删除,命令操作如下:

USE学生信息

DELETE ALL FOR年龄=20

BROW

逻辑删除后,再进行浏览显示,会看到相关记录的前面加上了一个黑框。若使用LIST或DISPLAY命令显示记录,会看到记录前面加上了“*”号。

(2)恢复逻辑删除记录命令RECALL

格式:

RECALL [Scope] [FOR条件表达式1]

功能:恢复逻辑删除,即将删除标记除去。

例如,对刚才逻辑删除表文件“学生信息”的年龄为20周岁的记录进行恢复操作,命令操作如下:

USE学生信息

RECALL ALL

BROW

恢复后,删除标记已经去掉。

(3)物理删除记录命令PACK和ZAP

物理删除就是真实地删除表中记录,即彻底删除。

PACK只删除前面有黑块的记录行,并且不可能再恢复。

ZAP命令能够将表的全部记录一次性物理删除(不管是否有删除标记)。在命令窗口输入并执行该命令即可。该命令只是删除全部记录,并没有删除表,执行完该命令后表结构依然存在。由于删除记录后不能直接恢复,因此在打开表文件后,慎用该命令。

4.修改记录

表文件的记录输入之后,可以对单个记录进行修改。

(1)单个记录的修改

对单个记录修改,可打开浏览窗口或使用BROWSE、EDIT、CHANGE命令,在打开的编辑窗口对记录进行修改。

例如,修改“学生信息”表中的第5号记录,在命令窗口输入如下命令:

USE学生信息  &&打开表

GOTO 5  &&定位5号记录

CHANGE  &&修改命令,打开编辑记录的窗口

完成修改后,按【Ctrl+W】组合键存盘。

(2)记录的更新

格式:

REPLACE字段名1 WITH表达式1 [ADDITIVE]

[,字段名2 WITH表达式2 [ADDITIVE]] … [Scope]

[FOR条件表达式1] [WHILE条件表达式2] [IN工作区号|表的别名]

[NOOPTIMIZE]

说明:

REPLACE:记录更新命令。

字段名WITH表达式:用“表达式”替换“字段名”。

ADDITIVE:将备注字段替代内容加到备注字段后面。仅对备注字段有效。

Scope:指定替换内容的记录范围。Scope的子句有:ALL,NEXT n,RECORD n,REST。默认范围是当前记录。

FOR条件表达式1:指定对符合条件的记录进行更新。

WHILE条件表达式2:判断当前记录是否符合条件,条件为真(.T.)时更新。

IN工作区号:指定需更新的表所在工作区。

NOOPTIMIZE:关闭Rushmore优化。

例如,更新“学生成绩.dbf”中学号为“20151005”的各科成绩,在命令窗口操作或应用程序文件操作,命令或代码如下:

USE学生成绩

REPLACE FOR学号=" 20151005";

操作系统WITH 88,;

大学英语WITH 90,;

软件工程WITH 86,;

体育WITH 99,;

数字电路WITH 91

(3)记录的成批更新

应用REPLACE命令可对记录进行一次性的成批更新。更新时需指定操作的记录范围。

例如,更新“学生信息.dbf”中所有记录的年龄,将各年龄值加1。命令操作如下:

USE学生信息

REPLACE ALL年龄WITH年龄+1

BROWSE

例如,修改“学生成绩.dbf”的结构,添加“平均成绩”字段。然后计算每个学生的各科平均成绩。命令操作如下:

USE学生成绩

REPLACE ALL平均成绩WITH;

(操作系统+大学英语+软件工程+数字电路+体育)/5

5.显示记录

(1)浏览显示命令BROWSE

格式:

BROWSE [FIELDS字段名列表] [FONT字体名[,字体大小]] [STYLE字型符]

[FOR条件表达式1 [REST]] [FORMAT] [FREEZE字段名]

功能:

BROWSE:浏览显示记录命令。

FIELDS字段名列表:指定显示在浏览窗口中的字段。这些字段按字段名列表指定的顺序显示。字段列表可以包括其他相关表的字段。包括其他相关表字段时,应在字段名前面放一个句号及相关表的别名。

FONT字体名[,字体大小]:指定浏览窗口的字体及字体大小。

STYLE字形符:指定浏览窗口的字形。常用的字形符包括B—粗体;I—斜体;N—常规;O—轮廓线;Q—不透明;S—阴影;T—透明;U—下画线。

FOR条件表达式1:指定一个条件,只有条件表达式为真的记录才显示于浏览窗口。包括FOR子句可使记录指针移向符合该条件的第一个记录。

REST:防止在FOR子句打开浏览窗口时,记录指针从当前位置移向文件顶部。

FORMAT:使用格式文件来控制浏览窗口显示和输入数据的格式。

FREEZE字段名:允许在浏览窗口只修改一个字段,使用字段名指定该字段,其他字段可显示但不能编辑。

例如,显示表“学生信息.dbf”中的男生的“学号”“姓名”“性别”“籍贯”等内容,要求显示字体为“楷体”、字号“12”,字形为“常规、粗体”;分两个区显示时,将右区设为“编辑”方式。

例如,在命令窗口输入下列命令或编辑为一个程序文件执行。

USE学生信息

BROWSE FIELDS学号,姓名,性别,籍贯;

FONT '楷体_GB2312',12;

STYLE 'NB';

FOR性别='男' ;

REDIT

显示效果如图4-24所示。

图4-24 用BROWSE命令打开显示窗口

(2)显示记录命令DISPLAY|LIST

格式:

DISPLAY | LiST [[FIELDS]字段名列表] [Scope] [FOR条件表达式1] [WHILE条件表达式2][OFF] [NOCONSOLE] [NOOPTIMIZE] [TO PRINTER [PROMPT] | TO FILE文本文件名[ADDITIVE]]

功能:

DISPLAY:显示命令,在使用该命令时,若不指定范围,则默认显示当前记录(当前记录指针指向的记录),或指定显示范围为“ALL”,则显示内容充满Visual Foxpro主窗口即停止,按【Enter】后继续显示。

LiST:显示记录命令,该命令默认范围是“ALL”。执行命令后,可能出现前面记录的看不到的情况。

FIELDS字段名列表:指定显示字段。这些字段按字段名列表指定的顺序显示。

Scope:指定要显示的记录范围。范围子句及功能如下:

①ALL:全部记录。如果使用LIST命令,该参数可省略。

②RECORD n:显示第n号记录。

③NEXT n:显示当前记录及以后的n个记录。

④REST:显示当前记录及后面的所有记录。

FOR条件表达式1:指定一个条件,只有条件表达式为真的记录才显示。包括FOR子句可使记录指针移向符合该条件的第一个记录。

OFF:不显示记录号。

NOCONSOLE :不向Visual FoxPro主窗口或用户自定义窗口输出。

NOOPTIMIZE:使DISPLAY的Rushmore优化失效。

TO PRINTER [PROMPT]:将显示结果定向输出到打印机。

TO FILE文本文件名[ADDITIVE]:将显示结果定向输出到文本文件,加上参数ADDITIVE可使命令所产生的文本添加到指定文件内容的后面。

注意:子句FOR和WHILE的功能相近但不完全相同。应用FOR子句,凡是符合条件的记录都能显示。应用WHILE子句时,判断当前记录是否符合条件,若条件为假则中止条件的过滤,停止命令执行;若条件为真则会显示当前记录,然后继续操作。

例如,用LIST命令或DISPLAY命令显示表“学生信息.dbf”的内容。在命令窗口输入并执行下列命令:

6.查询定位

(1)记录号

为表文件添加记录时,系统会自动为记录加上编号,依次为1号、2号…。显示表文件内容时记录号会显示出来。通常,将1号记录称为“首记录”,将最后一个记录称为“尾记录”。物理删除记录后,系统会对记录编号重新整理。打开表文件时,系统的记录指针指向首记录。

获取当前记录号可用函数RECNO(),显示记录号的命令如下:

?RECNO()

例如,打开表文件“学生信息.dbf”,用Display命令显示所有记录,获取当前记录号。命令操作如下:

(2)移动记录指针

①记录指针的绝对移动。将记录指针定位于某一记录号,即指针的绝对移动命令如下:

GO|GOTO n

其中:n表示某一记录号。

例如,打开表文件“学生信息.dbf”,将记录指针定位于7号记录。命令操作如下:

USE学生信息

GO 7  &&将记录指针定位于10号记录

?RECNO()  &&显示当前记录号,结果为7

在使用GO或GOTO命令定位记录指针时,若操作的记录号大于实际的最大记录号,系统会显示信息提示用户,如图4-25所示。

②指针指向首记录与尾记录。直接将记录指针定位于首记录的命令是:

GO|GOTO TOP

图4-25 操作已超过记录范围提示信息

而直接将记录指针定位于尾记录的命令是:

GO|GOTO BOTTOM

例如,在打开表文件“学生信息.dbf”以后,将记录依次指针定位于首记录和尾记录。命令操作如下:

③记录指针的相对移动。记录指针的相对移动是指从当前记录向前或向后移动记录指针。命令如下:

SKIP N

其中:N为相对移动的记录数目。N为正数表示向后移动,N为负数表示向前移动。

例如,打开表文件“学生信息.dbf”,进行记录指针相对移动操作。命令操作如下:

④文件头与文件尾。文件头是表文件的开始位置,文件尾是表文件的结束位置。将记录指针从首记录位置再向前移动1个位置即可定位于文件头;将记录指针从尾记录位置再向后移动1个位置即可定位于文件尾。

测试当前记录指针是否定位于文件头的函数为BOF(),操作命令如下:

?BOF()

若该函数值为.T.(真),表示指针已定位于文件头。

测试当前记录指针是否定位于文件尾的函数为EOF(),操作命令如下:

?EOF()

若该函数值为.T.(真),表示指针已定位于文件尾。

例如,在打开表文件“学生信息.dbf”后,将记录指针定位于文件头与文件尾。命令操作如下:

(3)记录的顺序查找

记录的顺序查找是指先找到指定的第一个记录(将记录指针定位于该记录),然后再找第二个、第三个…。

①查找指定的第一个记录的命令。

格式:

LOCATE范围[FOR <条件>] [WHILE<条件>]

其中:范围是指操作的记录范围子句,FOR与WHILE子句用于指定查找条件。

②继续查找命令。

格式:

CONTINUE

例如,在打开表文件“学生信息.dbf”后,查找籍贯为“黑龙江”的学生,然后显示记录。显示的记录如图4-26所示。

LOCATE FOR籍贯='黑龙江'  &&查找第一个符合条件的记录

DISPLAY  &&显示当前记录

CONTINUE  &&查找第二个符合条件的记录

DISPLAY  &&显示当前记录

CONTINUE  &&查找第三个符合条件的记录

DISPLAY  &&显示当前记录

图4-26 显示的记录

(4)记录的按条件过滤查找

记录的按条件过滤查找是指先用SET FILTER TO命令进行过滤,确定符合条件的记录,然后显示这些符合条件的记录。

命令:

SET FILTER TO <条件>

【例4】在打开表文件“学生信息.dbf”后,通过过滤选择“陈”姓的记录,然后显示。命令操作如下:

SET FILTER TO姓名="陈"  &&过滤选择“陈”姓的记录

BROWSE  &&显示查找结果

显示的查找结果如图4-27所示。

图4-27 过滤后记录的显示