2.4 表的基本操作
表的基本操作包括增加、浏览、删除、编辑和修改记录等。
2.4.1 输入记录
表结构建立后,可以往表中输入新记录。向表中输入记录有多种方法,常用的方法有:
- 在“浏览”或“编辑”窗口,通过菜单方式输入记录。
- 使用APPEND命令或INSERT命令追加记录,APPEND命令是在表的末尾追加记录,INSERT命令是在表的任意位置追加记录。
当建立表结构后,系统给出是否输入记录对框,也可以直接输入记录。
1.直接输入记录
【例4】在“学籍”表中输入表2-1所示的记录。
建立“学籍”表结构以后,在出现如图2-15所示的对话框中,单击“是”按钮,在出现的数据输入窗口中直接输入记录。
一般的操作步骤如下:
(1)在项目管理器中选择要添加记录的“学籍”表,单击“浏览”按钮,再单击“显示”菜单中的“追加方式”命令,在出现的浏览窗口中输入记录,如图2-18所示。
图2-18 添加记录
(2)光标定位在“姓名”字段处,输入数据,例如,输入“王晓飞”。如果输入数据的宽度与该字段的宽度相等,则输入后光标自动跳到下一个字段,否则需按“回车”键,光标才能移动到下一字段。对于暂时不需要输入数据的字段,可以直接按“回车”键跳过该字段。
依次输入各个字段的数据。当一条记录的最后一个字段输入结束后,光标移到下一记录的第1个字段处,可以继续输入数据。
2.输入通用型或备注型字段值
通用型字段主要用于存储Windows中的OLE对象,例如“学籍”表中的“照片”字段为通用型。OLE对象的输入方法与一般数据的输入方法不太一样,它主要通过插入对象的方法或通过剪贴板操作来插入所需的对象。通用型字段中没有任何信息时,显示“gen”字样,输入数据后,则显示“Gen”字样。通用型字段值的输入步骤如下:
(1)双击“gen”或将光标停在通用型字段处(如“照片”字段),按下“Ctrl+PgDn”组合键,出现通用型字段的编辑窗口,如图2-19所示。
图2-19 通用型字段编辑窗口
(2)单击“编辑”菜单中的“插入对象”命令,出现如图2-20所示的“插入对象”对话框。
图2-20 “插入对象”对话框
(3)单击“由文件创建”单选项,选择要插入或链接的文件,再单击“确定”按钮,将选择的.bmp格式照片文件插入到当前的编辑窗口,如图2-21所示。如果插入.jpg等格式图片,则在窗口中只显示图标和文件名。
图2-21 插入对象的编辑窗口
如果要删除此窗口中的对象,选择“编辑”菜单中的“清除”命令。
(4)单击通用型字段编辑窗口的“关闭”按钮,结束对通用型字段的编辑。此时可以观察到“gen”已经变成了“Gen”。
除此之外,利用Windows中的剪贴板,可以把在其他程序中复制的图片通过“编辑”菜单中的“粘贴”命令粘贴到通用型字段编辑窗口。
备注型字段数据与其他一般数据的输入方法也不一样,输入备注型数据的方法如下:
将光标停在备注型字段处(如“简历”字段),该字段显示为“memo”字样,双击“memo”或按下“Ctrl+PgDn”组合键,出现文字编辑窗口,在该窗口中输入相应的数据,如图2-22所示。输入备注型数据后,单击窗口右上角的“关闭”按钮返回。此时“memo”变为“Memo”字样,表示该字段中已经存在数据了。另外,在编辑过程中如果想放弃输入的内容,可以按下“Esc”键撤销刚才的操作。
图2-22 备注型字段编辑窗口
按照上述方法将表2-1中的10条记录全部输入。
3.添加新记录
在表操作的过程中,有时需要增加一些新的数据记录。下面以“学籍”表为例,介绍添加数据记录的方法。
【例5】往“学籍”表中添加新记录。
操作步骤如下:
(1)在项目管理器窗口中选择“学籍”表,单击“浏览”按钮,屏幕出现“浏览记录”窗口。
(2)单击“显示”菜单中的“追加方式”命令,在最后一条记录之后添加了一条空白记录,并将光标停在“学号”字段处等待输入数据。
当一个字段值输入结束后,按“Tab”键光标可移到下一个字段;一条记录输入结束后,按下箭头键可将光标定位到下一条记录。
同样,在“编辑”方式下也可以用“追加方式”命令来添加新记录。
使用APPEND命令也可以追加记录,其格式如下:
APPEND [BLANK] [FROM <表名>]
例如,在命令窗口键入命令:
APPEND
该命令打开编辑记录窗口,用户可以追加记录。
使用APPEND BLANK命令不打开编辑记录窗口,直接追加一条空白记录。
APPEND FROM命令将从其他表或文件中提取数据添加到当前表中。例如,打开“学籍”表,并在浏览窗口中显示记录。在命令窗口键入命令:
APPEND FROM XJ
则将“XJ”表(假设该表与“学籍”表有相同的结构)中的记录全部追加到当前的“学籍”表中。利用这种方法可以实现两个具有相同结构表记录的合并。
使用INSERT命令也可以插入记录,其格式如下:
INSERT [BEFORE] [BLANK]
例如,在命令窗口键入命令:
INSERT BLANK &&在当前记录之后插入一条空白记录 INSERT BEFORE BLANK &&在当前记录之前插入一条空白记录
2.4.2 浏览记录
在Visual FoxPro 6.0中,可以通过“浏览”窗口或“编辑”窗口浏览表中的记录。
下面以“学籍”表为例,分别介绍使用“浏览”窗口或“编辑”窗口浏览记录的两种方法。
1.在浏览窗口浏览记录
在项目管理器窗口“数据”选项卡的“学生”数据库中选择“学籍”表,单击“浏览”按钮,打开如图2-23所示的“浏览”记录窗口。
图2-23 “浏览”记录窗口
如果打开表时不是“浏览”方式,可以单击“显示”菜单中的“浏览”命令,切换为“浏览”方式。
使用USE命令打开表后,再键入BROWSE命令,即可打开如图2-23所示的“浏览”记录窗口。
2.在编辑窗口浏览记录
在如图2-23所示的“浏览”窗口中,选择“显示”菜单中的“编辑”命令,可将显示窗口切换为“编辑”方式,如图2-24所示。
图2-24 “编辑”记录窗口
使用USE命令打开表后,再键入EDIT命令,即可打开如图2-24所示的“编辑”记录窗口。
Visual FoxPro 6.0是以“浏览”方式还是以“编辑”方式打开表,取决于上次该表关闭时所处的状态是“浏览”还是“编辑”。如果上次关闭表的是在“浏览”方式,则下次浏览记录时还是在“浏览”方式。
2.4.3 记录指针的定位
在浏览表时,如果数据记录较多,利用键盘、滚动条将记录指针定位到要查看的记录会比较麻烦。Visual FoxPro提供的“转到记录”命令,可以实现记录指针的快速定位。
1.菜单定位记录
单击“表”菜单中的“转到记录”命令,弹出其子菜单,如图2-25所示。其中“定位”选项的含义是指针移到符合条件的第一个记录上。选择该项时出现“定位记录”对话框,如图2-26所示其中“作用范围”有4种选择。
- All:表示全部记录
- Next:表示从当前记录开始往下的N条记录(包括当前记录),记录个数N由右边方框中的数字来决定
- Record:表示指定的一条记录
- Rest:表示从当前记录开始到文件末尾的所有记录(包括当前记录)
图2-25 “转到记录”子菜单
图2-26 “定位记录”对话框
设置完毕,单击“定位”按钮,系统立即查找符合条件的第一条记录并把记录指针移到该记录上,可以用DISPLAY命令显示该记录。
2.命令定位记录
使用命令移动记录指针有绝对移动和相对移动两种方式。
(1)绝对移动
命令格式:
GO|GOTO <数值表达式> | TOP | BOTTOM
说明:
GO和GOTO命令的使用方法完全一样,是将记录指针指向指定的记录。格式中的TOP是将记录指针指向首条记录;BOTTOM选项是将记录指针指向最后一条记录。
选择<数值表达式>选项表示将记录指针指向与数值表达式值的整数部分相等的记录号上。例如:
GO BOTTOM &&记录指针指向末记录 GOTO 3 &&记录指针指向第3条记录 DISPLAY &&显示当前记录
(2)相对移动命令格式:
SKIP [<数值表达式>]
说明:
将记录指针从当前位置往上或往下移动。选择<数值表达式>选项,先计算<数值表达式>的值,取其整数,如果该整数为正数,表示将指针下移整数条记录;如果该整数为负数,表示将指针上移整数条记录。如果省略该项,指针下移一条记录。
GO TOP &&记录指针指向首记录 SKIP 5 &&记录指针下移5条记录,指向第6条记录 SKIP -2 &&记录指针上移2条记录,指向第4条记录
记录指针的绝对移动和相对移动命令常用在数据库程序设计中。
另外,在表操作时,经常用到测试记录函数,如EOF()、BOF()、RECNO()函数等。当指针指向文件头(首记录之前),BOF()的值为.T.,否则为.F.;当指针指向文件尾(末记录之后),EOF()的值为.T.,否则为.F.。
3.定位查找记录
使用LOCATE命令,可以在表中顺序检索满足条件的记录。LOCATE命令的格式如下:
LOCATE [<范围>] FOR <条件>
说明:
该命令在当前表中查找满足条件的第一条记录。省略<范围>选项,默认为All。例如,有如下操作:
USE 学籍 &&打开“学籍”表 LOCATE ALL FOR 性别= "女"
如图2-27所示,执行该命令后,将记录指针指向满足条件的第一条记录上,但不显示记录。单击“显示”菜单中的“浏览”按钮示,记录指针定位在第3条记录上,如图2-28所示。
图2-27 “命令”窗口
图2-28 定位记录
如果没找到符合条件的记录,则记录指针的位置与<范围>有关系,若范围是ALL或REST,则记录指针指向表的结束标记;若范围是NEXT n,则记录指针指向范围内的最后一条记录。
如果表中有多条符合条件的记录,若要继续查找记录,需要CONTINUE命令配合使用,系统在指定的范围内继续查找满足条件的记录。可以反复使用CONTINUE命令,直到查找完毕。接上面的例子,继续输入命令:
CONTINUE
则记录指针定位到第5条记录上。
如果要对查找到的记录进行编辑修改等操作,应该使用记录定位操作,将记录指针定位到符合查找条件的记录上再进行修改。
2.4.4 编辑记录
1.逐条修改记录
修改记录时,可以通过“浏览”记录窗口来进行。具体操作步骤如下:
(1)打开如图2-23所示的“浏览”记录窗口。
(2)修改字段值。
- 对于字符型、数值型、逻辑型、日期型等字段,可以进行如下操作:
- 插入新数据:单击要插入数据的字段,用左右箭头键移动插入点至适当的位置,输入新数据。
- 修改数据:将插入点置于要修改的字段中,或用鼠标拖动的方式选定要修改的数据,输入新的数据,删除、覆盖旧的数据。
- 另外,也可以通过Tab键或方向键将光标定位到要修改的字段,输入新的数据替换旧的数据。
- 对于通用型字段的修改,可参考2.4.1部分的内容。在浏览窗口中双击“Gen”处,出现通用型字段编辑窗口,在该窗口中可以清除已经插入的对象,也可以重新嵌入或链接新的OLE对象。
- 对于备注型字段,在浏览窗口中双击“Memo”,出现备注型字段的编辑窗口,在该窗口中修改数据。修改结束后单击“关闭”按钮或按“Esc”键放弃所作的修改。
(3)修改操作结束后,单击浏览数据窗口右上角的“关闭”按钮。
2.成批修改记录
除了在“浏览”或“编辑”窗口逐条修改记录外,还可以成批修改记录。
【例6】有“成绩”表文件,如图2-29所示,各门课程及总分、平均分字段为数值型字段,计算所有记录的总分,并将计算结果填入总分字段。
图2-29 “成绩”表记录
操作步骤如下:
(1)在“浏览”记录窗口选择“表”菜单中的“替换字段”命令出现“替换字段”对话框。在“字段”框中选择“总分”字段,在“替换为”框中键入(或在打开的表达式生成器中输入):语文+数学+英语+网络,在“作用范围”框中选择“ALL”,如图2-30所示。
图2-30 “替换字段”对话框
(2)单击“替换”按钮,系统自动对全部记录的总分字段值进行替换操作。
在“浏览”窗口可以查看替换结果,“总分”字段值已被替换,如图2-31所示。
图2-31 替换后的“成绩”表
替换操作结束后,在命令窗口中自动显示相应的REPLACE操作命令:
REPLACE ALL 总分 WITH 语文+数学+英语+网络
如果将上述命令改写为
REPLACE 总分 WITH 语文+数学+英语+网络
则只对当前记录进行操作。
REPLACE ALL 平均分 WITH 总分/4 &&对全部记录的“平均分”字段值进行替换操作
完成成批替换操作后的结果如图2-32所示。
图2-32 成批替换操作后的“成绩”表
在进行数据替换操作时,应注意表达式值的数据类型必须和替换字段的类型一致,否则系统给出出错信息。
3.删除与恢复记录
如果表中存在不需要的记录,可以利用Visual FoxPro提供的删除记录功能予以删除。
在Visual FoxPro 6.0中提供了逻辑删除和物理删除两种方式。逻辑删除是为了防止误删除操作,只在要删除的记录前做一个黑色删除标记,加删除标记的记录虽然不参与一些操作,但仍储存在表内,需要时还可将该部分记录恢复。物理删除是将记录真正地删除掉,表中不再保留这些记录,且无法恢复。
(1)逻辑删除记录
【例7】直接从“成绩”表中删除部分记录。
操作步骤如下:
① 在项目管理器的“数据”选项卡中选择“成绩”表,单击“浏览”按钮。
② 在“浏览”窗口中定位要删除的记录,如第2条记录。
③ 单击该记录左边的空白方框,加一个黑色的删除标记。用此方法可给多条记录加上逻辑删除标记,结果如图2-33所示。
图2-33 添加逻辑删除标记
在表“浏览”窗口中,如果要删除一组记录,或删除符合条件的多条记录时,可以利用“表”菜单中的“删除记录”命令来实现。
【例8】在“成绩”表中删除“平均分”小于70分的所有记录。
操作步骤如下:
① 在“成绩”表浏览窗口中,单击“表”菜单中的“删除记录”命令,出现“删除”记录对话框,在“作用范围”下拉列表框中选择“All”选项。
② 在“For”文本框中设定删除条件,删除在指定范围内满足条件的所有记录。例如,输入条件:平均分<70,如图2-34所示。
图2-34 “删除”记录对话框
③ 单击“删除”按钮,则系统自动删除符合条件的记录。在“成绩”表中有两条符合条件的记录加上了逻辑删除标记,结果如图2-35所示。
图2-35 删除符合条件的记录
“While”选项也是用来设定删除条件的,但它只删除指定范围内连续满足此条件的记录。也就是说,当条件为真时,删除操作才进行,如果条件为假,便终止删除操作而不考虑其他满足条件的记录。“While”选项使用得较少。
逻辑删除记录的命令格式为:
DELETE[<范围>][FOR<条件>][WHILE<条件>]
说明:
如果省略<范围>和<条件>选项,则删除的是当前记录。
上例删除记录操作对应的命令为:
DELETE ALL FOR 平均分<70
记录被加上删除标记之后,不再参与表的操作,但是仍然保留在表中,在必要时,可将这部分记录恢复。
(2)恢复删除记录
加了逻辑删除标记的记录实际上并没被真正删除,因此只需将删除标记取消,就可以恢复。
在表“浏览”窗口中,用鼠标单击记录的删除标记,即可取消删除标记,黑色方框消失,表示从表中已恢复记录。
要恢复删除的一组记录,或者恢复删除符合条件的多条记录时,可以使用“表”菜单中的“恢复记录”命令来实现。操作方法如下:
单击“表”菜单中的“恢复记录”命令,出现“恢复记录”对话框。该对话框的设置方法与“删除”对话框完全相同,输入设置条件后单击“恢复记录”按钮。
恢复被逻辑删除记录的命令格式为:
RECALL [<范围>] [FOR <条件>] [WHILE <条件>]
说明:
如果省略<范围>和<条件>选项,则恢复当前记录。
例如,在“成绩”表中恢复删除平均分在60分以上的记录,命令如下:
RECALL ALL 平均分>60
(3)物理删除记录
当加逻辑删除标记的记录不再需要时,为了提高数据库的使用效率,可以将这些记录进行物理删除,从表中彻底移去。单击“表”菜单中“彻底删除”命令,出现如图2-36所示的删除提示对话框,单击“是”按钮,即可对逻辑记录进行物理删除。通过浏览操作可以观察删除操作后的结果。
图2-36 删除提示对话框
在命令窗口中键入PACK命令也可对表中带删除标记的记录进行物理删除。
另外,使用ZAP命令能将当前表中的全部记录删除,而无论记录是否有删除标记,全部记录都被清除,该表只保留表结构。
试一试
1.在“学生”数据库中建立“教师”表,结构见表2-6。
表2-6 “教师”表字段及其属性
2.结合自己学校的实际,分别在“部门”表和“教师”表中输入记录,每个表至少有7条记录。
知识链接
EOF()、BOF()、RECNO()函数
在表操作时,经常用到EOF()、BOF()、RECNO()等当前记录测试函数。当指针指向表文件头(首记录之前)时,BOF()的值为.T.,否则为.F.;当指针指向表文件尾(末记录之后)时,EOF()的值为.T.,否则为.F.;RECNO()函数则给出当前记录的记录号。
例如,“学籍”表中有10条记录,有如下操作,理解操作后的结果。
USE 学籍 &&打开“学籍”表,记录指针指向首记录 ? RECNO(),BOF() &&“?”为显示命令,测试记录号和文件头函数的值 1 .F. SKIP -1 &&指针上移到文件头 ? RECNO(),BOF(),EOF() &&测试记录号、文件头、文件尾函数的值 1 .T. .F. GO BOTTOM &&指针指向最后一条记录 ? EOF(),RECNO() &&测试文件尾和记录号函数的值 .F. 10 SKIP &&指针下移到文件尾 ? RECNO(),EOF() 11 .T. SKIP -3 &&指针上移3条记录 ? RECNO() 8
除了上述3个函数外,常用的测试函数还有查找是否成功测试函数FOUND(),记录个数测试函数RECCOUNT(),文件是否存在测试函数FILE()。
这些函数常用在Visual FoxPro 6.0应用程序中。