You are on page 1of 248

等级考试学习笔记——二级 Visual FoxPro

李琳 主编

人 民 邮 电 出 版 社
图书在版编目(CIP)数据

等级考试学习笔记——二级 Visual FoxPro/李琳主编. —北京:人民邮电出版社,2005.3


(全国计算机等级考试辅导丛书)
ISBN 7-115-13144-9

Ⅰ. 等… Ⅱ. 李… Ⅲ. ①电子计算机—水平考试—自学参考资料②关系数据库—数据库
管理系统,Visual Foxpro—水平考试—自学参考资料 Ⅳ. TP3

中国版本图书馆 CIP 数据核字(2005)第 014083 号

内 容 提 要

本书本着精讲、精解、精练的原则,对全国计算机等级考试二级 Visual FoxPro 的考试内容进行了全面


的复习。主要内容包括考试指南,知识点分析,历年真题解析,3 套全真预测试题,以及 2004 年 4 月和 9
月的考试题。
本书采用学习笔记的形式帮助考生进行复习,每一章先给出知识结构图,然后将大纲中的知识点通过问
答的形式进行归纳讲解,在每小节后精选了例题,给出了详细的分析解答,每章的最后对本章的重点难点进
行了总结,并给出练习题和答案。另外,本书配有光盘,光盘中附有 10 套全真预测上机试题。
本书可作为参加全国计算机等级考试——二级 Vsiual FoxPro 考试的复习参考书,也可供 Visual FoxPro
的初学者学习参考。

全国计算机等级考试辅导丛书
等级考试学习笔记——二级 Visual FoxPro
u 主 编 李 琳
责任编辑 王文娟

u 人民邮电出版社出版发行 北京市崇文区夕照寺街 14 号

邮编 100061 电子函件 315@ptpress.com.cn


网址 http://www.ptpress.com.cn
读者热线 010-67132692

北京顺义振华印刷厂印刷
新华书店总店北京发行所经销

u 开本:787×1092 1/16
印张:15.5

字数:379 千字 2005 年 3 月第 1 版
印数:1 – 5 000 册 2005 年 3 月北京第 1 次印刷

ISBN 7-115-13144-9/TP·4474

定价:29.00 元(附光盘)
本书如有印装质量问题,请与本社联系 电话:
(010)67129223
前 言
全国计算机等级考试是经原国家教育委员会批准,由教育部考试中心主办,用于考查应
试人员计算机应用知识与能力的等级水平考试。考虑到目前计算机技术发展的现状,教育
部考试中心会对全国计算机等级考试(NCRE)的考试科目设置、考核内容、考试形式实施
调整。
本书以 2004 年新颁布的全国计算机等级考试二级考试大纲为依据,兼顾计算机技术的发
展和知识更新,在综述大纲规定的主要知识点的基础上,按照 2004 年新大纲对近年来的全国
计算机等级考试二级试题进行精心的分类和筛选,并给出了详细的解答和分析。
全书共分为 10 章。
第 0 章是考试指南,内容包括二级考试的考试说明、考试大纲、2004 年度考试试题特点
分析、笔试考试特点分析及考前准备、上机考试要求及考试技巧。
第 1 章~第 9 章是按照新大纲将知识点进行了总结和概括。包括数据库系统及 Visual
FoxPro 基础知识、Visual FoxPro 的系统特点与工作方式、数据与数据运算、Visual FoxPro 数
据库的基本操作、程序设计、关系数据库标准语言 SQL、查询与视图、项目管理器、表单设
计和菜单设计、报表设计和应用程序向导。每部分知识点后给出了相应的例题和详细的分析
解答。每章的最后对本章的重点、难点和考生容易出现的错误进行了总结,并给出了与本章
知识点相关的习题和答案。
附录中给出了 3 套全真预测试题,以及 2004 年 4 月和 9 月的真题和答案,便于考生了解
试题形式、出题范围和试题难度,测试自己的水平,也可以作为实战训练的全真模拟试卷。
本书采用学习笔记的形式帮助考生进行复习,每一章先给出知识结构图,然后将大纲中
的知识点通过问答的形式进行归纳讲解,在每小节后精选了例题,给出了详细的分析解答,
每章的最后对本章的重点、难点进行了总结,并给出练习题和答案。另外,本书配有光盘,
光盘中附有 10 套全真预测上机试题。
从历年考试试题看,同一内容重复考查的情况比较多,试题也有规律可循。建议考生多
做一些历年试题,以巩固基础知识,找出薄弱点,有针对性地加强复习。
衷心祝愿读者能够早日通过考试,成为一名合格的计算机应用人才,也希望本书在备考
的过程中能够助您一臂之力。
由于时间仓促,书中难免有疏漏之处,恳请读者批评指正。可与本书责任编辑联系,您
可发电子邮件至 wangwenjuan@ptpress.com.cn。

编者
2005 年 1 月
全国计算机等级考试辅导丛书编委会

主 编:

李 琳

副主编:

彭江丽 赵广平 秦洪晶

编写人员:

宋业垚 赵广平 刘长东 张晓峰

高 洁 刘士才 李 响 于华明
第 1 章 公共基础知识

全国计算机等级考试二级 Visual FoxPro 语言


上机操作题考试模拟系统光盘使用说明

1.光盘中的文件说明
setup.exe 安装文件
光盘使用说明.doc 安装及使用说明书
2.软件说明
本软件为全国计算机等级考试上机操作题的模拟系统,考试时间为 90 分钟。
3.安装说明
(1)启动计算机,进入 Windows 操作系统。
(2)将光盘放入光驱中。
(3)双击光盘中的 setup.exe 文件。
(4)系统将启动光盘的安装程序,然后按提示进行安装即可。在安装过程中,需要输入
序列号 7817-2393-3470-3474。
(5)安装成功后,可在“程序”中运行本软件,也可直接双击桌面上生成的快捷方式。
(6)计算机中应安装 Visual FoxPro 软件。
4.适用操作系统
本软件可在 Windows 98、Windows 2000、Windows XP 下安装运行。
5.使用方法
(1)选择“程序”菜单中的“二级 vfp 上机模拟系统” ,将出现如下左图所示的界面。
(2)单击“登录系统”按钮后,出现如下右图所示的界面。

(3)在该界面的“准考证号”栏中输入准考证号码(本软件需要输入的是 413099990001~
413099990005 中任意一组),例如输入 413099990001,单击“验证考号”按钮,出现如下的
界面:

−1−
等级考试学习笔记——二级 Visual Basic

通过姓名和身份证号对准考证号进行确认。如输入错误的准考证号,将出现如下界面:

(4)进行确认操作后,“验证考号”按钮会变成“开始考试”按钮。单击“开始考试”
按钮后,将出现如下界面:

(5)单击“按 S 键开始考试”按钮,然后按下键盘的“S”键,开始考试计时。考生可
以单击“进入考题目录”进行答题。考题目录包括相应的原文件和考题答案。
(6)单击第(4)步界面中“下一套题”按钮将随机抽取下一套题。

−2−
目 录

目 录
第0章 考试指南 ........................................................................................................................... 1
0.1 二级考试说明 ................................................................................................................... 1
0.2 2004 年新版全国计算机等级考试二级 Visual FoxPro 考试大纲 .................................. 1
0.3 2004 年度考试试题特点分析 .......................................................................................... 4
0.4 笔试考试特点分析及考前准备 ....................................................................................... 5
0.5 上机考试要求及考试技巧 ............................................................................................... 5
第1章 数据库系统及 VFP 基础知识 ......................................................................................... 7
1.1 数据库系统 ....................................................................................................................... 7
1.2 数据模型 ........................................................................................................................... 8
1.3 VFP 的其他基本概念 ..................................................................................................... 10
1.4 数据的完整性 ................................................................................................................. 13
第2章 Visual FoxPro 系统特点与工作方式......................................................................... 19
2.1 VFP 数据库系统的特点 ................................................................................................. 19
2.2 主要文件类型及其系统容量 ......................................................................................... 20
2.3 Visual FoxPro 的工作方式 ............................................................................................. 22
第3章 数据与数据运算.............................................................................................................. 26
3.1 VFP 中的数据类型 ......................................................................................................... 27
3.2 常量与变量 ..................................................................................................................... 28
3.3 表达式 ............................................................................................................................. 36
3.4 常用函数 ......................................................................................................................... 39
第4章 VFP 数据库的基本操作 ............................................................................................... 54
4.1 Visual FoxPro 数据库及其建立 ....................................................................................55
4.2 建立数据表 .....................................................................................................................64
4.3 数据表结构的显示和修改 .............................................................................................75
4.4 向数据表中输入和追加记录 .........................................................................................80
4.5 表的编辑 .........................................................................................................................95
4.6 建立索引文件与应用 ...................................................................................................108
4.7 数据表的统计操作及复制 ........................................................................................... 119
4.8 多表的使用 ...................................................................................................................122
第5章 程序设计........................................................................................................................ 134
5.1 程序文件的建立与运行 ...............................................................................................134
5.2 程序的基本结构 ...........................................................................................................137
5.3 多模块程序 ...................................................................................................................146
第6章 关系数据库标准语言 SQL ......................................................................................... 159
−1−
等级考试学习笔记——二级 Visual FoxPro

6.1 SQL 概述.......................................................................................................................159


6.2 SQL 的数据查询功能...................................................................................................161
6.3 SQL 的数据修改功能(操作功能) ................................................................................165
6.4 SQL 的数据定义功能...................................................................................................166
第 7 章 查询与视图 .................................................................................................................... 179
7.1 查询 ...............................................................................................................................179
7.2 视图的分类及其概念 ...................................................................................................181
7.3 建立多表查询 ...............................................................................................................183
第 8 章 项目管理器、表单和菜单设计 .................................................................................... 188
8.1 项目管理器 ...................................................................................................................189
8.2 表单设计器 ...................................................................................................................192
8.3 菜单设计器 ...................................................................................................................194
第 9 章 报表设计和应用程序向导............................................................................................ 202
9.1 使用报表设计器 ...........................................................................................................202
9.2 应用程序生成器 ...........................................................................................................206
附录 1 全真预测试题(一) ..................................................................................................... 210
参考答案 ................................................................................................................................214
附录 2 全真预测试题(二)..................................................................................................... 216
参考答案 ................................................................................................................................221
附录 3 全真预测试题(三)..................................................................................................... 222
参考答案 ................................................................................................................................226
附录 4 2004 年 4 月全国计算机等级考试二级 VFP 笔试试卷 ........................................ 227
参考答案 ................................................................................................................................232
附录 5 2004 年 9 月全国计算机等级考试二级 VFP 笔试试卷 ........................................ 233
参考答案 ................................................................................................................................240

−2−
第 0 章 考试指南

第0章 考 试 指 南
随着计算机技术在我国各个领域的推广、普及,其重要性日益受到社会的重视,越来越
多的人开始学习计算机技术,操作和使用计算机成为人们必须掌握的一种技能。全国计算机
等级考试是经原国家教育委员会批准,由教育部考试中心主办,用于考查应试人员计算机应
用知识与能力的等级水平考试。
举办全国计算机等级考试的目的在于适应社会主义市场经济建设的需要,一方面为促进
计算机知识的普及和计算机应用技术的推广,另一方面为劳动力市场服务,即为劳动(就业)
人员提供其计算机应用知识与能力的证明,为用人单位录用和考核工作人员提供一个统一、
客观、公正的评价标准。

0.1 二级考试说明
考虑到计算机技术的发展现状,教育部考试中心决定对全国计算机等级考试(NCRE)
的考试科目设置、考核内容、考试形式实施调整。二级新增科目为二级 Java、二级 Access、
二级 C++。原有的二级 FORTRAN、二级 QBASIC、二级 FoxBase 停考。
考核内容:主要包括基础知识和程序设计。基础知识主要涉及数据结构与算法、程序设
计方法、软件工程、数据库基础知识 4 个部分。补充程序设计的内容二级基础知识在各科考
试中的比重为 30%,题型为 10 个选择题和 10 个填空题。二级上机考试中将取消对 DOS 部
分的考核。
考试形式:二级各科目的考试形式不变,包括笔试和上机考试两部分。
系统环境:二级各科目上机考试运行平台为 Access 2000、Java JDK 1.4.0、Visual C++ 6.0、
Visual Basic 6.0、Visual FoxPro 6.0、Turbo C 2.0。

0.2 2004 年新版全国计算机等级考试二级 Visual FoxPro 考试大纲


1.基本要求
(1)具有数据库系统的基础知识。
(2)基本了解面向对象的概念。
(3)掌握关系数据库的基本原理。
(4)掌握数据库程序设计方法。
(5)能够使用 Visual FoxPro 建立一个小型的数据库应用系统。
2.考试内容
(1)Visual Foxpro 基础知识
① 基本概念:数据库、数据模型、数据库管理系统、类和对象、事件、方法。
② 关系数据库:
−1−
等级考试学习笔记——二级 Visual FoxPro

l 关系数据库:关系模型、关系模式、关系、元组、属性、域、主关键字和外部关键字。
l 关系运算:投影、选择、连接。
l 数据库的一致性和完整性:实体完整性、域完整性、参照完整性。
③ Visual FoxPro 系统特点与工作方式:
l Windows 版本数据库的特点。
l 数据类型和主要文件类型。
l 各种设计器和向导。
l 工作方式:交互方式(命令方式、可视化操作)和程序运行方式。
④ Visual Foxpro 的基本数据元素:
l 常量、变量、表达式。
l 常用函数:字符处理函数、数值计算函数、日期时间函数、数据类型转换函数、测
试函数。
(2)Visual FoxPro 数据库的基本操作
① 数据库和表的建立、修改与有效性检验:
l 表结构的建立与修改。
l 表记录的浏览、增加、删除与修改。
l 创建数据库,向数据库添加或移出表。
l 设定字段级规则和记录级规则。
l 表的索引:主索引、候选索引、普通索引、惟一索引。
② 多表操作:
l 选择工作区。
l 建立表之间的关联:一对一的关联、一对多的关联。
l 设置参照完整性。
l 建立表间临时关联。
③ 建立视图与数据查询:
l 查询文件的建立、执行与修改。
l 视图文件的建立、查看与修改。
l 建立多表查询。
l 建立多表视图。
(3)关系数据库标准语言 SQL
① SQL 的数据定义功能:
l CREATE TABLE-SQL。
l ALTER TABLE-SQL。
② SQL 的数据修改功能:
l DELETE—SQL。
l INSERT—SQL。
l UPDATE—SQL。
③ SQL 的数据查询功能:
l 简单查询。
−2−
第 0 章 考试指南

l 嵌套查询。
l 连接查询。
内连接。
外连接:左连接、右连接、完全连接。
l 分组与计算查询。
l 集合的并运算。
(4)项目管理器、设计器和向导的使用
① 使用项目管理器:
l 使用“数据”选项卡。
l 使用“文档”选项卡。
② 使用表单设计器:
l 在表单中加入和修改控件对象。
l 设定数据环境。
③ 使用菜单设计器:
l 建立主选项。
l 设计子菜单。
l 设定菜单选项程序代码。
④ 使用报表设计器:
l 生成快速报表。
l 修改报表布局。
l 设计分组报表。
l 设计多栏报表。
⑤ 使用应用程序向导。
⑥ 应用程序生成器与连编应用程序。
(5)Visual FoxPro 程序设计
① 命令文件的建立与运行:
l 程序文件的建立。
l 简单的交互方式输入、输出命令。
l 应用程序的调试与执行。
② 结构化程序设计:
l 顺序结构程序设计。
l 选择结构程序设计。
l 循环结构程序设计。
③ 过程与过程调用:
l 子程序设计与调用。
l 过程与过程文件。
l 局部变量和全局变量,过程调用中的参数传递。
④ 用户定义对话框(MESSAGEBOX)的使用。
3.考试方式
−3−
等级考试学习笔记——二级 Visual FoxPro

(1)笔试:90 分钟,满分 100 分。


(2)上机操作:90 分钟,满分 100 分。
① 基本操作。
② 简单应用。
③ 综合应用。

0.3 2004 年度考试试题特点分析


2004 年考试试题的特点是试题对大纲要求的知识点覆盖全面,凡是大纲中要求的知识内
容在试题中基本上都有所反映,在全面中又突出重点,且这些重点在往年试题中也有较大的
题量,所以了解和掌握这些重点对于复习备考有重要的指导意义。
2004 年试题统计分析见表 0-1 和表 0-2。

表 0-1 2004 年 4 月等级考试二级 Visual FoxPro 试题知识内容统计


知 识 内 容 题 号 数 目

数据库系统及 Visual FoxPro 基础知识 1、2、3、5、23 5

Visual FoxPro 的系统特点与工作方式 6 1

数据与数据运算 8、14、填空第 2 题 3

Visual FoxPro 数据库的基本操作 9、10、11、12、15、16、18、22、填空第 1 题 9

程序设计 填空第 3、5 题 2

关系数据库标准语言 SQL 13、17、20、29、30、31、32、33、34、35、填空第 6、7 题 12

查询与视图 19、填空第 8、9 题 3

项目管理器、表单设计和菜单设计 4、7、25、26、27、28、填空第 4 题 7

报表设计和应用程序向导 21、24 2

表 0-2 2004 年 9 月等级考试二级 Visual FoxPro 试题知识内容统计


知 识 内 容 题 号 数 目

数据库系统及 Visual FoxPro 基础知识 1、2、3、填空第 1 题 4

Visual FoxPro 的系统特点与工作方式 6、填空第 2 题 2

数据与数据运算 12、13、填空第 10 题 3

Visual FoxPro 数据库的基本操作 4、27、29、填空第 3、6 题 5

程序设计 5、7、填空第 15 题 3

关系数据库标准语言 SQL 15、16、17、18、19、20、23、24、25、26、填空第 11 题 11

查询与视图 21、22、30、填空第 4 题 4

项目管理器、表单设计和菜单设计 9、10、11、14、28、32、33、34、填空第 7、8、9、12、13、14 题 14

报表设计和应用程序向导 8、31、35、填空第 5 题 4

从以上的统计可以看出,4 月份试题主要对关系数据库标准语言 SQL、Visual FoxPro 数


据库的基本操作、项目管理器、表单设计和菜单设计等章节进行了考查,还涉及到许多基础

−4−
第 0 章 考试指南

知识;9 月份试题主要对项目管理器、表单设计和菜单设计、关系数据库标准语言 SQL、Visual


FoxPro 数据库的基本操作等章节进行了考查。两次考试中 SQL 语句都占了很大的比重,另
外,9 月份的重点放在了项目管理器、表单设计和菜单设计上。这两次考试覆盖面都很广,
涉及到大纲所要求的所有知识,针对这一点,读者在复习过程中,要对大纲要求的所有知识
都复习到。

0.4 笔试考试特点分析及考前准备
笔试主要是测试考生对知识点和概念的掌握,考生在备考时要深化对基本概念和知识点
的理解,并注重实践,作一些有针对性的练习,例如历年真题,从中找出规律性的东西以及
解题技巧。考生若有充足的备考时间,对大纲以外的知识点也要学习一下,这样既保证了知
识点的全面性,又对大纲知识的学习有很大的帮助。
1.选择题 选择题要求考生从 4 个待选答案中选择 1 个正确答案,考生可综合运用直
选法,排除法等多种方法。但是这类题目考查的知识点往往都比较多且细,容易出错,考生
在做这类题时,切忌不加分析,一看就选,从而漏掉正确的答案。另外,二级笔试题目众多,
分值分散,考生一定要有全局观念,合理安排时间。
2.填空题 填空题主要考查考生对基础知识的准确理解,考生应深刻理解题意,明确
题目要求,运用相关知识做出正确解答。在历年考试中,考生这部分试题的得分直接决定考
试成绩的高低。填空题共 20 个空,计 40 分,有的考生能得 35~40 分,而有的考生却得不到
10 分,直接影响最后成绩。在判卷过程中发现考生常犯的错误有以下几个方面:基础知识掌
握不扎实,概念理解不准确;答案表述不准确,会做的题却不得分或少得分;要注意答题卡
的号码并不是试题卷上的题号,而是填空的顺序号,许多考生答题时将答案张冠李戴,位置
写错,白白丢了分。另外在做填空题时一定要注意文字上不能有一点的错误,对于那些有两
种答案的只需填一种就可以了,多填并不多给分。
总之,考试要取得好成绩,从根本上取决于考生对考试大纲掌握的扎实程度。否则,即
使有再好的技巧也只能是碰运气。但是,在比较扎实地掌握了考试内容的前提下,了解一些
应试的技巧对考试会有很大的帮助。

0.5 上机考试要求及考试技巧
1.上机考试要求
考生在各考点分组进行上机考试,考生应按规定日期、时间持准考证到达考点并提前 30
分钟到候考室报到,校验准考证和身份证(军人证、户口本) ,抽签决定考试的工作站号或微
机号。
考生应提前进入机房,在抽签决定的工作站或微机上输入自己的准考证号,并和屏幕上
显示的姓名及身份证号进行核对,如不符合按 ESC 键重新输入,如三次输入均有错误,由监
考人员帮助查找原因,如核对相符,考生键入指定的功能键正式开始上机考试。
考生迟到 10 分钟即被取消考试资格,考试开始后 10 分钟内考生不得离开考场。
注意:考生必须在自己的考生目录下进行考试,否则在评分时会因得不到考试内容而影
−5−
等级考试学习笔记——二级 Visual FoxPro

响考试成绩。
2.上机技巧
(1)备考篇
首先,参照考试大纲,系统学习基础知识。只有在熟练掌握基础知识以后,才有可能完
成上机操作题。
再次,多练习,勤上机。要想把知识变成能操作运用的本领就必须时时练习巩固。可以
购买习题集和光盘,每天坚持做习题,日积月累,就能收到明显的成效。
最后,要熟悉上机环境。
(2)应试篇
在应试中,最应该注意的还是心态问题。
本书总结了上机考试的技巧,可用“一看、二写、三检查”来概括。
“一看”是指考生在抽取考题后,不要先急着做题,应将整道题通读一遍,理解题意。
“二写”指考生了解题意后,根据题意先在草纸上写出答案,然后再输入电脑中。
“三检查”指考生按题意完成考题,执行无误后,在结束考试前,再检查一遍答案,查
看结果是否与题意一致。

−6−
第 1 章 数据库系统及 VFP 基础知识

第1章 数据库系统及 VFP 基础知识


随着科学的进步,计算机在人们日常生活中的应用越来越广泛,数据库技术作为计算机
技术的重要组成部分,也广泛地应用于各个领域。Visual FoxPro(简称 VFP)作为一种广泛
使用的数据库管理系统,逐渐被人们所认可。
本章主要介绍数据库系统的一些基本概念,数据库、数据模型、数据库管理系统、类和
对象、事件、方法;关系数据库,关系模型、关系模式、关系、元组、属性、域、主关键字
和外部关键字;关系运算,选择、投影、连接;数据的一致性和完整性,实体完整性、域完
整性、参照完整性。本章为读者学习以后各章节打下基础。

知识结构图

大纲中的知识点

1.1 数据库系统

要了解数据库系统,首先要明确数据库、数据库系统、数据库管理系统等几个最基本,
互相有联系,又有区别的概念。
问题 1:数据库(Data Base,DB)是什么?它有什么作用?
说到数据库,首先要注意“数据”这个词,数据是存储在某一种媒介上,能够被识别
的物理符号。数据的形式是多种多样的。只有将数据转换成信息,对于接受者来说才是有

−7−
等级考试学习笔记——二级 Visual FoxPro

用的,过程叫数据处理。数据库是指以一定的组织形式,存储在计算机的存储设备上,并
且能为多个用户共享的,与应用程序独立的一些相关数据的集合。比起 20 世纪 50 年代的
文件系统,数据库系统提高了数据的共享性,使多个用户能够同时访问数据库中的数据,
减小数据的冗余度,它也提高了数据的一致性和完整性,并且使数据与应用程序相互更加
独立。
问题 2:数据库管理系统(Data Base Management System,DBMS)是什么?目前常用的
数据库管理系统有哪些?
数据库管理系统是指用于建立、维护数据库及处理数据库中的数据的一种数据库应用系
统,它需要在操作系统的支持下才能运行。目前常用的有 FoxBase、FoxPro、Visual FoxPro 等。
问题 3:数据库系统(Data Base System,DBS)是什么?它主要包括哪些内容?
数据库系统是指引进数据库技术后的计算机系统,将大量数据通过数据库管理系统加工
整理、存储在数据库中,并为多个用户共同使用的数据处理系统包括计算机硬件系统、数据
库管理系统及相关软件、数据库集合、数据库管理员和用户。

1.2 数据模型
数据库是一些相关数据的集合,这些数据是通过一定的组织形式(结构)联系在一起,
可以根据其内在联系和性质进行管理。数据库的组织形式就是数据模型,常见的数据模型有
层次模型、网状模型、关系模型。
问题 1:层次模型是什么?其具体结构是什么?
层次模型是数据库系统最早使用的一种模型。它所反映的数据结构像一棵倒立的树,树
根是最高层,树根、树的分支点、树叶都称为节点。如果一个分支不再向下分,那么此分支
序列中最后的节点是“树叶” 。如图 1-1 所示。

图 1-1 层次模型示例

班级是树根节点,成绩和性别是“树叶” 。
问题 2:网状模型是什么?其具体结构是什么?
以网状结构表示相关数据集合的模型称为网状模型。它所反映的实体间的联系比层次模
型更复杂。如图 1-2 所示。

−8−
第 1 章 数据库系统及 VFP 基础知识

图 1-2 网状模型示例

问题 3:关系模型是什么?关系模型中的关系术语有哪些?关系运算有几种?
以二维表结构来表示相关数据集合的模型称为关系模型。关系数据库中每一个关系就
是一个二维表,而每个表与表之间又可通过相同的“属性”建立联系,比如说“学生情况
表”与“成绩单”可通过“学号”这个“属性”建立联系。用关系模型来描述数据之间的
联系,所建立的数据库就是关系型数据库。Visual FoxPro 建立的数据库就是关系型数据库。
Visual FoxPro 系统是典型的关系型数据库管理系统。
1.关系术语
(1)关系:在关系数据库中,一个关系就是一张二维表,每一个关系(即一张表)的数
据可存在一个文件中(Visual FoxPro 称为数据库文件)。
(2)元组:一个关系(即一个表)水平方向的行称为元组,每一行是一个元组,在 Visual
FoxPro 中一个元组又称为一个记录。
(3)属性:一个关系(即一个表)垂直方向的列称为属性,每一列有一个属性名,在
Visual FoxPro 中一个属性称为一个字段,每个字段都有一个字段名。
(4)域:属性的取值范围叫做域。
(5)关键字:能够惟一地标识一个元组的某个属性或某几个属性的组合。主关键字和候
选关键字就起惟一标识一个元组的作用。
(6)外部关键字:如果表中的一个字段不是本表的主关键字或候选关键字,而是另外一
个表的主关键字或候选关键字,这个字段(属性)就称为外部关键字。
(7)关系模式:对关系的描述称为关系模式,其表示为:
关系名(属性名 1,属性名 2,……属性名 n) ,一个关系模式对应一个关系(一张表) 。
另外,还需注意以下几点:
(1)每一个关系都必须满足一定的要求。
(2)在一个关系中不能出现相同的属性名,也不能出现完全相同的元组。
(3)一个关系中元组的次序无关紧要,属性的次序也无关紧要。
2.关系运算
用户对关系数据库中的数据进行操作,就需要对关系进行一定的关系运算,Visual FoxPro
提供了三种关系运算。
(1)选择:从关系中找出满足给定条件的元组的操作称为选择。选择是从水平方向抽取
记录。Visual FoxPro 常用 FOR<条件>,WHILE<条件>等来抽取记录,相当于选择运算。
(2)投影:从关系中挑选出若干个属性组成新的关系称为投影。投影是从垂直方向对关
系进行重新组合。Visual FoxPro 常用 FIELDS<字段 1,字段 2……>等进行字段的筛选,相当
于投影。
−9−
等级考试学习笔记——二级 Visual FoxPro

(3)联接:将两个关系(两个表)按某个条件提取部分元组及部分属性组合成一个新的
关系(即把两个相关二维表格按某个共同属性拼成一个表格)。Visual FoxPro 的 JOIN 命令实
现两个关系的联接。
注意:自然联接是在联接运算中,按照字段值对应相等为条件进行的联接操作称为等值
联接。自然联接是去掉重复属性的等值联接,是最常用的联接运算。

例题讲解

例题 1 (2002 年 9 月考试题)
Visual FoxPro 支持的数据模型是________。
A.层次数据模型 B.关系数据模型
C.网状数据模型 D.树状数据模型
【分析】本题主要对数据模型的基本概念进行考查,通过知识点的介绍可以知道,Visual
FoxPro 支持的数据模型是关系数据模型。
【答案】B
例题 2 (2003 年 4 月考试题)
Visual FoxPro DBMS 基于的数据模型是________。
A.层次型 B.关系型
C.网状型 D.混合型
【分析】同上题。
【答案】B
例题 3 (2002 年 9 月考试题)
在下列 4 个选项中,不属于基本关系运算的是________。
A.联接 B.投影
C.选择 D.排序
【分析】本题主要考查对三种基本关系运算的理解,3 种基本关系运算是选择、投影、
联接。
【答案】D

1.3 VFP 的其他基本概念


在 VFP 中,还有一些概念需要了解。
问题 1:对象的概念是什么?
要了解对象,需要先了解属性、方法和事件。
属性指对象的数据,方法指在对象上操作的过程,而事件是可被对象识别的动作。结合
这三个概念,对象是一个封装的属性和方法的实体,对象的结构特征由属性表示,属性
描述了对象的状态;方法和对象紧密地联系在一起,它可以控制属性(即对象数据),改变对
象的状态;每个对象都有可以识别和响应的事件,事件是一种已经定义好的动作,每当其他
对象向本对象发出消息并触发事件时,与事件相关联的方法就会被实现。
− 10 −
第 1 章 数据库系统及 VFP 基础知识

在 VFP 中,对象可以是应用程序的一部分,比如说控件,还可以是整个应用程序。
问题 2:类的概念是什么?它的特性有哪些?
类是指某类型数据的所有属性和行为方式的模板。类和对象有密切的联系,但是它们也
有区别,类是对象的原型,对象是类的实例化、具体化。类具有以下一些特性。
1.封装性:是指方法和数据存放在同一个对象中,而且对对象的存取只有通过此对象
本身的方法来实现,其他对象不能直接作用于该对象中的数据,对象间的相互作用只能通过
消息来实现。
2.继承性:是指从现有的类创建出一种新的类。现有的类被称为基类或父类,新的类
称为派生类或子类。派生类在继承了其父类的所有特性的基础上,还可以添加其他的特征。
派生类的对象可以调用自身及其父类的成员变量和成员函数。
3.多态性:是指可以定义为相关的对象对同一消息作出不同的解释,进而产生不同的
行为。多态性提供了为一组相关的对象创建一个更为简单、灵活的界面的能力,并且使得程
序更容易扩充。
类可以分为以下几个基本类。
1.容器类:这种类可以包含其他类,在程序设计或运行中都可单独对容器类中的任何
一个对象进行访问或处理。常见的容器类有:命令按钮组、表单集、表单、表格列、表格、
选项按钮组、页框、页面、项目、工具栏、容器、页等。
2.控件类:这种类不可以包含其他类,是比容器类封装的更完全的一些类,在程序设
计和运行时是作为一个整体对待的。常见的控件类有:复选框、组合框、命令按钮、控件、
定制、编辑框、图像、直线、列表框等。Visual FoxPro 基类清单见表 1-1。
表 1-1 Visual FoxPro 基类清单
类 名 含 义 类 名 含 义

ActiveDoc 活动文档 Label 标签

CheckBox 复选框 Line 线条

Column (表格)列 ListBox 列表框

ComboBox 组合框 OleControl OLE 容器控件

CommandButton 命令按钮 OleBoundControl OLE 绑定控件

CommandGroup 命令按钮组 OptionButton 选项按钮

Container 容器 OptionGroup 选项按钮组

Control 控件 Page 页

Custom 定制 PageFrame 页框

EditBox 编辑框 ProjectHook 项目挂钩

Form 表单 Separator 分隔符

FormSet 表单集 Shape 形状

Grid 表格 Spinner 微调控件

Header (列)标头 TextBox 文本框

HyperLink 超级链接 Timer 定时器

Image 图像 ToolBar 工具栏

− 11 −
等级考试学习笔记——二级 Visual FoxPro

每个 Visual FoxPro 基类都有自己的一套属性、方法和事件。当扩展某个基类创建用


户自定义类时,该基类就是用户自定义类的父类,用户自定义类继承该基类中的属性、方
法和事件。下面给出 Visual FoxPro 基类的最小属性集,不管哪个基类都包含这些属性,
见表 1-2。

表 1-2 Visual FoxPro 基类的最小属性集


属 性 说 明

Class 类名,当前对象基于哪个类而生成

BaseClass 基类名,当前类从哪个 Visual FoxPro 基类派生出来的

ClassLibrary 类库名,当前类存放在哪个类库中

ParentClass 父类名,当前类从哪个类直接派生而来

对象的生成通常使用 CREATOBJECT 函数来完成。格式如下:


CREATOBJECT(<类名>[,<参数 1>,<参数 2>,…])
Visual FoxPro 中常用的容器及其所能包容的对象见表 1-3。

表 1-3 Visual FoxPro 中常用的容器及其所能包容的对象


容 器 能包容的对象

表单集 表单、工具栏

表单 任意控件以及页框、Container 对象、命令按钮组、选项按钮组、表格等对象

表格 列

列 标头和除表单集、表单、工具栏、定时器及其他列之外的任意对象

页框 页

页 任意控件以及 Container 对象、命令按钮组、选项按钮组、表格等对象

命令按钮组 命令按钮

选项按钮组 选项按钮

Container 对象 任意控件以及页框、命令按钮组、选项按钮组、表格等对象

在对象的嵌套层次关系中,要用到其中某个对象,需要指明对象在嵌套层次中的位置。
这个时候,需要用到的属性或关键字见表 1-4。

表 1-4 对象的嵌套层次关系中引用属性或关键字
属性或关键字 引 用

Parent 当前对象的直接容器对象

This 当前对象

ThisForm 当前对象所在的表单

ThisFormSet 当前对象所在的表单集

注意:后三个关键字只能用在方法代码或事件代码中。
问题 3:方法的概念是什么?
方法是指在对象上操作的各种过程,它是类的成员函数。
− 12 −
第 1 章 数据库系统及 VFP 基础知识

问题 4:事件的概念是什么?
事件是指可被对象识别的动作或行为,它是人机交互的一个重要接口。用户在界面对对
象的操作的直接结果就是产生某种类型的事件,而这种事件必然具备一定的处理程序。
表 1-5 给出 Visual FoxPro 基类的最小事件集,不管哪个基类都包含这些事件。

表 1-5 Visual FoxPro 基类的最小事件集


事 件 说 明

Init 当对象生成时引发

Destroy 当对象从内存中释放时引发

Error 当方法或事件代码出现运行错误时引发

事件代码既能在事件引发时执行,也可以像方法一样被显示调用。但这个原则有一个例
外,其不适用于命令按钮组和选项按钮组。

例题讲解

例题 4 Visual ForPro 的类主要包括________和________两种。


【分析】这是对类的种类的考查。类主要分为容器类和控件类。
【答案】容器类 控件类
例题 5 类的特性有________、________、________。
【分析】此题主要考查对类的特性的理解。类的特性包括:封装性、继承性和多态型。
【答案】封装性 继承性 多态性

1.4 数据的完整性
在 VFP 数据库中,数据的完整性是指保证数据正确的特性,数据的完整性包括实体完整
性、域完整性、参照完整性等。
问题 1:实体完整性的概念是什么?
实体完整性指保证表中记录惟一的特性,即在一个表中不允许有重复的记录。在 VFP 中
利用主关键字或候选关键字来保证表中记录的惟一。如果一个字段的值或几个字段的值能够
惟一标识表中的一条记录,则这样的字段称为候选关键字。如果在一个表上有几个具有这种
特性的字段或字段的组合,可以从中选择一个作为主关键字。
在 VFP 中,主关键字称为主索引,候选关键字称为候选索引。
问题 2:域完整性与约束规则具体指什么?
域完整性是指字段的取值类型和取值范围,而约束规则又称为字段有效性规则,在插入
或修改字段值时被激活,主要用于数据输入正确性的检验。
问题 3:参照完整性与表之间的关联指什么?
参照完整性与表之间的关联有关,当插入、删除或修改一个表中的数据时,通过参照引
用相关联的另一个表中的数据来检查对表的数据操作是否正确。有关参照完整性的其他方面,
在后面的章节还会涉及。

− 13 −
等级考试学习笔记——二级 Visual FoxPro

例题讲解

例题 6 VFP 中,数据的完整性包括________、________、________。
【分析】本题考查对数据完整性的理解。数据的完整性包括:实体完整性、域完整性和
参照完整性。
【答案】实体完整性 域完整性 参照完整性

综合实例

1.(2004 年 4 月 选择题第 1 题)
数据库(DB) 、数据库系统(DBS) 、数据库管理系统(DBMS)三者之间的关系是________。
A.DBS 包括 DB 和 DBMS B.DBMS 包括 DB 和 DBS
C.DB 包括 DBS 和 DBMS D.DBS 就是 DB,也就是 DBMS
【分析】数据库是存储在计算机存储设备上,结构化的相关数据集合。数据库管理系统
可以对数据库的建立、使用和维护进行管理。数据库系统由五部分组成:硬件系统、数据库
集合、数据库管理系统及相关软件、数据库管理员和用户。由这些概念可知:数据库系统 (DBS)
包括了数据库(DB)和数据库管理系统(DBMS) 。
【答案】A
2.(2004 年 4 月选择题第 2 题)
在 Visual FoxPro 中“表”是指________。
A.报表 B.关系 C.表格 D.表单
【分析】在 Visual FoxPro 中,一个“表”就是一个关系。
【答案】B
3.(2004 年 4 月选择题第 3 题)
数据库系统与文件系统的最主要区别是________。
A.数据库系统复杂,而文件系统简单
B.文件系统不能解决数据冗余和数据独立性问题,而数据库系统可以解决
C.文件系统只能管理程序文件,而数据库系统能够管理各种类型的文件
D.文件系统管理的数据量较小,而数据库系统可以管理庞大的数据量
【分析】文件系统中的数据和程序相互依赖,同一数据项可能重复出现在多个文件中,
导致数据冗余度大。而数据库系统实现数据共享,减少数据冗余,具有较高的数据独立性。
【答案】B
4.(2004 年 4 月选择题第 5 题)
在关系模型中,为了实现“关系中不允许出现相同元组”的约束应使用________。
A.临时关键字 B.主关键字
C.外部关键字 D.索引关键字
【分析】在 Visual FoxPro 中,主关键字和候选关键字起惟一标识一个元组的作用。
【答案】B
− 14 −
第 1 章 数据库系统及 VFP 基础知识

5.(2004 年 4 月选择题第 23 题)
以下关于关系的说法正确的是________。
A.列的次序非常重要 B.当需要索引时列的次序非常重要
C.列的次序无关紧要 D.关键字必须指定为第一列
【分析】根据关系的特点可知,在一个关系中列的次序无关紧要。
【答案】C
6.(2004 年 9 月选择题第 1 题)
DBMS 的含义是________。
A.数据库系统 B.数据库管理系统
C.数据库管理员 D.数据库
【分析】此题主要是考察 VFP 的基本概念。根据所学的概念可以知道 DBMS 是指数据库
管理系统,DBS 是数据库系统,DB 是数据库。
【答案】B
7.(2004 年 9 月选择题第 2 题)
从关系模式中指定若干个属性组成新的关系的运算称为________。
A.联接 B.投影 C.选择 D.排序
【分析】此题主要是考察关系运算的基本概念。联接是关系的横向组合,是将两个关系
模式拼接成一个关系模式。投影是从关系模式中指定若干个属性组成新的关系。选择是从关
系中找出满足给定条件的元组的操作。排序是用户按照某种顺序浏览或查找表中的记录,它
不属于关系运算。
【答案】B
8.(2004 年 9 月选择题第 3 题)
对于“关系”的描述,正确的是________。
A.同一个关系中允许有完全相同的元组
B.同一个关系中元组必须按关键字升序存放
C.在一个关系中必须将关键字作为该关系的第一个属性
D.同一个关系中不能出现相同的属性名
【分析】关系的特点是:①关系必须规范化。所谓规范化是指关系模型中的每一个关系
模式都必须满足一定的要求。最基本的要求就是每个属性必须是不可分割的数据单元,即表
中不能再包含表。②在同一个关系中不能出现相同的属性名。③关系中不允许有完全相同的
元组。④在一个关系中元组的次序无关紧要。⑤在一个关系中列的次序无关紧要。由关系的
这些特点可以看出 D 是正确的。
【答案】D
9.(2004 年 9 月填空题第 1 题)
在关系模型中, “关系中不允许出现相同元组”的约束是通过________实现的。
【分析】在关系模型中,主关键字或候选关键字起惟一标识一个元组的作用。
【答案】主关键字或候选关键字(主索引或候选索引) 。
10.下列关于数据库系统的描述正确的是________。
A.数据库系统减少了数据冗余
− 15 −
等级考试学习笔记——二级 Visual FoxPro

B.数据库系统避免了一切冗余
C.数据库系统中数据的一致性是指数据类型一致
D.数据库系统比文件系统管理更多的数据
【分析】实现数据共享,减少数据冗余是数据库系统的主要特点之一。在设计数据库时,
应以面向全局的观点组织数据,而不应仅仅考虑某一部门的局部应用,这样才能避免不必要
的数据重复。有时为了提高查询效率,可以有意识地保留适当的冗余。
【答案】A
11.根据数据模型分类,数据库系统可以分为三种类型________。
A.大型、中型和小型 B.西文、中文和兼容
C.层次、网状和关系 D.数据、图形和多媒体
【分析】题目要求按照数据模型分类,应该选择 C。答案 A 是针对数据库系统的规
模而言的,答案 B 是指数据库系统的语言种类,答案 D 是指数据库系统所管理的数据的
形式。
【答案】C
12.一个关系数据库文件的各条记录________。
A.前后顺序不能任意颠倒,一定要按照输入的顺序排列
B.前后顺序可以任意颠倒,不影响数据库中数据的实际意义
C.前后顺序可以任意颠倒,但排列顺序不同,统计处理的结果就可能不同
D.前后顺序不能任意颠倒,一定要按照关键字段值的顺序排列
【分析】在关系中,元组的次序无关紧要,各个属性之间的联系是由语义决定的。虽然
记录的物理顺序由输入的次序决定,但在数据处理过程中可以通过排序或索引等手段来重新
组织,因此记录前后顺序的改变并不影响数据库中数据的实际意义。
【答案】B
13.关系数据库管理系统实现的专门关系运算包括______。
A.排序、索引、统计 B.选择、投影、连接
C.关联、更新、排序 D.显示、打印、制表
【分析】选项 B 是专门的关系运算,关联相当于逻辑联接,而排序、索引、统计、更新
属于数据库管理操纵手段。显示、打印、制表是多种计算机软件系统支持的功能,并不是关
系数据库管理系统支持的专门关系运算。
【答案】B
14.关系数据库中每个关系的形式是 (1) ,事物和事物之间的联系在关系模型中都
用 (2) 来表示,对关系进行选择、投影、连接之后,运算的结果仍然是一个 (3) 。
【分析】关系模型与层次模型、网状模型的本质区别在于其数据描述的一致性和模型概
念单一。关系型数据库中的每一个关系都是一个二维表,无论实体本身还是实体间的联系均
用关系表示,描述实体的数据本身自然地反映它们之间的联系,如公共属性名或语义相同的
异名属性。在关系模型中,操作的对象和关系运算结果都是二维表,只是元组的数目或者关
系模式中所包括的属性可能有所变化。
【答案】 (1)二维表(2)关系(3)关系

− 16 −
第 1 章 数据库系统及 VFP 基础知识

本章总结
难点重点
1.数据库、数据库管理系统、数据库系统的基本概念以及它们之间的联系及区别。
2.层次模型、网状模型、关系模型的基本概念。
3.关系术语中的关系、元组、属性、域、关键字、外部关键字、关系模式的基本概念
以及建立关系模型应该注意的一些事项。
4.关系运算中的选择、投影、联接的基本概念。
5.对象、类、方法和事件的基本概念以及它们各自的特征。
6.数据的完整性:实体完整性、域完整性、参照完整性。
误点剖析
1.了解数据库、数据库管理系统、数据库系统三者之间的联系:数据库系统包括数据
库和数据库管理系统。
2.元组和属性的差别:一个关系(即一个表)水平方向的行称为元组,垂直方向的列
称为属性。
3.建立关系数据模型时,需要注意:
(1)每一个关系都必须满足一定的要求。
(2)在一个关系中不能出现相同的属性名,也不能出现完全相同的元组。
(3)一个关系中元组的次序无关紧要,属性的次序也无关紧要。
4.关系运算中,选择是从水平方向抽取记录,投影是从垂直方向对关系进行重新组合。
5.连接运算中的自然联接是一个比较重要的概念:在联接运算中,按照字段值对应相
等为条件进行的联接操作称为等值联接。自然联接是去掉重复属性的等值联接。自然联接是
最常用的联接运算。

单元练习

1.关系数据库管理系统所管理的关系是________。
A.一个 DBF 文件 B.若干个二维表 C.一个 DBC 文件 D.若干个 DBC 文件
2.Visual FoxPro 关系数据库管理系统能够实现的三种基本关系运算是________。
A.索引、排序、查找 B.建库、录入、排序
C.选择、投影、联接 D.显示、统计、复制
3.按照数据库的数据类型分类,VFP 属于________。
A.层次型 B.关系型 C.网状型 D.混合型
4.如果要改变一个关系中属性的排列顺序,应使用的关系运算是________。
A.重建 B.选取 C.投影 D.连接
5.数据库系统的构成为:数据库、计算机硬件系统、用户和________。
A.操作系统 B.文件系统 C.数据集合 D.数据库管理系统
6.关系数据库系统中所使用的数据结构是________。

− 17 −
等级考试学习笔记——二级 Visual FoxPro

A.树 B.图 C.表格 D.二维表


7.若下列四个选项中,不属于基本关系运算的是:
A.连接 B.投影 C.选择 D.排序
8.如果一个班只能有一个班长,而且一个班长不能同时担任其他班的班长,班级和班
长两个实体之间的关系属于:
A.一对一联系 B.一对二联系 C.多对多联系 D.一对多联系
9.Visual FoxPro 支持的数据模型是________。
A.层次数据模型 B.关系数据模型 C.网状数据模型 D.树状数据模型
10.二维表中的每一列称为一个字段,或称为关系的一个________;二维表中的每一行
称为一个记录,或称为关系的一个________。

习题答案
1.B。解析:一个关系实际上就是一个二维表。
2.C。解析:关系数据库管理系统中的关系运算是:选择、投影、联接。
3.B。解析:微机上使用的数据库大多是关系型的,Visual FoxPro 就属于关系型。
4.C。解析:关系运算包括:选择、投影、连接。其中选择是对关系进行水平方向的选
择,投影是对关系进行垂直方向的选择,连接是从两个关系中选择满足一定连接条件的元组
集合。
5.D。解析:数据库系统是由计算机系统(硬件和基本软件) 、数据库、数据库管理系
统和有关人员(数据库管理员、应用设计人员和最终用户)组成的具有高度组织性的总体。
6.D。解析:关系数据库系统中所使用的数据结构是二维表。
7.D。解析:关系的三种基本运算有:选择、投影、连接。
8.A。解析:从题中给出的条件可以得出,班级和班长两个实体之间的关系是一对一
联系。
9.B。解析:VFP 支持的数据模型是关系数据模型。
10.属性、元组。解析:关系中的字段又叫属性,一个记录就是一个元组。

− 18 −
第2章 Visual FoxPro 系统特点与工作方式

第 2 章 Visual FoxPro 系统特点与工作方



本章主要介绍 VFP 数据库的特点,以及其中的数据类型和主要文件类型,还介绍了 VFP
的工作方式。

知识结构图

大纲中的知识点

2.1 VFP 数据库系统的特点


问题 1:VFP 数据库系统的特点有哪些?
Visual FoxPro 6.0 与以前的相比,功能更强大,下面具体介绍一下它的特点。
1.方便的可视化界面
中文版 VFP 采用了可视化界面,而且有多种可视化编程工具,支持面向对象编程,重复
使用各种类,可以直观地、创造性地建立应用程序。还允许初学者使用菜单来操作系统,同
时支持键盘和鼠标,VFP 还提供多种颜色支持。
2.表的设计更方便
通过 VFP 系统,采用了表的字段和控件直接结合的设置,使用户更快、更容易地设计和
修改应用程序界面。
3.内置编辑器
VFP 的内置编辑器能够处理大的文档而不受内存的限制,仅受磁盘空间的限制。VFP 还
允许用户同时编辑多个窗口的内容,并提供完整的删除、拷贝和粘贴操作,以及强大的选择
和替代功能。
4.关系举例检索
VFP 提供关系举例检索,用户可以十分方便地从多个数据库中提取所需的信息。
− 19 −
等级考试学习笔记——二级 Visual FoxPro

5.新的索引文件类型
VFP 提供的新的索引文件包括标准索引文件和复合索引文件。标准索引文件还包括压缩
型和非压缩型两种。
6.快速的查找技术
VFP 提供的查找技术比以前的各种技术都快,使得用户在使用时,更加方便、快捷。
7.丰富的自生成工具
VFP 提供了一些自生成工具,使得编程更加简单、方便,比如:表单设计器、表设计器、
菜单设计器、报表设计器等。
8.其他的特点
增强了 Internet 技术,WWW 数据库的设计;最新流行的 ActiveX 和一系列的向导、生
成器以及控件等集成化工具等,进一步增强了应用程序界面的吸引力。

例题讲解

Visual FoxPro 与以前各种版本相比,它的功能强大的主要表现不包括________。


A.内置设计器但是受内存的限制 B.快速的查找技术
C.方便的可视化界面 D.丰富的自生成工具
【分析】此题主要是对 VFP 功能的考查,可知 BCD 都正确,选项 A 中应该是:内置设
计器,不受内存的限制。
【答案】A

2.2 主要文件类型及其系统容量
问题 1:Visual FoxPro 所包括的文件类型中最主要的文件类型有哪些?
Visual FoxPro 所包括的文件类型很多,其中最主要的文件类型见表 2-1。

表 2-1 Visual FoxPro 最主要的文件类型


vfp 可视类库文件

vcx 视图格式文件

dbc 数据库文件

dbf 数据文件,又叫数据库文件或表

idx 单项索引码索引文件

cdx 复合索引文件

prg 程序文件,由 VFP 构成的命令文件或由若干个命令文件集成的过程文件

fxp 编译结果的文件

scx 屏幕文件

spr 屏幕代码文件(编译后生成 SPX 文件)

mnx 菜单文件

mpb 菜单代码文件(编译后生成 MPX 文件)

pjx 项目文件

− 20 −
第2章 Visual FoxPro 系统特点与工作方式

问题 2:Visual FoxPro 系统中各个项目的系统容量限制是如何规定的?


Visual FoxPro 的系统容量限制见表 2-2。

表 2-2 Visual FoxPro 的系统容量限制

分 类 项 目 容 量

每个表文件中记录的最大数目 10 亿

表文件大小的最大值 2G 字节

表 每个记录中字符的最大数目 65,500

文 每个记录中字段的最大数目 255

件 一次同时打开的表的最大数目 255

及 每个字段的最多字符数 254

索 单项索引(IDX)关键字表达式的最大字节数 100

引 复合索引(CDX)关键字表达式的最大字节数 240
文 每个表打开的索引文件数 无限制
件 所有工作区中最多打开的索引文件数 无限制

关系的最多个数 无限制

关系表达式的最大长度 无限制

字符型字段的最大字节数 254

数值型(包括浮动型)字段的最大字节数 20

自由表中各字段名的字符数的最大值 10

数据库包含的表中各字段名的字符数最大值 128

数值计算中精确值的位数 16

默认内存变量的个数 1024

内存变量 最多的内存变量个数 65000

和数组 最多的数组个数 65000

每个数组中元素的最大个数 65000

源程序文件中行的最大数目 无限制

单个编译的过程和函数的最大字节数 64K

每个文件中过程的最大数目 无限制

程序和 嵌套的 DO 调用的最大数目 128

过程文件 嵌套的 READ 层次的最大数目 5

嵌套的结构化程序的最大深度 384

传递参数的最大数目 27

事务处理的最大数目 5

报表定义中对象数的最大值 无限制
报表
报表定义的最大长度 20 英寸
设计器
报表分组的最大级数 128

− 21 −
等级考试学习笔记——二级 Visual FoxPro

续表

分 类 项 目 容 量

打开的窗口(各种类型)的最大数目 无限制

打开的“浏览”窗口的最大数目 255

每个字符串的最大字符数 16,777,184

其 每个命令行的最大字符数 8192

报表的每个标签控件中字符数的最大值 252

他 每个宏代换行中的最大字符数 8192

最多可打开的文件数 受操作系统控制

最大的键盘宏定义数 1024

SQL SELECT 语句可以选择的字段数的最大值 255

例题讲解

例题 1 单索引文件的扩展名是________。
A.cdx B.dbf C.idx D.dbc
【分析】.cdx 是复合索引文件的扩展名,.dbf 是数据表的扩展名,.idx 是单索引文件的扩
展名,.dbc 是数据库文件的扩展名。
【答案】C
例题 2 一次能同时打开的表的最大数目是________。
A.255 B.254 C.100 D.无限制
【分析】通过表 2-2 得知一次能同时打开的表的最大数目是 255。
【答案】A
例题 3 字符型字段的最大字节数是________。
A.255 B.254 C.100 D.无限制
【分析】通过表 2-2 可以得知字符型字段的最大字节数是 254。
【答案】B

2.3 Visual FoxPro 的工作方式


Visual FoxPro 有三种工作方式:利用菜单系统或工具栏按钮执行命令;在命令窗口直接
输入命令进行交互式操作;利用各种生成器自动产生程序,或者编写 FoxPro 程序(即命令文
件),然后执行它。前两种方式属于交互式工作方式,可以通过这两种方法得到同一结果,最
后一种方式为自动化工作方式。
问题 1:如何使用菜单进行操作?
− 22 −
第2章 Visual FoxPro 系统特点与工作方式

菜单系统是在交互方式下实现人机对话的工具。VFP 的菜单栏包括:文件(F) 、编辑(E)



显示(V) 、工具(T) 、程序(P)、项目(Q)、窗口(W) 、帮助(H)。
菜单操作可采用以下三种方法。
1.鼠标操作 用鼠标的左键单击菜单项,弹出下拉子菜单;单击所选择的项目,就会
激发与之相关的操作。
2.键盘操作 所有菜单项的名字中都有一个带下划线的字母,该字母是菜单的“热键” 。
对于主菜单栏,按住 Alt 键的同时按住所需菜单的“热键”就激活了该菜单项。如:Alt 键和
F 键激活“文件”菜单。在子菜单中,按住 Ctrl 键的同时按下相应的“热键” ,则执行相应菜
单项的功能。
3.光标操作 在选择子菜单时,按头键将光带移动到所需菜单选项上,然后按 Enter 键
即可激活相关操作。
另外,需要注意的是,菜单里的各个选项不是一成不变的。当前运行程序不同,所显示
的主菜单和下拉菜单的选项也不尽相同。
工具栏的使用则和菜单的操作很相似,此处不再赘述。
问题 2:如何使用命令窗口进行操作?
命令窗口是操作界面的一个重要部分,在该窗口中,可以直接键入 VFP 的各种命令,回
车后便可立即执行。
【特别提示】对已经执行的命令会在窗口中自动保留,如需要执行一个前面输入过的命
令,只要将光标移到该命令行所在的任意位置,按回车键即可。还可以对命令进行修改、删
除、剪切、复制、粘贴等操作。
有以下三种方法来打开与关闭命令窗口。
1.单击命令窗口右上角的 可关闭窗口。通过“窗口”菜单下的菜单项“窗口”即可
打开窗口。
2.单击“常用”工具栏上的“命令窗口”按钮,按下则显示命令窗口,弹起则隐藏命
令窗口。
3.按 Ctrl+F4 组合键关闭命令窗口,Ctrl+F2 组合键打开命令窗口。
问题 3:如何使用生成器进行操作?
生成器操作即利用项目管理器操作,项目管理器用图形化分类的方法来管理属于同一个
项目的文件,一个项目是文件、数据、文档和对象的集合,项目文件的扩展名为 pjx。
后面的章节将会详细介绍项目管理器。

例题讲解

例题 4 VFP 使用了三种不同的工作方式:即________、________、________。
【分析】采用命令交互方式工作时,用户发出的命令在命令窗口显示,命令执行的结果
则在 VFP 主窗口中显示。为了弥补这种方式的不足,在实际工作中常常根据需要解决的问题,
将命令编写成特定的序列,将它们存入程序文件(又叫命令文件) ,需要时再通过特定的命令
调用,VFP 就能自动执行这一程序文件。
【答案】命令操作方式 生成器操作方式 菜单操作方式
− 23 −
等级考试学习笔记——二级 Visual FoxPro

例题 5 Visual FoxPro 6.0 主菜单由________、________、________、________、________、


________、________等组成。
【分析】打开 VFP 6.0 可以看到,它的主菜单包括:文件、编辑、显示、工具、程序、窗
口、帮助等。
【答案】文件 编辑 显示 工具 程序 窗口 帮助

综合实例

1.(2004 年 4 月选择题第 6 题)
在 Visual FoxPro 中创建项目,系统将建立一个项目文件,项目文件的扩展名是________。
A.pro B.prj C.pjx D.itm
【分析】项目文件的扩展名为:pjx。其他三个选项都不是扩展名。
【答案】C
2.(2004 年 9 月填空题第 2 题)
在 Visual FoxPro 中项目文件的扩展名是________。
【分析】项目文件的扩展名为:pjx。
【答案】.pjx(或 pjx)
3.(2004 年 9 月选择题第 6 题)
扩展名为 dbf 的文件是________。
A.表文件 B.表单文件 C.数据库文件 D.项目文件
【分析】表文件的扩展名为 dbf,表单文件的扩展名为 scx,数据库文件的扩展名为 dbc,
项目文件的扩展名为 pjx。
【答案】A

本章总结
难点重点
1.Visual FoxPro 数据库系统与以前的各种版本相比,有哪些特点?
2.Visual FoxPro 的主要文件类型及其各项目的系统容量。
3.Visual FoxPro 的工作方式:交互方式(命令方式、可视化操作)和程序运行方式。
误点剖析
1.Visual FoxPro 数据库系统的特点应该熟练掌握,应该清楚 VFP 它与其他数据库的不
同之处。
2.Visual FoxPro 数据库系统中各个项目的系统容量限制要熟记。
3.Visual FoxPro 所包括的主要文件类型的扩展名是一个比较容易混淆的内容。

单元练习

1.扩展名为 dbc 的文件是________。

− 24 −
第2章 Visual FoxPro 系统特点与工作方式

A.表单文件 B.数据库表文件 C.数据库文件 D.项目文件


2.SQL SELECT 语句可以选择的字段数的最大值是________。
A.254 B.255 C.10 亿 D.128
3.Visual FoxPro 中每个表文件中记录的最大数目是________。
A.255 B.10 亿 C.无限定 D.244
4.Visual FoxPro 中能够打开的文件的最大数目是________。
A.254 B.10 亿 C.无限定 D.系统限制
5.字符型数据的最大长度是________。
A.254 B.10 C.20 D.255
6.Visual FoxPro 中每个记录中字符的最大数目是________。
A.254 B.10 亿 C.65500 D.20
7.Visual FoxPro 中一次同时打开的表的最大数目是________。
A.254 B.255 C.20 D.10
8.Visual FoxPro 中每个字段的最多字符数是________。
A.254 B.255 C.100 D.240
9.Visual FoxPro 中默认内存变量的个数是________。
A.1024 B.255 C.65500 D.240
10.Visual FoxPro 中数据库包含的表中各字段名的字符数最大值是________。
A.254 B.255 C.100 D.128

习题答案
1.C。表单文件的扩展名为 scx,数据库表文件的扩展名为 dbf,数据库文件的扩展名为
dbc,项目文件的扩展名为 pjx。
2.B。SQL SELECT 语句可以选择的字段数的最大值是 255。
3.B。VFP 中每个表文件中记录的最大数目是 10 亿。
4.D。VFP 中能够打开的文件的最大数目是受系统限制的。
5.A。VFP 中字符型数据的最大长度是 254。
6.C。VFP 中每个记录中字符的最大数目是 65500。
7.B。VFP 中一次同时打开的表的最大数目是 255。
8.A。VFP 中每个字段的最多字符数 254。
9.A。VFP 中默认内存变量的个数是 1024。
10.D。VFP 中数据库包含的表中各字段名的字符数最大值是 128。

− 25 −
等级考试学习笔记——二级 Visual FoxPro

第 3 章 数据与数据运算
在数据库系统中,数据是一个比较重要的、基本的因素。本章重点介绍数据和数据运算:
数据类型、常量、变量、表达式、常用函数(字符处理函数、数值计算函数、日期时间函数、
数据类型转换函数、测试函数)。

知识结构

− 26 −
第 3 章 数据与数据运算

大纲中的知识点

3.1 VFP 中的数据类型


问题 1:VFP 中的主要数据类型有哪些?
VFP 中的数据类型有字符型(C) 、数值型(N) 、货币型(Y) 、日期型(D) 、日期时间
型(T) 、逻辑型(L) 、备注型(M) 、通用型(G) 、整型(I) 、浮点型(F)
、双精度型(D)
等。下面具体地进行介绍。
1.字符型(Character)
字符型数据可以包括字符、汉字和符号。在 VFP 中,如果需要定义的数据包含了字母、
数字、空格、符号和标点时,就可以用字符型数据来表示。字符型字段或变量的长度不
能超过 254 个字节,每个字符占用一个字节,每个汉字占用两个字节。
2.数值型(Numeric)
数值型数据用来表示数量,由数字符号 0~9、小数点、正负号及 E 组成。数值型数据长
度不能超过 20 个字节,其中负号、小数点各占一位。数值型数据的取值范围在−0.999 999 999
9E+19 到+0.999 999 999 9E+20 之间。除了十进制数外,VFP 还支持十六进制数。
3.货币型(Currency)
在 VFP 中,如要表示货币,一般用货币型数据,而不用数值型数据。如货币型数据的小
数位数超过 4 位,系统会自动对其进行舍入处理。系统默认的货币符号是“$” ,可以用“Set
Currency ” 语 句 设 置 货 币 符 号 。 货 币 型 数 据 的 取 值 范 围 是 −922337203685477.5808 ~
922337203685477.5807,用 8 个字节存储。
4.日期型(Date)
日期型数据主要用来表示没有时间的日期值。日期型数据的存储格式为“yyyymmdd” ,
其中 yyyy 表示年,占 4 个字节,mm 表示月,占 2 个字节,dd 表示日,占 2 个字节。日期
格式和范围用“Set Date” 、“Set Mark To”、“Set Century”来确定。
5.日期时间型(Date Time)
日期时间型数据可以用来表示既包含时间又包含日期的数据,也可以表示只包含日期或
只包含时间的数据,如果只包含了时间,系统将 1899 年 12 月 30 日作为默认日期,如
果只包含了日期,系统将午夜 12 点作为默认时间。时间格式用“Set Hours” 、“Set Seconds”
来确定。日期时间型数据固定占用 8 个字节存储。
6.逻辑型(Logical)
逻辑型数据用来存储只有两个值的数据,存入的值为真(.T.)和假(.F.)两种状态。
7.备注型(Memo)
备注型数据只适用于表中的字段,备注字段固定为 4 个字节,用来表示一个指向存储备
注文件(.FPT.)内容的指针。实际备注内容的多少只受限于内存可用空间。备注可以包含任
意的数据。
8.通用型(General)
通用型数据用来存储 OLE 对象,仅适用于表中的字段。固定存储空间包含对 OLE 对象
− 27 −
等级考试学习笔记——二级 Visual FoxPro

的引用。一个 OLE 对象的具体内容可以是一个电子表、一个字处理文档、一幅图片等,这些


OLE 对象由相应的应用软件建立。通用型字段实际存储的内容、类型和数据量取决于建立该
OLE 对象的服务器以及是采用链接还是嵌入方式载入 OLE 对象。
9.整型(Integer)
整型用来表示整数类数值,仅适用于字段的定义。整型数据占用 4 个字节而且是用二进
制形式表示的,其取值介于−2 147 483 647 和 2 147 483 647 之间。
10.浮点型(Float)
浮点型与数值型是完全等价的。
11.双精度型(Double)
只用于字段的定义,固定占用 8 个字节,它不同于数值型数据的是其小数点位置由输入
的数据值来决定。

例题讲解

例题 1 (2002 年 9 月考试题)
在下面的数据类型中,默认值为.F.的是________。
A.数值型 B.字符型 C.逻辑型 D.日期型
【分析】本题是对 VFP 数据类型的考查,通过学习可以知道,逻辑型数据有两个值,一
个是.F.,一个是.T.。
【答案】C
例题 2 备注型字段固定为________个字节。
A.2 B.4 C.6 D.8
【分析】本题是对备注型数据的考查,通过学习可以知道,备注型字段固定为 4 个字节。
【答案】B

3.2 常量与变量
在 VFP 中,存储数据的常量、变量、数组、记录和对象属性等叫数据存储容器。下面主
要介绍常量、变量及数组,记录和对象属性则在以后的章节介绍。
问题 1:常量的主要类型有哪些?
在 VFP 中,常量是指一个具体的、不变的值。常量的类型如下。
1.数值型常量
数值型常量是指常数,表示一个数量的大小,由数字 0~9、小数点和正负号构成。如果
表示的数值型常量很大或很小,可以用科学记数法表示。
数值型常量在内存中占用 8 个字节,其取值范围是-0.999 999 999 9E+19~0.999 999 999
9E+20。
2.字符型常量
字符型常量又叫字符串,用半角单引号、双引号、方括号把字符串括起来。在这里,单
引号、双引号、方括号叫做定界符,许多常量都用到定界符。定界符不作为常量本身的内容,
− 28 −
第 3 章 数据与数据运算

它规定了常量的类型以及常量的起始和终止界限。
注意:① 字符型常量的定界符必须成对匹配,不能一边用单引号一边用双引号。如果
定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界。
② 不包含任何字符的字符串( “”
)叫空串。空串与包含空格的字符串( “ ”
)是不同的。
例题 3 字符型常量的显示结果。
在命令窗口输入以下几条命令:
? "中国海洋大学",'123',[电脑],['ABC' "abc"]
?? "工作",'数据'," ",[类型]
【分析】单一问号(?)命令的功能是在下一行显示若干个表达式的值。在此例中,仅显
示几个字符型常量。双问号(??)命令的功能是在同一行显示表达式的值。分别回车执行
上述命令之后,在主屏幕上的显示结果是:
中国海洋大学 123 电脑 'ABC' "abc" 工作 数据 类型
【答案】中国海洋大学 123 电脑 'ABC' "abc" 工作 数据 类型
3.日期型常量
日期型常量是指表示日期的常量。日期型常量的定界符是一对花括号,花括号内包括年、
月、日三部分,各部分间用分隔符分隔。系统默认斜杠(/)分隔符,常用的其他日期分隔符
有连字号(-) 、句点(.)和空格。
日期型常量的格式有以下两种。
(1)传统的日期格式
系统默认的日期型数据为美国日期格式“mm/dd/yy”(月/日/年),传统日期格式中的月
日各为 2 位数字,而年份可以是 2 位数字,也可以是 4 位数字,如{10/17/02}、{10-17-02}、
{10 17 2002}等。
这种格式的日期型常量要受到命令语句 SET DATE TO 和 SET CENTURY To 设置的影
响。在不同的设置状态下,计算机会对同一个日期型常量作出不同的解释。例如:{10/10/02}
可以被解释为:2002 年 10 月 10 日、2010 年 10 月 2 日、2110 年 10 月 2 日等。
(2)严格的日期格式
{^yyyy-mm-dd},用这种格式书写的日期常量能表达一个确切的日期,它不受 SET DATE
等语句设置的影响。这种格式的日期常量在书写时要注意:括号内第一个字符必须是脱字符
(^);年份必须用 4 位(如 2002、2001 等) ;年月日的次序不能颠倒、不能缺省。日期型数据
用 8 个字节来表示,取值范围是:{^0001-01-01}~{^9999-12-31}。
严格的日期格式可以在任何情况下使用,而传统的日期格式只能在 SET STRICTDATE
TO 0 状态下使用。输入日期型常量时使用严格的日期格式十分方便。
下面介绍影响日期格式的设置命令。注意:本书在介绍命令时,采用如下的约定,方括
号中的内容表示可选,用竖杠分隔的内容表示任选其一,尖括号中的内容由用户提供。
(1)命令格式:SET MARK TO [日期分隔符]
命令功能:用于指定的日期分隔符,如“-” 、“.”等。如果执行 SET MARK TO 没指定任
何分隔符,表示恢复系统默认的斜杠分隔符。
(2)命令格式:SET DATE [TO]AMERICAN|FRENCH|GERMAN|ITALIAN|JAPAN |USA
|MDY |DMY|YMD
− 29 −
等级考试学习笔记——二级 Visual FoxPro

命令功能:设置日期显示的格式。命令中各个短语所定义的日期格式见表 3-1。
表 3-1 日期格式定义表
短 语 格 式 短 语 格 式

AMERICAN mm/dd/yy ANSI yy.mm.dd

BRITISH/FRENCH dd/mm/yy GERMAN dd.mm.yy

ITALIAN dd-mm-yy JAPAN yy/mm/dd

USA mm-dd-yy MDY mm/dd/yy

DMY dd/mm/yy YMD yy/mm/dd

(3)命令格式:SET CNETURY ON/OFF


命令功能:用于设置年份的位数。
ON 设置年份用 4 位数字表示。
OFF 设置年份用 2 位数字表示。
(4)命令格式:SET STRICTDATE TO [0|1|2]
命令功能:用于设置是否对日期格式进行检查。
0 表示不进行严格的日期格式检查,目的是与早期 VFP 兼容。
1 表示进行严格的日期格式检查,它是系统默认的设置。
2 表示进行严格的日期格式检查,并且对 CTOD()和 CTOT()函数的格式也有效。
例题 4 在命令窗口键入如下 3 条命令,并分别回车执行:
SET CENTURY ON && 设置 4 位数字年份
SET MARK TO && 恢复系统默认的斜杠日期分隔符
SET DATE TO YMD && 设置年月日格式
?{^2003-03-20}
主屏幕显示:
2003/03/20
在命令窗口键入 4 条命令,并分别回车执行:
SET CENTURY OFF && 设置 2 位数字年份
SET MARK TO "·" && 设置日期分隔符为西文句号
SET DATE TO MDY && 设置月日格式
?{2003-03-20}
主屏幕显示:
03.20.03
接着在命令窗口键入如下两条命令,并分别回车执行:
SET STRICTDATE TO 0 && 不进行严格的日期格式检查
?{^2003-03-20},{03.20.03}
主屏幕显示:
03.20.03 03.20.03
在命令窗口键入如下两条命令,并分别回车执行:
SET MARK TO ";" && 设置日期分隔符为分号
− 30 −
第 3 章 数据与数据运算

?{^2003-03-20}, {03.20.03}
主屏幕显示:
03;20;03 03;20;03
本题在每个命令后作了解释。
4.日期时间型常量
日期时间型常量包括日期和时间两部分:{<日期>,<时间>}。<日期>部分与日期型常量
类似,也是分传统的和严格的两种格式。
<时间>部分的格式为:[hh[:mm[:ss]][a|p]]。其中 hh、mm 和 ss 分别代表时、分、秒,默
认值分别为 12、0 和 0。a 和 p 分别代表上午和下午,默认值是 a。如指定的时间大于等于 12,
则为下午的时间。
例题 5 在命令窗口键入如下命令:
SET MARK TO
?{^2003-03-20,10:20 P},{^2003-02-12,09:12,}
主屏幕显示:
03/20/03 10:20 PM 02/12/03 09:12 AM
时间的表示存在着许多等价的方法,如,00:00:00AM 等价于 12:00:00AM(午夜),
00:00:00PM 等价于 12:00:00PM (中午) ,00:00:00~11:59:59 等价于 12:00:00AM~11:59:59AM,
12:00:00~23:59:59 等价于 12:00:00PM~11:59:59PM。
日期时间型数据用 8 个字节存储。日期部分的取值范围与日期型数据相同,时间部分的
取值范围是:00:00:00AM~11:59:59 PM。
5.逻辑型常量
逻辑型数据只有逻辑真和逻辑假两个值。逻辑真的常量表示形式有:.T.、.t.、.Y.、.y.;
逻辑假的常量表示形式有:.f.、.F.、.N.、.n.。前后两个句点作为逻辑型常量的定界符是必不
可少的,否则会被误认为变量名。逻辑型数据只占用一个字节。
6.货币型常量
货币型常量用来表示货币值,其书写格式与数值型常量类似,但要加上一个前置的符号
($)。货币数据在存储和计算时,采用 4 位小数。如果一个货币型常量有多于 4 位小数,系统
将自动把多余的小数位四舍五入。货币型常量没有科学记数法形式,在内存中占用 8 个字节,
取值范围是:-922 337 203 685 477.580 7~922 377 203 685 477.580 7。
问题 2:变量的类型都有哪些?
变量指数据是能够随时更改的,VFP 的变量分为字段变量和内存变量。由于表中的各条
记录对同一个字段名可能取值不同,因此,表中的字段名就是变量,叫做字段变量。
内存变量是内存中的一个存储区域,变量值就是存放在这个存储区域里的数据,变量的
类型取决于变量值的类型。需要注意的是,变量的类型可以改变,即可以把不同类型的数据
赋给同一个变量。
内存变量的数据类型包括字符型(C) 、数值型(N)、日期型(D) 、日期时间型(T) 、
逻辑型(L) 、货币型(Y) 。下面具体的介绍内存变量的内容。
1.简单内存变量
每一个变量都有一个名字,可以通过变量名访问变量,如果当前表中存在一个同名的字
− 31 −
等级考试学习笔记——二级 Visual FoxPro

段变量,则在访问内存变量时,必须在内存变量名前加上前缀,即 M.(M->) ,否则系统将


访问同名的字段变量。
向简单内存变量赋值不必事先定义,变量的赋值命令有以下两种格式:
<内存变量名>=<表达式>
STORE<表达式>TO<内存变量表>
功能注释:
① 等号一次只能给一个内存变量赋值。STORE 命令可以同时给若干个变量赋给相同的
值,各内存变量之间必须用逗号分开。
② 在 VFP 中,一个变量在使用之前并不需要特别的声明或定义。当用 STORE 命令给变
量赋值时,如果该变量并不存在,那么系统自动建立它。
③ 可以通过对内存变量重新赋值来改变其内容和类型。
例题 6 在命令窗口输入如下命令:
store 12 to a
?a
主屏幕显示:
12
a=13
?a
主屏幕显示:
13
2.数组
数组是内存中一片连续的存储区域,由一系列元素组成,每个数组元素可通过数组名及
相应的下标来访问。每个数组元素相当于一个简单内存变量,可以给各个元素分别赋值。在
VFP 中,一个数组中各个元素的数据类型可以不同。
与简单内存变量不同,数组在使用前一般要用 DIMENSION 或 DECLARE 命令显示创
建,规定数组维数,数组名和数组大小,数组大小由下标值的上下限决定,下限规定为 1。
创建数组的命令格式如下:
DIMENSION<数组名>(<下标上限 1>[,<下标上限 2>])[,……]
DECLARE<数组名>(<下标上限 1>[,<下标上限 2>])[,……]
以上两种格式的功能完全相同,数组创建后,系统自动给每个数据元素赋以逻辑假.F.。
例如:DIMENSION x(4),y(2,3)命令定义了两个数组。
一维数组 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)。
整个数组的数据类型为 A(Array) ,每个数组元素可以存储不同类型的数据。
注意:
① 在一切使用简单内存变量的地方,都可以用数组元素。
② 在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。
③ 在同一个运行环境下,数组名不能与简单内存变量重复。
④ 在赋值语句中的表达式位置不能出现数组名。
− 32 −
第 3 章 数据与数据运算

问题 3:内存变量常用的命令有哪些?
1.内存变量的赋值
格式 1:STORE<表达式>TO<变量名表>
格式 2:<内存变量>=<表达式>
功能注释:
格式 1 计算表达式并将表达式值赋给一个或多个内存变量。格式 2 只能给一个变量赋值。
2.表达式值的显示
格式 1:?[<表达式表>]
格式 2:??<表达式表>
功能注释:
计算表达式表中的各表达式并输出各表达式的值。
不管有没有指定表达式表,格式 1 都会输出一个回车换行符。如果指定了表达式表,各
表达式值将在下一行的起始处输出。
格式 2 不会输出一个回车换行符,各表达式值在当前行的光标所在处直接输出。
3.内存变量的显示
格式 1:LIST MEMORY[LIKE<通配符>][TO PRINTER∣TO FILE <文件名>]
格式 2:DISPLAY MEMORY [LIKE<通配符>][TO PRINTER∣TO FILE<文件名>]
功能注释:
显示内存变量的当前信息,包括变量名、作用域、类型、取值。
选用 LIKE 短语只能显示与通配符相匹配的内存变量。通配符包括*和?,*表示任意多个
字符,?表示任意一个字符。
可选子句 TO PRINTER 或 TO FILE<文件名>用于在显示的同时送往打印机或者存入给
定文件名的文本文件中,扩展名为.txt。
LIST MEMORY 一次显示与通配符匹配的所有内存变量,如内存变量多,一屏显示不下,
则自动向上滚动。DISPLAY MEMORY 分屏显示与通配符匹配的所有内存变量,如内存变量
多,显示一屏后暂停,按任意键之后再继续显示下一屏。
4.内存变量的清除
格式 1:CLEAR MEMORY
格式 2:RELEASE <内存变量名表>
格式 3:RELEASE ALL [EXTENDED]
格式 4:RELEASE ALL [LIKE<通配符>|EXCEPT<通配符>]
功能注释:
格式 1 清除所有内存变量。格式 2 清除指定的内存变量。
格式 3 清除所有的内存变量。在人机会话的状态其作用与格式 1 相同。如果出现在程序
中,则应该加上短语 EXTENDED,否则不能删除公共内存变量。
格式 4 选用 LIKE 短语清除与通配符相匹配的内存变量,选用 EXCEPT 短语清除与通配
符不相匹配的内存变量。
例如:RELEASE ALL LIKE A*表示只清除所有变量名以 A 开头的内存变量。
RELEASE ALL EXCEPT A?表示将现有的内存变量中除去变量名为两个字符并且以 A
− 33 −
等级考试学习笔记——二级 Visual FoxPro

开头的变量之外的其他内存变量清除。如果其出现在程序中,该命令不能清除公共内存变量。
例题 7 在命令窗口中依次输入下列命令,命令格式及屏幕显示如下:
CLEAR MEMORY
DIMENSION y(2,2)
STORE 'xx' TO x1,y(1,1)
Y(3)={^2003-03-20}
x2=$100
LIST MEMO LIKE y*
Y Pub A
(1,1) C "xx"
(1,2) L .F.
(2,1) D 03/20/03
(2,2) L .F.
RELEASE ALL LIKE y*
X={^2003-03-20,10:12 p}
LIST MEMO LIKE x*
X Pub T 03/20/03 10:12 PM
X1 Pub C "xx"
X2 Pub Y 100
5.表中数据与数组数据之间的交换
表文件的数据内容是以记录的方式存储和使用的,而数组是把一批数据组织在一起的数
据处理方法,为了使它们之间方便地进行数据交换,以利于程序的使用,Visual FoxPro 提供
了数据传递的功能。
(1)将表的当前记录复制到数组
格式 1:SCATTER [FIELDS<字段名表>][MEMO] TO <数组名>[BLANK]
格式 2:SCATTER [FIELDS LIKE<通配符>|FIELDS EXCEPT<通配符>][MEMO]
功能注释:
格式 1 的功能是将表的当前记录从指定的字段表中的第一个字段内容开始,依次复制到
数组从第一个数组元素开始的内存变量中。如果不使用 FIELDS 短语指定字段,则复制除备
注型 M 和通用型 G 之外的全部字段。
如果事先没有创建数组,系统将自动创建;如果已创建的数组元素个数少于字段数,系
统自动建立其余数组元素;如果已创建的数组元素个数多于字段数,其余数组元素的值保持
不变。
如果选用 MEMO 短语,则同时复制备注型字段。如果选用 BLANK 短语,则产生一个
空数组,各数组元素的类型和大小与表中当前记录的对应字段相同。
格式 2 的功能是用通配符指定包括或排除的字段。FIELDS LIKE<通配符>和 FIELDS
EXCEPT<通配符>可以同时使用。
例题 8 打开表文件“学生.dbf” ,包括 5 个字段:
学号(C,4) 、姓名(C,6) 、性别(C,2) 、政治面貌(C,4) 、入学日期(D,8)
− 34 −
第 3 章 数据与数据运算

当前记录为第一条记录,把它复制到数组 XS 中。
USE 学生 && 打开学生表
SCATTER TO XS
? XS(1),XS(2),XS(3),XS(4),XS(5)
1001 黎明 男 团员 09/10/02
(2)将数组数据复制到表的当前记录
格式 1:GATHER FROM<数组名>[FIELDS<字段名>][MEMO]
格式 2:GATHER FROM <数组名>[FIELDS LIKE <通配符>|FIELDS EXCEPT <通配
符>][MEMO]
功能注释:
格式 1 的功能是将数组中的数据作为一个记录复制到表的当前记录中,从第一个数组元
素开始,依次向字段名表指定的字段填写数据。如果缺省 FIELDS 选项,则依次向各个字段
复制,如数组元素个数多于记录中字段的个数,则多余部分被忽略。如选用 MEMO 短语,
则在复制时包括备注型字段;否则备注型字段不考虑。
格式 2 的功能是用通配符指定包括或排除的字段。FIELDS LIKE<通配符>和 FIELDS
EXCEPT<通配符>可以同时使用。
例题 9 打开表文件“学生.dbf” ,追加一条空记录,将一个数组 CC 中的内容复制到空
记录中。注意数组中各个数组元素的数据类型必须与字段的数据类型对应一致。
DIMENSION CC(1,4) && 创建一个一维数组
CC(1,1)= "1002"
CC(1,2)= "白云"
CC(1,3)= "女"
CC(1,4)= "团员"
USE 学生 && 打开学生表
APPEND BLANK && 在表中追加一条空记录(以后将会介绍此命令)
GATHER FROM CC && 将数组数据复制到表的当前记录
?学号,姓名,性别,政治面貌 && 显示字段变量
1002 白云 女 团员

例题讲解

例题 10 下列字符型常量表达不正确的是________。
A."2003" B.'2003" C.[2003] D." [2003] "
【分析】字符型常量必须用定界符界定,即用半角单引号、双引号、方括号把字符串括
起来,定界符必须成对匹配,不能一边用单引号一边用双引号。
【答案】B
例题 11 使用命令 DECLARE cc(2,3)定义的数组,包含的数组元素(下标变量)的个
数为________。
A.2 个 B.3 个 C.6 个 D.7 个
− 35 −
等级考试学习笔记——二级 Visual FoxPro

【分析】此题是对 DECLARE 命令的考查,此命令创建了一个二维数组,数组元素是


2*3=6 个。
【答案】C
例题 12 (2003 年 4 月 考试题)
在 VFP 中说明数组后,数组的每个元素在未赋值之前的默认值是________。
【分析】数组在使用前一般用 DIMENSION 或 DECLARE 命令创建,数组创建后,系统
自动给每个元素赋以逻辑值.F.。
【答案】逻辑值.F.。

3.3 表达式
在 VFP 中,将变量、数组元素、常量、函数以及运算符组合而成的有意义的式子,叫做
表达式。每个表达式都有一定的数据类型,VFP 中的表达式主要有字符表达式、数值表达式、
日期表达式、逻辑表达式、关系表达式和名表达式。下面将详细介绍表达式和运算符。
问题 1:表达式的类型都有哪些?
1.字符表达式及其运算符
字符型表达式的主要运算符有三个: “+”
、“−”
、“$”
,优先级是“+”、
“−”优先于“$”。
具体见表 3-2。

表 3-2 字符运算符

运算符 作 用 例 子

+ 将两个串连接起来,参加连接的串可以是字符串、字符字段、内存变量 “V ”+“FP”
,结果显示 “V FP”

- 如第一个字符串后无空格,则同“+“;如有空格,连接后,将空格移到最后 “V ”-“FP”
,结果显示“VFP ”

$ 如一个字符表达式包含在另一个字符表达式中,则返回逻辑值真(.T.);否则, “father”$“GrandFather”的结果是.F.
返回“假”
(.F.)

2.数值表达式及运算符
数值运算符应用于各种数值型(包括整型、双精度型等)数据,其优先级如表 3-3 所示
从高到低排列,表中同一行的运算符按出现在表达式的先后顺序执行。

表 3-3 数值运算符

运 算 符 作 用 例 子

**或^ 乘方运算 3**2 也可写成 3^2

*、/ 乘和除运算 1/2*3 结果为 1.5

% 取模运算 15%4 的结果是 3

+、- 加和减运算 2-4+5 结果是 3

3.日期及日期时间型表达式及运算符
对于 D 和 T 型的数据,其运算符只有“+”和“−”
。见表 3-4。

− 36 −
第 3 章 数据与数据运算

表 3-4 日期运算符
运 算 符 作 用 例 子

+ 日期型可以与 N 型加为日期型;两个日期型不能相加 {^2002-11-10,11:00:00a}+60 结 果 显 示

11/10/02 11:01:00 AM

− 将两个日期(时间)型数据相减,或日期(时间)型与代表日或秒 {^2002-11-10}−{^2002-11-08}结果显示 2

的整数相减,形成新日期(时间)

4.关系表达式及运算符
关系运算符可以用于任何的数据类型,用关系运算符连接常量、变量等而构成的关系表
达式的返回值是逻辑型。关系运算主要是同类型数据之间的比较运算,然后返回一个逻辑值
表示比较的关系是否成立。见表 3-5。

表 3-5 关系运算符
运 算 符 作 用 例 子

< 小于比较 23<24 的返回值为.T.

> 大于比较 23>24 的返回值为.F.

= 等于比较 23=24 的返回值为.F.

<>,#,!= 不等于比较 23<>24 的返回值为.T.

<= 小于或等于(不大于)比较 23<=24 的返回值为.T.

>= 大于或等于(不小于)比较 23>=24 的返回值为.F.

== 对字符串进行严格的比较运算:一个字符串中的每个字符必须等同于 “This is ”==“This is”的比较结果

另一个字符串中的相应字符 是.F.

5.逻辑表达式及运算符
逻辑表达式只有两个值,逻辑真和逻辑假。它可以包含下列的 VFP 元素:逻辑型字段、
逻辑型内存变量和常量、返回值为逻辑值的函数以及关系表达式等。逻辑型运算符按优先顺
序依次为.NOT.或!、.AND.、.OR.。见表 3-6。

表 3-6 逻辑运算符
运 算 符 作 用 例 子

() 建立一个子表达式,用来改变表达式中的 ‘ab’+(‘cd ’-‘ef’),先连接‘cd ’、


‘ef ’

运算顺序

.NOT.或! 逻辑非,用来对逻辑值取反 NOT 2=2 的结果是.F.

.AND. 逻辑与,用来对两个逻辑值进行与操作 2=2 AND .F.结果是.F.

.OR. 逻辑或,用来对两个逻辑值进行或操作 2=2 OR .F.结果是.T.

在字符运算符、日期和时间运算符、数值运算符、关系运算符和逻辑运算符混合运算的
表达式中,字符、日期和时间、数值运算符的优先级要高于关系运算符,关系运算符的优先
级则高于逻辑运算符,括号运算符“()”是所有运算符中优先级最高的。

− 37 −
等级考试学习笔记——二级 Visual FoxPro

例题 13

6.名表达式
在 VFP 中,可以建立一个名表达式替代字符变量或数字元素中的值。将一个名表达式存
入内存变量或数组元素中后,就可以在命令或函数中引用这个名,具体操作就是用一对括号
将存储名表达式的变量或数组元素括起来,这也叫间接引用。例如:要浏览“姓名”字段,
用名表达式表示如下。
STORE '姓名' TO XM
BROWSE FIELDS (XM)
注意:
名表达式不是变量或数组元素,也不是一个字段,它不能用引号引起,否则会导致错误。
在多个名之间需要用逗号进行分隔,这样可将多个名存入一个变量中。
例题 14
STORE '姓名,性别' TO XM
BROWSE FIELDS (XM)
7.宏替换
存入内存变量或数组元素中的名,除了通过上面介绍的间接引用的方式外,还可以利用
宏替换。宏替换的形式是:&<var>.。其中<var>.代表字符型内存变量,圆点字符(.)指示宏
替换结束。在 VFP 中,进行宏替换时,将使用要替换的变量中的内容来代换“&”及这个变
量名和圆点符。
例题 15
a='海洋'
?'中国 &a.大学'
将显示字符串“中国海洋大学” 。此例中,命令?表示显示表达式的结果。

例题讲解

例题 16 (2003 年 4 月考试题)
在 Visual FoxPro 中,下面 4 个关于日期或日期时间的表达式中,错误的是________。
A.{^2002.09.01 11:10:10AM}-{^2001.09.01 11:10:10AM}
− 38 −
第 3 章 数据与数据运算

B.{^01/01/2002}+20
C.{^2002.02.01}+{^2001.02.01}
D.{^2000/02/01}−{^2001/02/01}
【分析】本题是对日期时间格式的考查,A 是表示两个时间相差的天数,B 是表示前面日
期加上 20 天以后的日期,D 是表示两个日期相差的天数。只有 C 项是错误的。
【答案】C
例题 17 进行逻辑运算时,逻辑运算符的优先顺序是________、________、________。
【分析】逻辑型运算符按优先顺序依次为.NOT.或! (逻辑非)
、.AND.(逻辑与)
、.OR.(逻
辑或) 。
【答案】.NOT. . AND. . OR.

3.4 常用函数
在 VFP 中,函数是一个非常重要的部分,它用程序来实现数据运算或转换。每个函数都
有自己的特定的数据运算或转换功能,往往需要若干个变量,即运算对象,但只能有一个运
算结果,叫做函数值或返回值。函数的一般调用形式是:<函数名>([<参数 1>,<参数 2>,...])。
VFP 提供了大量函数,这里主要介绍常用的函数,如:字符处理函数、数值处理函数、
日期及时间函数、数据类型转换函数、测试函数等,其他相关函数在以后各章节中将再作
介绍。
问题 1:字符处理函数的概念是什么?它都包含哪些函数?
字符处理函数一般是指变量是字符型数据的函数。它的主要功能有:完成字符串测试、
字符串的截取、加长、生成和置换等。
1.字符串位置和长度测试
(1)字符串位置测试
格式:AT(<字符表达式 1>,<字符表达式 2>[,<数值表达式>])
功能注释:
返回<字符表达式 1>在<字符表达式 2>中第<数值表达式>次出现的位置。如果未找
到,AT()将返回数值 0。字符表达式 1、2 均可以是备注型字段。<数值表达式>缺省值为 1。
AT()函数区分字母的大小写,如果不希望区分大小写,应使用 ATC()函数,其格式与 AT()
相同。
例题 18 ?AT("A","ABC") && 显示 1
注意:此例中,&&表示其后面的部分为注释。
(2)字符串长度测试
格式:LEN(<字符表达式>)
功能注释:测试<字符表达式>的长度。<字符表达式>可以是字段或内存变量,但是必须
是字符型表达式。
例题 19 ?LEN("中国") && 显示 4
注意:一个汉字占两个字节。
(3)统计字符串出现次数
− 39 −
等级考试学习笔记——二级 Visual FoxPro

格式:OCCURS(<字符表达式 1>,<字符表达式 2>)


功能注释:返回<字符表达式 1>在<字符表达式 2>中出现的次数。函数值为数值型。若
第一个字符串不是第二个字符串的子串,函数值为 0。
例题 20 ?OCCURS('a', 'aba'),OCCURS(' a', 'bc') && 显示 2 0
2.字符串截取、加长和替换
(1)字符串截取
字符串截取是指从一个字符串中取相应的子串。
① 格式:SUBSTR(<字符表达式>,<数值表达式 1>[,<数值表达式 2>])
功能注释:将从<字符表达式>中的第<数值表达式 1>个字符开始,截取并返回<数值表
达式 2>个字符。如果省略<数值表达式 2>,则截取的子串结束于<字符表达式>的最后一个字
符。<字符表达式>可以是备注型字段。
例题 21 A="中国海洋大学"
?SUBSTR(A,3,4) && 结果是“海洋”
② 格式:LEFT(<字符表达式>,<数值表达式>)
功能注释:从字符串的最左边开始,截取并返回<数值表达式>个字符串。若<数值表达
式>的值大于<字符表达式>的长度,则返回整个串;若小于等于零,则返回空串。
例题 22 A="中国海洋大学"
?LEFT(A,4) && 结果是“中国”
③ 格式:RIGHT(<字符表达式>,<数值表达式>)
功能注释:从最右边开始向左截取<数值表达式>个字符串。
例题 23 A="中国海洋大学"
?RIGHT(A,4) && 结果是“大学”
(2)截掉空格
格式:ALLTRIM(<字符表达式>)
功能注释:返回删除了头部和尾部空格的字符串。与此相关的函数如下。
LTRIM(<字符表达式>):返回删除了头部空格的字符串。
RTRIM(<字符表达式>):返回删除了尾部空格的字符串。
TRIM(<字符表达式>):与 RTRIM()函数作用相同。
(3)生成字符串
字符串中的空格可以去掉,其中的空格、字符也可以生成。
格式:REPLICATE(<字符表达式>,<数值表达式>)
功能注释:返回<字符表达式>被复制<数值表达式>次后形成的字符串。
例题 24 ?REPLICATE('*',5) && 显示 *****
格式:SPACE(<数值表达式>)
功能注释:返回由<数值表达式>个的空格组成的字符串。
例题 25 ?LEN(SPACE(5)) && 显示 5
从这个例子可以看出,SPACE()是 REPLICATE()的一个特例。
(4)字符串替换
常常需要将一个字符串中的一个子串用另一个子串替换,形成新的字符串。
− 40 −
第 3 章 数据与数据运算

① 字符替换函数
格式:CHRTRAN(<字符表达式 1>,<字符表达式 2>,<字符表达式 3>)
功能注释:用<字符表达式 3>替换<字符表达式 1>中与<字符表达式 2>匹配的字符。如
果<字符表达式 3>中的字符比<字符表达式 2>少,则<字符表达式 2>中多余的字符被置为空
串 NULL;如果<字符表达式 3>中的字符比<字符表达式 2>多,则<字符表达式 3>中多余的
字符被忽略。
例题 26 ?CHRTRAN("青岛海洋大学","青岛","中国")
?CHRTRAN("青岛海洋大学","青岛","中国 001")
?CHRTRAN("青岛海洋大学","青岛","中")
显示的结果是:
中国海洋大学
中国海洋大学
中海洋大学
② 子串替换函数
格式:STUFF(<字符表达式 1>,<数值表达式 1>,<数值表达式 2>,<字符表达式 2>)
功能注释:用<字符表达式 2>指定的替换子串去替换由<字符表达式 1>指定的主串中从
<数值表达式 1>开始的<数值表达式 2>个字符,然后返回替换后的新串。如果<数值表达式 2>
等于 0,则直接插入<字符表达式 2>这个替换子串。如果<字符表达式 2>是空串,则从<字符
表达式 1>中删除<数值表达式 2>个字符。
例题 27 ?STUFF("青岛海洋大学",1,4,"中国")
?STUFF("青岛海洋大学",1,0,"中国")
?STUFF("青岛海洋大学",1,4," ")
显示的结果是:
中国海洋大学
中国青岛海洋大学
海洋大学
3.字符转换
(1)数值、字符之间的相互转换
格式:ASC(<字符表达式>)
功能注释:每个字符都有惟一的,且值在 0~255 之间的 ASCII 码值。此函数返回<字符
表达式>中第一个字符的 ASCII 码值,其余字符都被忽略。与该函数作用相反的函数是
CHR(<数值表达式>),它返回与<数值表达式>对应的 ASCII 码所代表的字符。
例题 28 ?ASC("ABC") && 显示字符"A"的 ASCII 码值:65
?CHR(65) && 显示 ASCII 码值为 65 的字符"A"
(2)大小写转换函数
格式:LOWER(<字符表达式>)
功能注释:把<字符表达式>中的所有大写字母转换为小写字母。
格式:UPPER(<字符表达式>)
功能注释:把<字符表达式>中的所有小写字母转换为大写字母。
− 41 −
等级考试学习笔记——二级 Visual FoxPro

例题 29 ?LOWER("XYa") && 显示 xya


? UPPER("abX") && 显示 ABX
(3)求值函数
格式:EVALUATE(<字符表达式>)
功能注释:计算该字符表达式的值并返回结果。该表达式可以是用定界符括起来的字符
串、合法的表达式、内存变量、数组元素或任何数据类型的字段。
例题 30 ?EVALUATE("DATE()") && 显示当前的日期
a1="ABC"
a2=a1
? EVALUATE(a2) && 显示 ABC,与宏替换 a2 的结果是一样的
问题 2:数值计算函数包含哪些?
数值计算函数是指函数值为数值的一类函数,它们的自变量一般也是数值型数据。
1.绝对值和符号函数
格式:ABS(<数值表达式>)
SIGN(<数值表达式>)
功能注释:ABS()返回<数值表达式>的绝对值。
SIGN()返回<数值表达式>的符号。当表达式的运算结果为正、负和零时,函数值分别为
1、−1 和 0。
例题 31 ?ABS(5),ABS(−5),SIGN(5),SIGN(−5)
5 5 1 −1
2.求平方根函数
格式:SQRT(<数值表达式>)
功能注释:返回<数值表达式>的平方根,表达式的值不能为负。
例题 32 x=100
?SQRT(x)
10
另外,此例还可用另一种方法来解:
x=100
?100^(1/2)
10
从上面这个例子可以看出,用 SQRT()函数比用开平方简洁一点。
3.圆周率函数
格式:PI()
功能注释:返回圆周率П(数值型) 。该函数没有自变量。
4.求整数函数
(1)格式:INT(<数值表达式>)
功能注释:返回<数值表达式>的整数部分。
(2)格式:CEILING(<数值表达式>)
功能注释:返回大于或等于<数值表达式>的最小整数。
− 42 −
第 3 章 数据与数据运算

(3)格式:FLOOR(<数值表达式>)
功能注释:返回小于或等于<数值表达式>的最大整数。
例题 33 x=6.2
?INT(x),INT(−x),CEILING(x),CEILING(−x),FLOOR(x),FLOOR(−x)
6 −6 7 −6 6 −7
5.四舍五入函数
格式:ROUND(<数值表达式 1>,<数值表达式 2>)
功能注释:返回<数值表达式 1>在指定<数值表达式 2>处四舍五入后的结果。若<数值表
达式 2>大于等于 0,则表示要保留的小数位数;若<数值表达式 2>小于 0,则表示整数部分
的舍入位数。
例题 34 X=123.321
?ROUND(X,2)ROUND(X,0)ROUND(X,−2)
123.32 123 100
6.求余数函数
格式:MOD(<数值表达式 1>,<数值表达式 2>)
功能注释:返回两个数值相除后的余数。<数值表达式 1>是被除数,<数值表达式 2>是
除数。余数的正负号与除数的相同。如果被除数与除数同号,则函数值即为两数相除的余数;
如果被除数与除数异号,则函数值为两数相除的余数再加上除数的值。被除数的小数位数决
定了结果的小数位数。另外,MOD()和%运算结果相同。
例题 35 ?MOD(42.20,−4.0),MOD(42.20,4.0),MOD(−42.20,4.0),MOD(−42.20,−4.0)
−1.80 2.20 1.80 −2.20
7.求最大值和最小值
(1)格式:MAX(<表达式 1>,<表达式 2>[,<表达式 3>…])
功能注释:返回具有最高 ASCII 码值、最大值或最近日期的表达式。
(2)格式:MIN(<表达式 1>,<表达式 2>[,<表达式 3>…])
功能注释:返回具有最低 ASCII 码值、最小值或最远日期的表达式。
注意:以上的两个函数中的表达式可以是数值型、字符型、货币型、双精度型、浮点型、
日期型和日期时间型,但是所有的表达式必须具有相同的数据类型。
例题 36 ?MAX(54,39,100),MAX('2', '12', '05'),MIN("abc","abd","aade")
100 2 "aade"
8.求 e 底指数函数
格式:EXP(<数值表达式>)
功能注释:返回<数值表达式>的 e 底指数函数的值。此类函数返回值的小数位数取决于
SET DECIMALS 的设置和<数值表达式>中的小数位数。
例题 37 ?EXP(1),EXP(1.0000),
2.72 2.7183
SET DECIMALS TO 3
?EXP(1)
2.718
− 43 −
等级考试学习笔记——二级 Visual FoxPro

问题 3:日期和时间函数具体包含哪些种类?
日期和时间函数的自变量一般是日期型数据或日期时间型数据。
1.系统日期和时间函数
(1)格式:DATE()
功能注释:返回当前系统的日期,函数值为日期型。
(2)格式:TIME()
功能注释:以 24 小时制、hh:mm:ss 格式返回当前系统时间,函数值为字符型。
(3)格式:DATETIME()
功能注释:返回当前系统日期时间,函数值为日期时间型。
2.求年份、月份、星期和天数函数
(1)格式:YEAR(<日期表达式>|<日期时间表达式>)
功能注释:从<日期表达式>或<日期时间表达式>中返回年。
(2)格式:MONTH(<日期表达式>|<日期时间表达式>)
功能注释:从<日期表达式>或<日期时间表达式>中返回月。
(3)格式:WEEK(<日期(时间)型表达式>)
功能注释:从<日期(时间)表达式>中返回代表一年中第几周的数值。
(4)格式:DAY(<日期表达式>|<日期时间表达式>)
功能注释:从<日期表达式>或<日期时间表达式>中返回日。
注意:以上几个函数的返回值都是数值型。
例题 38 ?YEAR(DATE()),MONTH(DATE()),DAY(DATE())
【答案】分别返回当前系统日期的年、月、日。
3.求时、分、秒函数
(1)格式:HOUR(<日期时间表达式>)
功能注释:从<日期时间表达式>中返回小时部分(24 小时制) 。
(2)格式:MINUTE(<日期时间表达式>)
功能注释:从<日期时间表达式>中返回分钟部分。
(3)格式:SEC(<日期时间表达式>)
功能注释:从<日期时间表达式中>返回秒数部分。
注意:以上这三个函数的返回值也是数值型。
例题 39 ?HOUR(TIME()),MINUTE(TIME()),SEC(TIME())
【答案】分别返回当前系统时间的小时、分钟、秒。
4.其他相关函数
格式:CMONTH(<日期表达式>)
功能注释:返回<日期表达式>中月份的英文名称。
格式:CDOW(<日期表达式>)
功能注释:根 据<日期 表达式>求 出是星期 几。该 函数的返回值 是如“SUNDAY”
“MONDAY”等的字符串。函数 DOW(<日期表达式>)的作用与之相同,但其返回值是数
值型,介于 1~7 之间,表示从星期日到星期六。

− 44 −
第 3 章 数据与数据运算

问题 4:数据类型转换函数具体包含哪些种类?
数据类型转换函数的功能是将某一种类型的数据转换成另一种类型的数据。
1.数值转换成字符串
格式:STR(<数值表达式 1>[,<数值表达式 2>[,<数值表达式 3>]])
功能注释:将数值表达式的值转换成字符串。
其中,<数值表达式 1>是被转换的数值表达式
<数值表达式 2>是转换后的字符串长度
<数值表达式 3>是小数点后边的数字字符的个数。
在这里,如果<数值表达式 2>大于数值的实际长度,则在数字串左边补充空格;如果
<数值表达式 2>小于数值的实际长度,则函数将输出星号。如果不选可选项,则保留 10 位整
数,不足前面用空格补足。
注意:[]里的项是可选项。
例题 40 A=100.100
?STR(A,3) && 显示 100
?STR(A,10,4) && 显示 100.1000 前面有 2 个空格
?STR(A,1) && 显示*
2.字符串转换成数值
格式:VAL(<字符表达式>)
功能注释:将<字符表达式>转换成数值。VAL()按从左到右的顺序处理字符表达式,直
到遇到一个非数值字符(不包括科学记数指示符“E”)。在处理过程中头部空格被忽略。如
果字符表达式的第一个字符不是数字,VAL()将返回数值 0。
例题 41 STORE '−123.' TO X
STORE '45' TO Y
STORE 'A45' TO Z
?VAL(X+Y),VAL(X+Z),VAL(Z+Y)
−123.45 −123.00 0.00
3.字符串转换成日期或日期时间
(1)格式:CTOD(<字符表达式>)
功能注释:将<字符表达式>转换成日期型数据。
(2)格式:CTOT(<字符表达式>)
功能注释:将<字符表达式>转换成日期时间型数据。
注意:字符串中的日期部分格式要与 SET DATE TO 命令设置的格式一致。其中的年份
可以用 4 位,也可以用 2 位。如果用 2 位,则世纪由 SET CENTURY TO 语句指定。
例题 42 SET DATE TO ABC
SET CENTURY ON
SET CENTURY TO 19
d1=CTOD('2002/11/14')
t1=CTOT('2002/11/14'+'TIME()')
?d1,t1,CTOD('50/01/02'),CTOD('51/01/01')
− 45 −
等级考试学习笔记——二级 Visual FoxPro

2002/11/14 2002/11/14 01:51:10 PM 2050/01/02 1951/01/02


注意:SET CENTURY TO 语句指定:小于 51 的两位数年份属于 21 世纪,而大于等于
51 的两位数年份属于 20 世纪。
4.日期或日期时间转换成字符串
(1)格式:DTOC(<日期表达式|日期时间表达式>[,1])
功能注释:将日期型数据或日期时间数据的日期部分转换成字符串。
(2)格式:TTOC(<日期时间表达式>[,1])
功能注释:将日期时间数据转换成字符串。
注意:字符串中日期部分的格式与 SET DATE TO 语句的设置和 SET CENTURY ON |OFF
(ON 为 4 位数年份, OFF 为 2 位数年份)语句的设置有关。时间部分的格式受 SET HOURS TO
12|24 语句的设置影响。
对 DTOC()来说,如使用选项 1,则字符串的格式总是为 YYYYMMDD,一共 8 个字符。
对 TTOC()来说,如果使用选项 1,则字符串的格式总是为 YYYYMMDDHHMMSS,采用 24
小时制,一共 14 个字符。
例题 43 ?DTOC(DATETIME()),DTOC(DATETIME(),1),
TTOC(DATETIME()),TTOC(DATETIME(),1)
11/14/02 20021114 11/14/02 02:13:10 PM 20021114141310
5.其他日期时间函数
格式:DTOS(<日期表达式>)
功能注释:将<日期表达式>转换成由 8 个数字组成的“YYYYMMDD”形式的字符串并
返回,此函数特别适用于对日期型字段建立索引,DTOS()的返回值不受 SET DATE 和 SET
CENTURY 命令影响。
例题 44 ?DTOS(DATE())
20021114
问题 5:测试函数具体包含哪些种类?
对数据库中的数据进行处理时,有时需要了解所操作的对象的状态,比如:数据库的当
前记录号、所使用的文件是否存在、是否到达了文件末尾、检索是否成功、数据类型等信息。
这就需要用到测试函数。
1.值域测试函数
格式:BETWEEN(<被测表达式>,<表达式下限>,<表达式上限>)
功能注释:判断<被测表达式>的值是否在另外两个相同的数据类型的表达式之间。如果是返
回.T.;否则返回.F.。如果<表达式下限>或<表达式上限>有一个是 NULL 值,则函数值是 NULL 值。
例题 45 STORE .NULL. TO X
?BETWEEN(100,90,190),BETWEEN(90,X,100)
.T. .NULL.
2.表达式是否为空测试
格式:EMPTY(<表达式>)
功能注释:测试表达式是否有内容。一个变量无值时为空,表达式可以是任何类型。
注意:这里的空和空格是两回事。表 3-7 中的情况下,返回为.T.。
− 46 −
第 3 章 数据与数据运算

表 3-7 不同类型数据的“空”值规定
数据类型 “空”值 数据类型 “空”值

字符型 空,空格符,制表符,回车换行符,或它们的组合 逻辑型 .F.

数值型 0 备注型 空(无内容)

日期型 空(例如 CTOD("")) 浮点型 0

日期时间型 空(例如 CTOT("")) 整型 0

货币型 0 双精度型 0

通用型 空(无 OLE 对象)

3.表达式类型测试
格式:VARTYPE(<表达式>[,<逻辑表达式>])
功能注释:返回指定的字段或表达式的数据类型。该函数先对表达式进行类型测试,然
后返回一个描述表达式数据类型的字符。见表 3-8。
表 3-8 VARTYPE()函数中数据类型对应的返回字符
数 据 类 型 返 回 字 符

字符型 C

数值型(整型、浮点型、双精度型) N

货币型 Y

日期型 D

日期时间型 T

逻辑型 L

对象型 O

备注型 M

通用型 G

未定义类型的表达式 U

NULL 值 X

注意:若表达式是一个数组,则根据第一个数组元素的类型返回字符串;如果表达式的
运算结果是 NULL 值,则根据<逻辑表达式>值决定是否返回<表达式>的类型;如果<逻辑表
达式>值为.T.,就返回<表达式>的原数据类型,如果<逻辑表达式>值为.F.或缺省,则返回 X
以表明<表达式>的运算结果是 NULL 值。
例题 46 STORE "中国" TO A
STORE .NULL. TO A
STORE $100 TO Y
?VARTYPE(A),VARTYPE(A,.T.),VARTYPE(Y)
X C Y
4.表达式是否匹配测试函数
格式:LIKE(<字符表达式 1>,<字符表达式 2>)
功能注释:判断两个字符表达式是否匹配,如果匹配,返回.T.;否则返回.F.。<字符表
− 47 −
等级考试学习笔记——二级 Visual FoxPro

达式 1>可以包含通配符“*”或“?” 。“*”可与任何数目的字符相匹配, “?”可以与任何


单个字符相匹配。LIKE()区分大小写字母。
例题 47 ?LIKE("ABC","ABC"),LIKE("AB*","ABCD"),LIKE("AB*","ABC"),LIKE("?
B?","ABC"),LIKE("Abc","abc")
.T. .T. .T. .T. .F.
5.表文件首测试函数
在 VFP 中,系统对数据库表的处理是逐条进行的。对于一个已经打开的表来说,在某一
时刻只能处理一条记录。VFP 为每一个打开的表设置了一个内部使用的记录指针,指向正在
被操作的记录,该记录称为当前记录。
表文件的逻辑结构缺图。最上面的记录是首记录,记为 TOP,最下面的记录是尾记录,
记为 BOTTOM。在第一个记录之前有一个文件起始标识,叫做 Beginning of File(BOF) ;在
最后一个记录的后面有一个文件结束标识,叫做 End of File(EOF) 。使用测试函数能够得到
指针的位置,刚打开表时,记录指针指向首记录。
格式:BOF([<工作区号>|<表别名>])
功能注释:测试当前表文件(缺省自变量时)或指定表文件中的记录指针是否指向文件
首,若是返回逻辑真.T.,否则返回逻辑假.F.。表文件首是指第一条记录前面的位置。
若指定工作区上没有打开表文件,函数返回逻辑假.F.。若表文件不包含任何记录,函数
返回逻辑真.T.。
例题 48 USE A && 假设 A 中有记录
GO TOP
?BOF()
.F.
SKIP
?BOF()
.T.
6.表文件尾测试函数
格式:EOF([<工作区号>|<表别名>])
功能注释:测试指定表文件中的记录指针是否指向文件尾,若是返回逻辑真.T.,否
则返回逻辑假.F.。表文件尾是指最后一条记录后面的位置。若缺省自变量,则测试当前表
文件。
若在指定工作区上没有打开表文件,函数返回逻辑假.F.。若表文件中不包含任何记录,
函数返回逻辑真.T.。
例题 49 USE A && 假定 A 中有记录
GO BOTTOM
?EOF()
.F. && EOF()为真时,指针指向最后一个记录的后面
SKIP
?EOF()
.T.
− 48 −
第 3 章 数据与数据运算

7.记录号测试函数
格式:RECNO([<工作区号>|<表别名>])
功能注释:返回当前表文件(缺省自变量时)或指定表文件中当前记录(即指针所指记
录)的记录号。如果指定工作区上没有打开表文件,函数值为 0。如果记录指针指向文件尾,
函数值为表文件中的记录数加 1。如果记录指针指向文件首,函数值为表文件中第一条记录
的记录号。
例题 50 USE A && 假设 A 中有 10 条记录
?BOF(),RECNO()
.F. 1
SKIP –1
?BOF(),RECNO()
.T. 1
GO BOTTOM
?EOF(),RECNO()
.F. 10
SKIP
?EOF(),RECNO()
.T. 11
8.记录个数测试函数
格式:RECCOUNT([<工作区号>|<表别名>])
功能注释:返回当前表文件(缺省自变量时)或指定表文件中的记录个数。如果指定工
作区上没有打开表文件,函数值为 0。
注意:RECCOUNT()返回的是表文件中物理上存在的记录个数。不管记录是否被逻辑删
除以及 SET DELETED 的状态如何,也不管记录是否被过滤(SET FILTER) ,该函数都会把
它们考虑在内。
例题 51 USE A && 假定 A 中有 5 条记录
RECCOUNT()
5
9.条件测试函数
格式:IIF(<逻辑表达式>,<表达式 1>,<表达式 2>)
功能注释:测试<逻辑表达式>的值,若为逻辑真.T.,函数返回表达式 1 的值,若为逻辑
假.F.,函数返回表达式 2 的值。<表达式 1>和<表达式 2>的类型不要求相同。
例题 52 X=100
Y=200
?IIF(X>150,X-50,X+50),IIF(Y<100,Y-50,Y+50)
150 250
10.记录删除测试函数
格式:DELETED([<表的别名>|<工作区号>])
功能注释:测试指定的表,或在指定工作区中所打开的表中,记录指针所指的当前记录
− 49 −
等级考试学习笔记——二级 Visual FoxPro

是否有删除标记“*”。若有为真,否则为假。若为缺省自变量,则测试当前工作区中所打开
的表。

综合实例

1.(2004 年 9 月 选择题 第 12 题)
设 X=10, 语句 ?VARTYPE ("X")的输出结果是________。
A.N B.C C.10 D.X
【分析】VARTYPE 测试表达式的类型,返回一个大写字母,函数值为字符型。 “X”为
“10”,是字符型(C) ,所以输出的结果是 C。
【答案】B
2.(2004 年 9 月 选择题 第 13 题)
表达式 LEN(SPACE(0))的运算结果是________。
A.NULL. B.1 C.0 D." "
【分析】SPACE 返回由指定数目的空格组成的字符串。SPACE(0)为 0 个空格的字符串。
LEN 返回指定字符表达式的长度,即所包含的字符个数,所以 LEN(SPACE(0))的运算结果是 0。
【答案】C
3.(2004 年 9 月 填空题 第 10 题)
表示“1962 年 10 月 27 日”的日期常量应该写为________。
【分析】日期型常量的格式有两种:传统的日期格式( “mm/dd/yy”)和严格的日期格式
({^yyyy-mm-dd})。传统的日期格式受到命令语句的影响,而严格的日期格式能表达一个确
切的日期。
【答案】{^1962-10-27}
4.(2004 年 4 月 选择题 第 8 题)
在 Visual FoxPro 中说明数组的命令是________。
A.DIMENSION 和 ARRAY B.DECLARE 和 ARRAY
C.DIMENSION 和 DECLARE D.只有 DIMENSION
【分析】数组在使用前一般要用 DIMENSION 或 DECLARE 命令显示创建。
创建数组的命令格式如下:
DIMENSION<数组名>(<下标上限 1>[,<下标上限 2>])[,……]
DECLARE<数组名>(<下标上限 1>[,<下标上限 2>])[,……]
【答案】C
5.(2004 年 4 月 选择题 第 14 题)
有如下赋值语句,结果为“大家好”的表达式是________。
a="你好"
b="大家"
A.b+AT(a,1) B.b+RIGHT(a,1)
C.b+ LEFT(a,3,4) D.b+RIGHT(a,2)
【分析】本题关键是从 a 表达式中截取“好” 。截取字符串的函数有:LEFT,RIGHT,
− 50 −
第 3 章 数据与数据运算

SUBSTR。LEFT()从指定表达式的左端取一个指定长度的子串作为函数值。RIGHT()从指定
表达式的右端取一个指定长度的子串作为函数值。SUBSTR()从指定表达式的指定起始位置
取指定长度的子串作为函数值。
【答案】D
6. (2004 年 4 月 填空题 第 2 题)
常量.n.表示的是________型的数据。
【分析】逻辑真的常量表示形式有:.T.、 .t.、 .Y.、 .y.。逻辑假的常量表示形式有:.F.、 .f.、
.N.、 .n.。
【答案】逻辑

本章总结
难点重点
1.VFP 的主要数据类型:字符型、数值型、货币型、日期型、日期时间型、逻辑型、
备注型、通用型、整型、浮点型、双精度型。
2.常量的主要类型:数值型常量、字符型常量、日期型常量、日期时间型常量、逻辑
型常量、货币型常量。
3.变量的主要类型:简单内存变量、数组。
4.表达式的主要类型:字符表达式、数值表达式、日期及日期时间型表达式、关系表
达式、逻辑表达式、名表达式、宏替换。
5.常用函数的类型:字符处理函数、数值计算函数、日期时间函数、数据类型转换函
数、测试函数。
误点剖析
1.字符型常量
① 字符型常量的定界符必须成对匹配,不能一边用单引号一边用双引号。如果定界符
本身也是字符串的内容,则需要用另一种定界符为该字符串定界。
②不包含任何字符的字符串(" ")叫空串。空串与包含空格的字符串(" ")是不同的。
2.给简单内存变量赋值的命令如下:
<内存变量名>=<表达式>
STORE<表达式>TO<内存变量表>其中,
① 等号一次只能给一个内存变量赋值。STORE 命令可以同时给若干个变量赋给相同的
值,各内存变量之间必须用逗号分开。
② 在 VFP 中,一个变量在使用之前并不需要特别的声明或定义。当用 STORE 命令给变
量赋值时,如果该变量并不存在,那么系统自动建立它。
③ 可以通过对内存变量重新赋值来改变其内容和类型。
3.创建数组
① 在一切使用简单内存变量的地方,都可以用数组元素。
② 在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组全部数组元素。
③ 在同一个运行环境下,数组名不能与简单内存变量重复。

− 51 −
等级考试学习笔记——二级 Visual FoxPro

④ 在赋值语句中的表达式位置不能出现数组名。
⑤ 可以用一维数组的形式访问二维数组。
4.将表的当前记录复制到数组的命令如下:
格式 1:SCATTER [FIELDS<字段名表>][MEMO] TO <数组名>[BLANK]
格式 2:SCATTER [IELDS LIKE<通配符>|FIELDS EXCEPT<通配符>][MEMO]
格式 1 的功能是将表的当前记录从指定的字段表中的第一个字段内容开始,依次复制到
数组中从第一个数组元素开始的内存变量中。如果事先没有创建数组,系统将自动创建;如
果已创建的数组元素个数少于字段数,系统自动建立其余数组元素;如果已创建的数组元素
个数多于字段数,其余数组元素的值保持不变。如果选用 BLANK 短语,则产生一个空数组,
各数组元素的类型和大小与表中当前记录的对应字段相同。
格式 2 的功能是用通配符指定包括或排除的字段。
5.将数组数据复制到表的当前记录的命令如下:
格式 1:GATHER FROM<数组名>[FIELDS<字段名>][MEMO]
格式 2:GATHER FROM <数组名>[FIELDS LIKE <通配符>|FIELDS EXCEPT <通配
符>][MEMO]
格式 1 的功能是将数组中的数据作为一个记录复制到表的当前记录中,从第一个数组元
素开始,依次向字段名表指定的字段填写数据。如果数组元素个数多于记录中字段的个数,
多余部分被忽略。
格式 2 的功能是用通配符指定包括或排除的字段。
6.名表达式不是变量或数组元素,也不是一个字段,它不能用引号引起,否则会导致
错误。在多个名之间需要用逗号进行分隔,这样可将多个名存入一个变量中。
7.求最大值(MAX(<表达式 1>,<表达式 2>[,<表达式 3>…]))和最小值(MIN(<表达
式 1>,<表达式 2>[,<表达式 3>…]))这两个函数中的表达式可以是数值型、字符型、货币型、
双精度型、浮点型、日期型和日期时间型,但是所有的表达式必须具有相同的数据类型。
8.求年份、月份、星期和天数的函数返回值都是数值型。
9.求时、分、秒的函数返回值也是数值型。
10.表达式类型测试函数:VARTYPE(<表达式>[,<逻辑表达式>]),若表达式是一个数组,
则根据第一个数组元素的类型返回字符串;如果表达式的运算结果是 NULL 值,则根据<逻
辑表达式>值决定是否返回<表达式>的类型:如果<逻辑表达式>值为.T.,就返回<表达式>的原
数据类型,如果<逻辑表达式>值为.F.或缺省,则返回 X 以表明<表达式>的运算结果是 NULL 值。

单元练习

1.下列选项中,与函数 INT(10/3)结果相同的是________。
A.CELING(3.3) B.FLOOR(3.3)
C.SIGN(3.3) D.ABS(3.3)
2.下面函数能够返回结果为“考试”的是________。
A.SUBSTR("二级考试题",5,4) B.SUBSTR("二级考试题",4,4)
C.SUBSTR("二级考试题",2,4) D.SUBSTR("二级考试题",2,2)
− 52 −
第 3 章 数据与数据运算

3.表达式 VAL(SUBS("VFP6",4,1))*LEN("VFP")的结果是________。
A.12 B.18 C.20 D.24
4.顺序执行以下命令,显示结果是________。
STORE "14.31" TO X
Y=INT(&x+5)
?Y
A.19 B.20 C.14.315 D.14.31
5.(2002 年 9 月考试题)
下列函数中函数值为字符型的是________。
A.DATE() B.TIME() C.YEAR() D.DATETIME()
6.(2002 年 9 月考试题)
LEFT("123456789",LEN("数据库"))的计算结果是________。

习题答案
1.B。解析:函数 INT(10/3)的结果是 3,A 的结果是 4,B 的结果是 3,C 的结果是 1,
D 的结果是 3.3。
2.A。解析:SUBSTR 从<字符表达式>中的第<数值表达式 1>个字符开始,截取并返回
<数值表达式 2>个字符,本题要求返回结果是“考试” ,应该从“二级考试题”的第 5 个字符
开始,截取并返回 4 个字符。
3.18。解析:SUBS 命令从第 4 位开始截取,取 1 位,是 6,通过 VAL 命令转化成数值
型。LEN 命令的结果是 3,6*3=18。
4.A。解析:题中运算相当于 INT(14.31+5),INT(19.31),INT 是取整函数。结果是 19。
5.B。解析:DATE()返回值是日期型,TIME()返回值是字符型,YEAR()返回值是数值
型,DATETIME()返回值是日期时间型。
6.123456。解析:LEN("数据库")返回“数据库”的长度为 6,LEFT(“123456789”,6)
从左边起截取 6 位,是 123456。

− 53 −
等级考试学习笔记——二级 Visual FoxPro

第4章 VFP 数据库的基本操作


第 1 章已经介绍了 VFP 数据库的基本概念,在此不再赘述。本章主要讲解数据库和表的
基本操作,包括数据库和表的建立、修改和有效性检验;表记录的浏览、增加、删除与修改;
表的索引;多表操作;表之间的关联以及参照完整性的设置等。本章所涉及的操作除了提供
菜单操作方法外,还提供了相应的命令及常用的函数。

知识结构图

− 54 −
第4章 VFP 数据库的基本操作

大纲中的知识点

4.1 Visual FoxPro 数据库及其建立


问题 1:VFP 数据库中数据库表、数据库、索引文件的扩展名各是什么?
在 VFP 中,数据库是逻辑上的概念和手段,通过一组系统文件将相互联系的数据库表及
其相关的数据库对象统一组织和管理。VFP 中,.dbf 文件称为数据库表,简称表。另外,在
建立 VFP 数据库时,所建立的数据库名称实际是扩展名为.dbc 的文件名,与之相关的还会自
动建立一个扩展名为.dct 的备注文件和一个扩展名为.dcx 的索引文件。也就是说,建立一个
数据库后,用户可以在磁盘上看到文件名相同,扩展名分别为.dbf、.dbc 及.dct 的 3 个文件。
这几个文件是供 VFP 数据库管理系统管理数据库使用的,用户一般不能直接使用它们。
问题 2:如何建立数据库?
在 VFP 中建立数据库有以下 3 种方法:
l 使用“新建”对话框建立数据库
l 使用命令交互建立数据库
l 在项目管理器中建立数据库
1.使用“新建”对话框建立数据库
单击菜单中“文件”里的“新建”命令(或单击工具栏上的“新建”按钮),出现“新
− 55 −
等级考试学习笔记——二级 Visual FoxPro

建”对话框,选择“数据库”单选按钮,如图 4-1 所示,再单击“新建文件”,出现“创建”


对话框,如图 4-2 所示。在其中选择数据库存放的文件夹(这里选默认工作目录“D:\学生”),
在“数据库名”处填上“学生” (默认为数据 1),再单击“保存”按钮,一个空数据库就创
建完毕。

图 4-1 “新建”对话框

图 4-2 “创建”对话框

− 56 −
第4章 VFP 数据库的基本操作

2.使用命令交互建立数据库
打开 VFP 时会出现如图 4-3 所示的界面,在右边的命令窗口中输入如下命令就可建立数
据库。

图 4-3 “命令”窗口

命令格式:CREATE|OPEN|MODIFY DATABASE [<数据库名>|?]。


功能注释:CREATE 三项在同一时刻只能选一,分别用来创建一个数据库文件。
注意:在这里选 CREATE 而不选可选项或选择“?” ,都是打开一个“创建”对话框,
在此为数据库输入一个名字并保存。若选<数据库名>,即在命令中就给创建的数据库一个名
字,不加路径为当前目录,缺省扩展名为.dbc。
3.在项目管理器中建立数据库
首先单击工具栏上的“新建”或选择“文件”菜单下的“新建” ,打开“新建”对话框,
如图 4-4 所示。在“文件类型”组框中选择“项目” ,然后单击“新建文件”按钮,出现“创
建”对话框,如图 4-5 所示。选择“保存类型”为“项目(.pjx) ”,在“项目文件”中输入“项
目 1”,然后单击“保存” ,出现“项目管理器”对话框,如图 4-6 所示。然后单击“数据”
选项卡,如图 4-7 所示,在其中选择“数据库” ,然后单击“新建”按钮,出现“新建”对话
框,以后的步骤如同通过“新建”对话框建立数据库。

− 57 −
等级考试学习笔记——二级 Visual FoxPro

图 4-4 “新建”对话框中的“文件类型” 图 4-5 “创建”对话框中选择“保存类型”

图 4-6 “项目管理器”对话框

− 58 −
第4章 VFP 数据库的基本操作

图 4-7 “项目管理器”中的“数据”选项卡

问题 3:如何使用数据库?
在使用数据库时,必须先打开数据库,常用的打开数据库的方法也有 3 种:
l 通过“打开”对话框打开数据库
l 使用命令打开数据库
l 在项目管理器中打开数据库
1.通过“打开”对话框打开数据库
单击工具栏上的“打开”按钮或选择“文件”菜单下的“打开” ,屏幕上显示“打开”
对话框,如图 4-8 所示。在“文件类型”下拉列表中选择“数据库(*.dbc)”,然后选择或在
“文件名”文本框中输入数据库文件名,单击“确定”按钮打开数据库。在“打开”对话框中
还有“以只读方式打开”和“独占”复选框可供选择。

图 4-8 “打开”对话框

− 59 −
等级考试学习笔记——二级 Visual FoxPro

2.使用命令打开数据库
命令格式:OPEN DATABASE[<数据库名>|?] [EXCLUSIVE| SHARED]
[NOUPDATE]
[VALIDATE]
功能注释:打开数据库文件。不选可选项或选择“?”,打开“打开”对话框,找到欲
打开的数据库文件。若选<数据库名>,即在命令中就给打开的数据库一个名字,不加路径为
当前目录,缺省扩展名为.dbc。
EXCLUSIVE:以独占方式打开数据库,与在“打开”对话框中选择复选框“独占”等
效,即不允许其他用户在同一时刻也使用该数据库。
SHARED:以共享方式打开数据库,等效于在“打开”对话框中不选择复选框“独占” ,
即允许其他用户在同一时刻使用该数据库。默认的打开方式由 SET EXCLUSIVE ON|OFF 的
设置值确定,系统原默认值为 ON。
NOUPDATE:指定数据库按只读方式打开,等效于在“打开”对话框中选择复选框
“以只读方式打开”,即不允许对数据库进行修改,默认的打开方式是读/写方式,即可
修改。
VALIDATE:指定 VFP 检查在数据库中引用对象是否合法,例如检查数据库中的表和索
引是否可用,检查表的字段或索引的标记是否存在等。
注意:
① 这里的 NOUPDATE 选项实际不起作用,如果想要数据库的表是只读的,需要在用
USE 命令打开表时使用 NOUPDATE(USE 命令的功能是打开数据库表) 。
② 当数据库打开时,包含在数据库中的所有表都可以使用,但是这些表不会自动打开,
当用到这些表时需要用 USE 命令打开数据库表。
③ 当 USE 命令打开一个表时,VFP 系统会首先在当前数据库中寻找该表,如找不到该
表,系统会在数据库外继续查找并打开指定的表(前提是该表在指定的目录或路径下存在) ;
在实际操作中,要打开一个表不一定要打开数据库。
④ VFP 在同一时刻可以打开多个数据库,但是只有一个当前数据库,也就是说所有作
用于数据库的命令或函数是对当前数据库而言的。指定当前数据库的命令格式是:SET
DATABASE TO [<数据库名>]。其中,<数据库名>指定一个已经打开的数据库名称为当前数
据库,如不选<数据库名>,将使得所有打开的数据库都不是当前数据库(所有的数据库都没
关闭,只是都不是当前数据库) 。另外,也可以通过“常用”工具栏的数据库下拉列表来选择、
指定当前数据库,假设当前打开了两个数据库 A、B,用鼠标单击“A”即选择 A 数据库,
用鼠标单击“B”即选择 B 数据库。
3.在项目管理器中打开数据库
只要在项目管理器中选了相应的数据库,则其将自动打开,用户可能看不到,但是已经
不必再手工执行打开数据库的操作。
问题 4:如何修改数据库?
在 VFP 中,要想修改数据库必须打开数据库设计器,只有在数据库设计器中才能完成各
种数据库对象的建立、修改和删除等操作。
数据库设计器是交互修改数据库对象的界面和工具,其中显示了数据库中包含的全部
− 60 −
第4章 VFP 数据库的基本操作

表、视图和联系。当“数据库设计器”窗口活动时,VFP 显示“数据库”菜单和“数据库设
计器”工具栏。
打开数据库设计器也有 3 种方法:
l 从“打开”对话框中打开数据库设计器
l 使用命令打开数据库设计器
l 在项目管理器中打开数据库设计器
1.从“打开”对话框中打开数据库设计器
从“打开”对话框中打开数据库的同时系统就会自动打开数据库设计器。
2.使用命令打开数据库设计器
打开数据库设计器的命令格式是:MODIFY DATABASE [<数据库名>|?] [NOWAIT]
[NOEDIT]。
注意:如果省略<数据库名>或使用“?”则打开“打开”对话框。
NOWAIT:该选项只在程序中使用,在交互使用的命令窗口中无效。其作用是在数据库
设计器打开后程序继续执行,即继续执行 MODIFY DATABASE NOWAIT 之后的语句。
如果不使用该选项,在打开数据库设计器后,应用程序自动暂停,直到数据库设计器关闭后
应用程序才会继续执行。
NOEDIT:使用该选项只是打开数据库设计器,而禁止对数据库进行修改。
3.在项目管理器中打开数据库设计器
首先在“数据”选项卡中单击“数据库”前的+,如图 4-9 所示,展开数据库分支,然
后选择要修改的数据库,最后单击“修改”按钮则在数据库设计器中打开相应的数据库设计
器,如图 4-10 所示。

图 4-9 “项目管理器”中的“数据”选项卡

− 61 −
等级考试学习笔记——二级 Visual FoxPro

图 4-10 数据库设计器

问题 5:如何删除数据库?
删除数据库有两种方法,如图 4-11 所示。
l 在项目管理器中删除数据库
l 用命令方式删除数据库
从项目管理器中删除数据库,可以直接选择要删除的数据库,然后单击命令按钮“移去”

这时会出现一个提示对话框,如图 4-11 所示。这时可以进行如下选择。

图 4-11 删除数据库提示对话框

− 62 −
第4章 VFP 数据库的基本操作

移去:从项目管理器中删除数据库,但不从磁盘上删除相应的数据库文件。
删除:从项目管理器中删除数据库,并从磁盘上删除相应的数据库文件。
取消:取消当前的操作,即不进行删除数据库的操作。
以上提到的所有的文件是.dbc 文件,不是.dbf 文件。
注意:VFP 的数据库文件并不真正含有数据库表或其他数据库对象,只是在数据库文件
中登录了相关的条目信息,表、视图或其他数据库对象是独立存放在磁盘上的。所以不管是
“移去”还是“删除” ,都没有删除数据库中的表等对象,要在删除数据库时同时删除表等对
象,需要使用命令方式删除数据库,删除数据库的命令格式是:DELETE DATABASE
<数据库名>|?[DELETETABLES][RECYCLE]。
其中,<数据库名>为即将删除的数据库名称,此时要删除的数据库必须处于关闭状态;
如果选用“?” ,则会打开删除对话框请用户选择要删除的数据库文件。DELETETABLES:
选择该选项则在删除数据文件的同时从磁盘上删除该数据库所含有的表(.dbf 文件)等。
RECYCLE:选择该选项则将删除的数据库文件和表文件等放入 Windows 的回收站中,
如果需要的话,还可以还原它们。
另外,如果 SET SAFETY 设置值为 ON,则 VFP 会提示是否要删除数据库,否则不出现
提示,直接进行删除操作。
问题 6:如何关闭数据库?
关闭数据库也有多种方法。
最直接的办法就是关闭窗口右上角的 。
也可用命令关闭数据库,其格式为:CLOSE DATABASE |ALL。
注意:选用 ALL 将关闭所有区打开的数据库文件及其数据表、自由表以及各类文件。选
DATABASE 只关闭当前打开的数据库文件及其数据表、自由表。

例题讲解

例题 1 (2002 年 9 月考试题)
一数据库名 student,要想打开该数据库,应使用命令________。
A.OPEN student B.OPEN DATA student
C.USE DATA student D.USE student
【分析】打开数据库是对数据库的最基本的操作,通过前面的学习,可知应该用 OPEN
DATA student。
【答案】B
例题 2 (2003 年 4 月考试题)
在 Visual FoxPro 中,创建一个名为 SDB.dbc 的数据库文件,使用的命令是________。
A.CREATE B.CREATE SDB
C.CREATE TABLE SDB D.CREATE DATABASE SDB
【分析】此题中,A 选项是打开表设计器,并在弹出的创建对话框中输入表名,B 选项是
打开 SDB 表设计器,直接创建表,C 选项是使用 SQL 命令创建 SDB 表,D 选项是创建 SDB
数据库。
− 63 −
等级考试学习笔记——二级 Visual FoxPro

【答案】D
例题 3 (2002 年 9 月考试题)
在 Visual FoxPro 的命令窗口中键入 CREATE DATA 命令以后,屏幕会出现一个创建对话
框,要想完成同样的工作,还可以采取如下步骤________。
A.单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“数据库”单选钮,
再单击“新建文件”命令按钮。
B.单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“数据库”单选钮,
再单击“向导”命令按钮。
C.单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“表”单选钮,再
单击“新建文件”命令按钮。
D.单击“文件”菜单中的“新建”按钮,然后在新建对话框中选定“表”单选钮,再
单击“向导”命令按钮。
【分析】通过前面的学习和练习,可以知道通过菜单创建数据库的方法是:单击“文件”
菜单中的“新建”按钮,然后在新建对话框中选定“数据库”单选钮,再单击“新建文件”
命令按钮。
【答案】A

4.2 建立数据表
在 VFP 中,数据表有两种存在方式:独立的一个数据表,称为自由表,其扩展名为.dbf,
它不与任何数据库相关联;存在于数据库中的表,称为数据库表,其扩展名也是.dbf,它与
某一个数据库相关联。数据库表可以有一些自由表没有的特性,例如:字段验证、记录验证、
触发器及永久关系等,此外,还增加了格式、输入显示掩码和匹配字段类型到类等属性。自
由表可以利用数据库工具,将其纳入到某个数据库当中,就成为数据库表了。
上节主要介绍了数据库的基本操作,然而,在 VFP 中,数据表才是存放数据的实体,它
是由结构和数据(又叫记录)组成的。建立数据表要先创立数据表结构,然后输入数据。创
建数据表结构有多种方法。
问题 1:如何利用表设计器创建数据表结构?
1.确定数据表字段属性
在建立数据表结构之前,首先应该根据实际需要确定数据表的结构,即所需的字段个数、
字段名、字段类型、字段宽度及小数位数等字段属性。
下面对上述内容做一下简要的介绍。
(1)字段名即关系(表)的属性名或表的列名。一个表由若干列构成,每个列都必须有
一个惟一的名字,即字段名,可以通过字段名直接引用表中的数据。中文版的 VFP 中字段名
可以是汉字或合法的西文标识符。
l 自由表字段名最长为 10 个字符。
l 数据库表字段名最长为 128 个字符。
l 字段名必须以字母或汉字开头。
l 字段名可以由字母、汉字、数字和下划线组成。
− 64 −
第4章 VFP 数据库的基本操作

l 字段名中不能有空格。
(2)字段类型和宽度决定存储在字段中的值的数据类型,通过宽度限制可以决定存储数
据的数量或精度。VFP 数据表可以选择的数据类型的基本情况前面已经做了详细的介绍,这
里再简单的介绍一下。
字符型:可以是字母、数字等各种字符型文本,如学生的姓名。
货币型:货币单位,如商品的价格。
数值型:整数或小数,如学生成绩。
浮点型:功能上类似于“数值型” ,其长度在表中最长可达 20 位。
日期型:由年、月及日构成的数据类型,如出生日期。
日期时间型:由年、月、日、时、分及秒构成的数据类型,如上学时间。
双精度型:双精度数值类型,一般用于精度要求很高的数据。
整型:不带小数点的数值类型。
逻辑型:值为“真”(.T.)或“假” (.F.)。
备注型:不定长的字符型文本,如用于存放个人简历等。它在表中占用 4 个字节,所保
存的数据信息存储在扩展名为.dbt 的文件中。
通用型:用于标记电子表格、文档及图片等 OLE 对象,如用于存放 Microsoft Excel 电子
表格等。它在表中占 4 个字节。
(3)空值(NULL)
在关系数据库中,空值是一个比较重要的概念,数据库中可能会有尚未存储数据的字段,
这时的空值与空字符串、数值 0 等具有不同的含义,空值就是缺值或还没有确定值,不能理
解成空值是任何意义的数据。例如:表示价格的一个字段值,空值表示没有定价,而数值 0
可能表示免费。
注意:关键字的字段是不允许为空值的,而那些在插入记录时允许暂缺的字段值往往允
许为空值。
2.打开表设计器建立表结构
首先根据上节介绍的方法打开数据库,单击鼠标右键,在其快捷菜单中选中“新建表” ,
如图 4-12 所示。在对话框中再选“新建表” (或单击菜单中“新建”,在新建对话框中选“表” ,
再单击“新建文件” ),如图 4-13 所示。在弹出的“创建”对话框中,输入数据表名,如图
4-14 所示,单击“保存”按钮,打开表设计器,如图 4-15 所示。
然后,输入各字段属性。单击表设计器中字段名下的空白处,输入第一个字段名“编
号”,按 Tab 键移到类型处。定义类型有两种方法:一是直接用向上或向下方向键选择类
型,一种是单击类型右面向下箭头,在下拉列表中选择一种类型,如字符型。按 Tab 键光
标移至宽度处,定义宽度可以直接从键盘上输入宽度值;也可以通过右面数字微调按钮调
节数字大小。用 Tab 键移动到索引处,选择“升序”(有关索引的概念以后会详细介绍)。
接着单击下一行空白方框,以同样的方法输入其他各字段。如果某字段可以接受空值,则
选择 NULL,这里选择“备注”字段可以接受空值。定义结束后,单击“确定”,出现询问
是否输入数据的对话框。这里单击“否”,暂时不输入数据,只建立了一个结构,即一个
空数据表。
再然后设置字段的其他属性。在表设计器的下半部分有四个区域:显示、匹配字段
− 65 −
等级考试学习笔记——二级 Visual FoxPro

类型到类、字段有效性及字段注释。可以在此设置字段验证。如果是创建了一个自由表,
那在打开的表设计器中就没有下半部分。这也是数据库表与自由表的一个区别。下面具
体介绍。

图 4-12 右击“数据库设计器”选择“新建表”

图 4-13 选择“新建表”

− 66 −
第4章 VFP 数据库的基本操作

图 4-14 “创建”对话框

图 4-15 “表设计器”

− 67 −
等级考试学习笔记——二级 Visual FoxPro

(1)显示区域:主要用于指定输入和显示字段的格式属性。
格式属性:格式属性是可编辑字段或变量类的通用属性,在 VFP 面向对象程序设计命
令格式中使用。例如:将某一个字段的格式属性设置为"!"(两个英文双引号不可缺省) ,则
VFP 会将输入该字段的小写字母全部转换成到大写字母。关于该属性的其他取值,此处不
再介绍。
输入掩码属性:指定字段中输入字符的格式。例如:有一个“电话号码”字段,设置该
字段掩码属性为(9999)—9999999,则在输入数据时,若输入 05321234567,自动显示格式
为(0532)—1234567(此时字段宽度应设置为 14)

标题属性:为字段名取一个标题。指定在浏览窗口、表单或报表中代表字段的标签。
匹配字段类型到类:用于指定默认控件类。当数据表被加到表单上时,此字段自动用这
里所指定的控件类对象为输入输出控件。例如:一个字符型字段,此处指定一个文本框(Text)
控件类,则当该字段添加到表单上时,自动用所指定类库中的文本框类来派生一个文本框对
象作为此字段的绑定控件。
显示库:指定类库的路径和文件名。
显示类:指定字段默认的控件类。
(2)字段有效性与字段注释:创建数据表的结构时,可以通过创建字段的有效性来控制
数据表的字段和记录中的数据的合法性,这些规则就是有效性规则。一旦在数据库表中建立
了有效性规则,那么在向该表输入数据时,系统会自动将输入的值和所定义的规则表达式进
行比较,如果输入的值不满足规则的要求,则该输入数据不会被存入表中,增加了数据的可
靠性。
有效性规则对输入到表中的信息的控制是全面的,无论数据是通过浏览窗口、菜单,还
是通过命令以编程的方式来访问该表,有效性规则不仅可以限制输入数据表中数据的类型,
还可以限制输入数据的取值范围。
“规则”是用来指定该字段的值必须满足的条件。单击右侧的“…”按钮,弹出“表达
式生成器”对话框。通过该生成器,用户可以在“函数”中分别选择对字符串、数学、逻辑
和日期四种类型数据进行操作的函数;在下面的“字段”和“变量”中,则可以选择表中字
段和已定义的变量,利用这些函数、字段和变量,用户可以方便地生成用来表示字验证规则
的表达式,也可以直接输入表达式。
“信息”是当字段的输入值不满足其验证的规则时,弹出的消息框中显示的提示消息。
单击右侧的“…”按钮,同样会弹出“表达式生成器” ,用户可以再利用该生成器来生成相应
的表达式。
“默认值”是该字段的默认值。一般而言,默认值应该被设置为所有记录中使用频率最
高的值。这样,当用户添加记录时,可以减少数据输入的工作量。
“表达式生成器”中“有效性规则”下的表达式可以从键盘上直接输入,也可以通过“字
段”和其他框中的内容相结合来完成。
“字段注释”是输入字段的说明。当在项目管理器中选择了该字段时,会在项目管理器
下显示其说明内容。
(3)表设计器中的“索引”选项页
在用表设计器建立表结构时,可以直接单击“索引”项右端的下拉列表,选择该字段升
− 68 −
第4章 VFP 数据库的基本操作

降序普通索引。单击“索引”选项页可以看到该表各字段的索引情况。
(4)设计器中的“表”选项页
单击“表”选项页,表设计器可以显示该表的一些基本信息和让用户设定记录有效性验
证及触发器。显示的信息包括该表所属的数据库、表包含的字段数、表中现有的记录数和表
在磁盘上的路径。
“表”选项页中的“记录有效性”验证在记录更新时起作用,它可以控制输入到表中的
记录数据满足某种事先规定的规则。记录有效性通常用来比较同一记录中的两个或多个字段
的值,以确保它们满足在数据库中建立的某种规则。其功能与前面讲过的字段有效性验证有
些相似,其设定方法也和字段有效性设定方法一样。
“表”选项页中的“触发器”也是用来设定一种规则以检查表中数据有效性的机制之一。
当有命令或操作改变了表中的记录时,就会根据操作是插入记录、更新记录还是删除记录来
触发相应的触发器中的表达式,利用该触发器中的规则来对表记录进行检查。
问题 2:如何利用表向导建立数据表结构?
在 VFP 中,表向导能一步步地指导用户建立出一些常用的表结构,它们或者是系统给定
的一些“示例表” ,或者是用户已定义过的结构(当它已被添加到示例表中时) 。当用户建立
类似的表结构时,不需要一个个字段重新定义,而是可以选取已存在的表结构或示例表中的
某些字段,经过适当的修改、添加,就可以建立完成一个新的结构。需要注意的是, “示例表”
中的字段名是英文字段。
下面具体介绍利用表向导建立数据表结构。
首先打开想存放数据表的数据库,单击右键,在快捷菜单中选中“新建表”,在弹出的
“新建表”对话框中选择“表向导” ,如图 4-16 所示,出现“表向导步骤 1—字段选取”对话
框,如图 4-17 所示。

图 4-16 选择“表向导”

− 69 −
等级考试学习笔记——二级 Visual FoxPro

图 4-17 “表向导”之“步骤 1—字段选取”对话框

然后在“样表”列表框中选择与将建立的数据表结构相似的数据表,若没有类似的,可
以单击“加入”按钮,在文件列表框中选择想添加的数据表,这时,就可以在“样表”中找
到想添加的表了。
再然后,从“可用字段”里选择需要的字段,分别按 按钮,若所有“可用字段”
都被选定,可按 按钮,若选错了字段,可以按相反的方向的箭头按钮,返回可用字
段区。单击“下一步”,出现“步骤 1a—选择数据库”对话框,如图 4-18 所示。新建表
可以是自由表,也可以添加到某个数据库中成为数据库表。将新表添加到数据库中,并
给表命名,单击“下一步”,出现“步骤 2—修改字段设置”对话框,如图 4-19 所示。
在此对话框中,可以对选定的字段进行修改。修改完成后,单击“下一步”,出现“步
骤 3—为表建索引”对话框,如图 4-20 所示。先不管这一步,继续后出现“步骤 3a—建
立关系”对话框(这一步也可以先忽略)。确定后,出现“步骤 4—完成”对话框,如图
4-21 所示。

− 70 −
第4章 VFP 数据库的基本操作

图 4-18 “表向导”之“步骤 1a—选择数据库”对话框

图 4-19 “表向导”之“步骤 2—修改字段设置”对话框

− 71 −
等级考试学习笔记——二级 Visual FoxPro

图 4-20 “表向导”之“步骤 3—为表建索引”对话框

图 4-21 “表向导”之“步骤 4—完成”对话框

由上可见,用表向导建立数据表结构也不方便。一般当新建的表的结构和已有的表结构
完全相同或差别不大时,利用表向导建立数据表结构。
− 72 −
第4章 VFP 数据库的基本操作

问题 3:如何利用命令建立数据表结构?
进入 VFP 系统,有一个窗口常驻桌面,这就是“命令”窗口。在此窗口中键入命令可以
对数据库及表进行操作。在讲利用命令建立数据表结构之前,先来全面了解一下命令窗口,
如图 4-22 所示。

图 4-22 “命令”窗口

1.常用命令规则及约定
(1)语法书写规则
① 每个命令必须以一个命令动词开头,大小写字母等效。在命令窗口中输入命令时,
一律在英文输入状态下进行。标点符号均用英文,否则系统提示: “命令中含有不能识别的短
语或关键字” 。
② 命令动词和子句中的短语可以用其前四个或四个以上字符的缩写表示,如:DISP、
DISPL、DISPLAY 及 Display 都是等效的。
③ 大多数命令动词后可以跟一个或多个限定该动词的子句。命令行中的各个子句可以
按任意次序排列。
④ 命令行中如果有多个词就以一个或多个空格隔开,如果两个词之间已嵌有双引号、
单引号、括号、逗号等分界符,则空格可以省略。
⑤ 命令行的最大长度不能超过 254 个字符。
⑥ 一行只能写一条命令,每条命令的结束标志是回车符。如果一个命令太长,一行写
不下,可以使用续行符“;” ,然后回车,并在下一行接着写该命令。但总长不能超过 254 个
字符。
(2)命令格式中的符号约定
① <>表示必选项。该项必须根据具体问题选择一个确定的参数。输入命令时<>号本身
不要输入。
② []表示可选项。此项可选也可以不选。若选,根据具体问题选择一个参数,输入命令
时[]本身不要输入。不选,则取系统的缺省值。
③ | 表示任选一项。在以该符号作分隔的多个选项中任选一项(只能选一项) 。
− 73 −
等级考试学习笔记——二级 Visual FoxPro

④ ,… 表示重复出现项。
(3)命令中的范围限制
在 VFP 命令中,常常出现<范围>子句,它指出对记录操作的范围,一般有以下四种选择。
① ALL 对所有记录进行操作。
② NEXT<n>只对包括当前记录在内的以下 n 条记录进行操作。
③ RECORD<n>只对第 n 条记录操作。
④ REST 只对从当前记录开始到文件尾的所有记录进行操作。
(4)命令中条件的限制
VFP 命令中常用 FOR<条件表达式>或 WHILE<条件表达式>与<范围>子句一起来限制对
某些范围内满足条件的记录进行操作。
① FOR<条件表达式>:若不选择范围,默认范围是 ALL,即从第一条记录开始一直到
最后一条记录,对满足条件表达式的所有记录执行命令。若选择范围,则是对范围内所有满
足条件表达式的记录进行操作。
② WHILE<条件表达式>:若不选择范围,默认范围是 REST,即从当前记录开始对满
足条件的记录进行操作,一旦遇到不满足条件的记录就停止,即使后面还有满足条件的记录。
若选择范围,则是对范围内第一条记录开始检查是否满足条件,遇到不满足条件的记录就停
止,如果范围内第一条记录就不满足条件,则不向下进行。
③ 命令中的子句:每一条命令,除了以必选的关键词开头外,后面一般都有若干项子
句作为可选项。若读者想了解某一命令的全部格式,可以使用“帮助”查询,也可以在命令
窗口中键入:HELP<命令动词>。例如,键入命令 HELP LIST,系统就给出 LIST 的全部格式
及其英文说明。
2.创建数据表结构命令
命令格式:CREAT <表文件名>。
功能注释:建立一个新表。
说明:如果创建一个表时,一个数据库已被打开,则该表就自动地加到打开的数据表中,
成为数据库表。若未打开任何数据库,则创建的是自由表。例如:
OPEN DATABASE 学生管理
CREAT XSCJ
问题 4:自由表与数据库表的区别在哪里?
在本章的开头已经叙述过,在 VFP 中,.dbf 文件的存在方式有两种:数据库表和自由表。
它们的区别如下。
数据库表比自由表多了许多功能。主要有以下几个方面。
(1)长表名和长字段名
(2)表中字段的标题和注释
(3)字段的默认值
(4)插入、更新和删除时间的触发器
(5)字段验证和记录验证
(6)设定字段的显示格式
(7)匹配字段类型到类
− 74 −
第4章 VFP 数据库的基本操作

(8)可以在数据库中设定表间的永久关系
(9)在索引中增加了主索引及主关键字
另外,自由表可以放在项目管理器中,也可以不属于任何一个项目管理器。

例题讲解

例题 4 (2003 年 4 月考试题)
在 Visual FoxPro 中,调用表设计器建立数据库表 STUDENT.dbf 的命令是________。
A.MODIFY STRUCTURE STUDENT B.MODIFY COMMAND STUDENT
C.CREATE STUDENT D.CREAT TABLE STUDENT
【分析】此题中选项 A 是打开表 STUDENT 的表设计器,选项 B 是打开 STUDENT 的程
序文件,选项 C 是建立表 STUDENT,选项 D 是 SQL 语言中建立表 STUDENT 的命令。
【答案】C
例题 5 (2003 年 4 月考试题)
在 Visual FoxPro 中,表结构中的逻辑型、通用型及日期型字段的宽度由系统自动给出,
它们分别为________。
A.1、4、8 B.4、4、10 C.1、10、8 D.2、8、8
【分析】通过前面的学习可知,逻辑型的宽度为 1 个字节,通用型宽度为 4 个字节,日
期型宽度为 8 个字节。
【答案】A
例题 6 (2003 年 4 月考试题)
在 Visual FoxPro 中,学生表 STUDENT 中包含有通用型字段,表中通用型字段中的数据
均存储到另一个文件中,该文件名为________。
A.STUDENT.doc B.STUDENT.mem
C.STUDENT.dbt D.STUDENT.ftp
【分析】本题中选项 A 是文本文件,选项 B 是存储内存变量的文件,选项 C 是存储备注
型字段的文件,选项 D 是存储通用型字段的文件。
【答案】D
例题 7 (2003 年 4 月考试题)
在 Visual FoxPro 中,存储图像的字段类型应该是________。
A.备注型 B.通用型 C.字符型 D.双精度型
【分析】通过前面的学习可知通用型字段存储电子表格、文档及图片等 OLE 对象。
【答案】B

4.3 数据表结构的显示和修改
前面已经介绍了数据表的建立,这节介绍数据表结构的显示和修改。
问题 1:如何打开和关闭数据表?
在对表进行各种操作之前,应先打开数据表。打开数据表的方法也有多种,菜单操作和
− 75 −
等级考试学习笔记——二级 Visual FoxPro

命令操作。
菜单操作:单击“文件”中的“打开”命令,在打开对话框中找到想打开的数据库文件
打开,或直接找到要打开的数据表打开即可。
命令操作:
命令格式:USE [<表文件名>|?][IN <工作区号>|<表别名>] [ALIAS <表别名>]。
功能注释:打开或关闭数据表文件。
说明:
① 如果选择<文件名>,表示打开指定的数据表文件,如果在当前区已经打开了一个数据
表,则系统先关闭已打开的数据表,然后再打开指定的表。
② 如果选择“?” ,则系统会显示一个“打开”对话框,让用户选择一个表打开。
③ 可以用 IN 子句指定工作区号,以便在非当前工作区中打开一个数据表文件。
④ 用 ALIAS 子句为打开的表命名一个别名,若无此选项,原表名就是它的别名。例如:
USE xscj ALIAS cj。即在打开数据表 xscj 的同时为它命名了一个别名 cj。
注意:由于命令中的所有字母大小写等价,本书中为了有所区别,将命令动词或系统的
保留字均取大写,用户自己取的各种标识符均采用小写字母,下同。
问题 2:数据表结构如何显示?
数据表结构建立以后,其显示也有两种方法:可以进入表设计器查看表的结构;也可以
用命令的方式显示表的结构。
下面只介绍用命令的方式显示表的结构。
命令格式:LIST | DISPLAY STRUCTURE [IN <工作区号>|<表别名>][TO PRINTER
[PROMPT]| TO FILES <文件名>]。
功能注释:显示表的结构。
说明:
① 一般是先打开一个数据表,然后用此命令,否则系统给出“打开”对话框,打开一
个表。
② TO PRINTER 子句表示将输出直接定向到打印机。PROMPT 选项表示在打印开始前
显示“打印机”对话框。在对话框中可以调整打印机设置。
③ TO FILES 子句表示将输出传送给<文件名>所指定的磁盘文件。
④ LIST 和 DISPLAY 可以选择任意一个,所不同的是,若字段很多,一页显示不下,
LIST 连续显示信息直到显示完为止;DISPLAY 采用分页显示信息,即显示一屏信息后暂停,
按任意键或单击鼠标就可以继续显示后面的内容。
例如:在命令窗口中输入以下命令,USE accounts
LIST STRU
在屏幕上就会显示内容如图 4-23 所示。
问题 3:如何修改数据表结构?
一个数据表结构建立好之后,往往还要对它进行修改。修改数据表结构主要包括:修改
字段名、字段类型、字段宽度、小数位数、插入(添加)一个字段、删除一个字段及调换字
段的顺序等。

− 76 −
第4章 VFP 数据库的基本操作

图 4-23 例题演示

1.用菜单方式
首先打开被修改的表,然后调用表设计器。假设打开 students.dbf 表设计器,先打开“学
生管理数据”,选中 students,单击右键,在其快捷菜单中选择“修改”命令,如图 4-24 所示,
打开表设计器,如图 4-25 所示。

图 4-24 选择“修改”命令

− 77 −
等级考试学习笔记——二级 Visual FoxPro

图 4-25 “表设计器”

若要修改字段名、类型、宽度和小数位数等,在打开的表设计器中,像当初建立结构时
一样,选中被修改的字段,直接修改即可。若要调换字段的位置,只要拖动字段名前面的
按钮即可。例如:要调换学号和姓名的位置,把鼠标指针放在“学号”前面的 按钮上,拖
动鼠标指针到“姓名”上,两者的位置就完成了调换。如图 4-26 所示。

图 4-26 调换字段

− 78 −
第4章 VFP 数据库的基本操作

2.用命令方式
命令格式:MODIFY STRUCTURE。
功能注释:修改当前打开表的结构。
3.复制数据表的结构
如果要创建的数据表的结构与已有数据表的结构相同可以直接复制;若相似可以先复
制,然后利用上述方法修改。这样可以大大提高工作效率。
命令格式:COPY STRUCTURE TO <表文件名> [FIELDS <字段名表>] [ [ WITH ] CDX |
[ WITH ] PRODUCTION ]。
功能注释:复制打开的当前数据表的结构,生成一个只有结构的自由表。
说明:
① 若不选可选项,生成的表结构具有与原数据表相同的字段名、类型和宽度。
② 若选 FIELDS 子句,生成的表结构只有字段名表中的字段,字段名之间用逗号
隔开。
③ 若选 CDX 或 PRODUCTION(二者等价),将原表的复合索引标识也复制了,
生成了同名的索引文件.cdx(假设原表已按某字段建立了索引),其中 WITH 可选可
不选。
例如:当前表是 students.dbf,复制当前数据表的结构为一个自由表,学生成绩.dbf 的结
构,只复制字段学号、姓名及总成绩。在命令窗口中输入如下命令:copy structure to 学生成
绩 fields 学号,姓名。
打开自由表时,可以发现其中多了一个“学生成绩.dbf” ,如图 4-27 所示。打开它的表结
构,会发现它的表结构里只有学号和姓名两个字段名,如图 4-28 所示。

图 4-27 “打开”对话框

− 79 −
等级考试学习笔记——二级 Visual FoxPro

图 4-28 “学生成绩”表结构

例题讲解

例题 8 打开一个数据表的命令是________。
A.USE B.USE DATABASE C.OPEN D.OPEN DATABASE
【分析】A 项是打开一个数据表,D 项是打开一个数据库。
【答案】A
例题 9 为了建立表文件 XS2.dbf,使其结构与表 XS 相同,但是记录不同的是________。
A.USE XS B.USE XS
COPY TO XS2 COPY STRU TO XS2
C.COPY FILE XS.dbf TO XS2.dbf D.CREATE XS2 FROM XS
【分析】选项 A、C 均生成与表 XS 的表记录、结构都相同的表,选项 B 是生成与表 XS
结构相同的表。
【答案】B

4.4 向数据表中输入和追加记录
前面只是讲了如何建立数据表结构,里面并无记录,只是个空表,本节将主要介绍如何
向表中输入和追加记录。
问题 1:如何输入记录?
在创建好表结构后,就可以向数据表输入记录了。输入数据表记录有两种方法:一种是
当建立好数据表结构后,单击如图 4-29 所示的对话框中的“确定”按钮,然后出现如图 4-30
所示的对话框。

− 80 −
第4章 VFP 数据库的基本操作

图 4-29 表设计器

图 4-30 提示输入数据记录对话框

如果单击图 4-30 中的“是”按钮,则出现如图 4-31 所示的输入数据窗口。

图 4-31 输入数据窗口

− 81 −
等级考试学习笔记——二级 Visual FoxPro

在读者证号后的光标处输入 7339913301,若数据宽度正好是定义的字段宽度,光标自动
移到下一个字段,若输入的数据未填满定义的宽度或不输入数据,则按回车键,光标移到下
一个字段处。通用型和备注型字段的输入是双击 gen 和 memo,或按 Ctrl+PageUp (Page
Down)。如图 4-32 所示。

图 4-32 输入数据演示

备注型字段双击 memo 后,出现如图 4-33 所示的对话框。

图 4-33 备注型字段—“简历”对话框

− 82 −
第4章 VFP 数据库的基本操作

在此框中输入内容,下次双击 memo 时,此框中就有了所输入的内容。


通用型数据的输入一般使用插入对象的方法,或者使用剪贴板剪切、粘贴,此法读者自
己试一下,下面介绍用插入对象的方法插入照片。
如图 4-34 所示选择“编辑”菜单下的“插入对象”,出现插入对象对话框,如图 4-35 所示。

图 4-34 选择“插入对象”

图 4-35 “插入对象”对话框

− 83 −
等级考试学习笔记——二级 Visual FoxPro

选择“由文件创建”单选按钮,并单击“浏览”找到要插入的图象文件,如图 4-36 所示,


单击“打开” ,打开如图 4-37 所示对话框,按“确定”后,照片已被插入到编辑窗口。单击
“X”关闭该窗口或按 Ctrl+W,该照片即被存储到通用字段当中。

图 4-36 “浏览”对话框

图 4-37 单击“确定”

− 84 −
第4章 VFP 数据库的基本操作

此时的 gen 变成了 Gen。若要取消该字段中的内容,首先双击 Gen,然后单击菜单中“编


辑”下的“清除”命令,即可清除通用字段中的内容。如果需要向一个字段输入空值(NULL) ,
则必须使用组合键:CTRL+0,或者输入“.NULL.” 。
输入完一个记录后,用同样的方法输入其他记录。所有数据记录输入完毕后,单击窗口
右上角的关闭按钮“X”或按 Ctrl+W 退出输入数据状态。若放弃刚刚输入数据的记录,则按
Esc 键或 Ctrl+Q。备注型字段和通用型字段的内容都被保存在一个与数据表同名,扩展名
为.FPT 的文件中。输入记录的第二种情况是当单击了如图 4-30 所示的“否”后,或想在已
存在记录的后面添加一些记录,参见以后的章节。
问题 2:如何浏览记录?
数据表建立好了以后,可以用菜单方式或命令方式对数据进行浏览。最简便、最快捷的
方法就是打开浏览窗口。在浏览窗口中可以利用垂直或水平滚动条显示所有的记录,为用户
编辑与查看。为了使数据显示在有限大的窗口内,VFP 还允许指定浏览窗口的显示格式,指
定显示的字段或记录,而不必每次显示所有的记录。
1.浏览模式
浏览模式是一行显示一条记录。它将字段名显示在窗口的上面,一屏可以显示多条记录。
具体操作如下:打开“数据 1 数据库” ,选中“图书管理”数据表;单击右键,出现如图 4-38
所示的快捷菜单。选中“浏览”命令,出现如图 4-39 所示结果,即浏览模式。选中菜单“显
示”下的“浏览”命令可以显示该模式。
在图中的浏览状态下,字段的顺序和宽度都是在创建表结构时定下的,而行高是系统默
认的高度,数据之间有网格线等。有时为了便于浏览,可以根据需要进行改变,大多数情况
下,都取其默认格式。

图 4-38 选择“浏览”

− 85 −
等级考试学习笔记——二级 Visual FoxPro

图 4-39 浏览“图书管理”表

2.编辑模式
这种显示模式如同记录输入时的格式。它将字段名显示在窗口的左面,以一横行显示一
个字段,每个记录依次显示。可以利用 PageUp、PageDown 键切换到上、下一条记录。如图
4-40 所示。可以利用菜单中“显示”下的“编辑”命令转换为该模式。

图 4-40 选择“编辑”

− 86 −
第4章 VFP 数据库的基本操作

3.显示部分记录和字段
(1)菜单操作
当数据表中的字段个数非常多且记录个数也很多时,浏览窗口不可能一次显示全部记
录,而且用户可能只想看到其中的部分记录和某些字段,VFP 提供的过滤器可以筛选被显示
的记录,指定被显示的字段。若表中的字段很多,只想显示表中的部分字段,可以用下面的
方法。选择“表”菜单下的“属性”,如图 4-41 所示。弹出如图 4-42 所示的工作区属性对话
框,在访问区域中选择“字段筛选指定的字段”后,单击“字段筛选” ,出现字段选择器对话
框,如图 4-43 所示。

图 4-41 选择“属性”

图 4-42 “工作区属性”对话框

− 87 −
等级考试学习笔记——二级 Visual FoxPro

图 4-43 “字段选择器”对话框

分别选择读者证号、姓名,并且添加到右边选定字段框中,单击“确定”后,返回工作
区属性对话框。单击确定,此时浏览窗口并没有按设定的要求显示,关闭后再重新打开该表,
便可以看到只显示读者证号、姓名两个字段。结合前面的记录筛选,其显示结果如图 4-44
所示。

图 4-44 筛选后的“图书管理”

− 88 −
第4章 VFP 数据库的基本操作

(2)命令方式
命令格式:LIST | DISPLAY [[FIELDS]<字段名表>][<表>][FOR<条件表达式 1>][WHILE<
条件表达式>][OFF][TO PRINTER [PROMPT]|TO FILES<文件名>]。
功能注释:显示当前打开的数据表的记录。
说明:
① [FIELDS]<字段名表>指定要显示的字段,字段名之间用逗号分隔,其中 FIELDS 可
选可不选。若缺省该项,显示表中所有字段,但备注字段、通用字段不被显示。若备注型和
通用型字段中有数据,显示 Memo 或 Gen,否则显示 memo 或 gen。双击 Memo 或 Gen 即能
看到相应的内容。若在字段名表中指定备注字段名,也可以显示其内容,但是通用型字段不
能显示。FIELDS 子句相当于菜单操作方式下的字段过滤器。
② <范围>和<条件>短语是只显示范围内满足条件的记录。相当于记录过滤器。
③ 选 OFF 时,只显示记录内容而不显示记录号。
④ LIST 和 DISPLAY 的区别有两点:一是若范围和条件短语均缺省,LIST 显示所有记
录,DISPLAY 显示当前记录;二是若记录很多,无法在一页内显示,LIST 连续显示,DISPLAY
分页显示。
例如:显示读者证号(数值型)为 7339913301 的记录,在命令窗口输入 list for 读者证
号= 7339913301 。
屏幕上出现读者证号为 7339913301 的记录,如图 4-45 所示。

图 4-45 “命令”演示

− 89 −
等级考试学习笔记——二级 Visual FoxPro

4.设置过滤条件
如果仅对表中某些记录进行一系列操作,可以先设置过滤条件,这样就只对满足条件的
记录进行操作,免去了在各命令中一次次使用范围和 FOR 短语的麻烦。
命令格式:SET FILTER TO [<条件表达式>]。
功能注释:设置当前表中访问记录的过滤条件。
说明:不选可选项是取消过滤条件。选择条件表达式,只对满足条件的记录即使得条件
表达式为真的那些记录进行操作。
例如:对当前表中所有性别为男的记录进行操作,可以在命令窗口输入 set filter to 性
别="男"。
问题 3:如何追加记录?
1.菜单操作
若建立好一个数据表结构后,在系统询问对话框,如图 4-46 所示,单击了“否” ,或已
经输入了一些记录,还要在该数据表后面追加记录时,其操作如下。

图 4-46 “输入数据记录”提示

打开“图书管理” ,使其处于浏览或编辑状态,单击“显示”菜单下的“追加方式”或
菜单“表”中的“追加新记录” ,就可以在记录的末尾追加记录,如图 4-47 所示。
2.命令方式
使用命令方式追加记录时,要先打开数据表。要进行的所有操作都需先打开数据表,以
下不再重复。
命令格式:APPEND [BLANK] [IN <工作区号>|<表的别名>]。
功能注释:在打开的当前表或指定的工作区中的表尾追加若干条记录或一条空记录。
说明:
① 不选任何可选项,可以追加若干条记录。
② 选 BLANK 只能在尾部添加一条空白记录。这在程序中经常用到,以便用程序的方式
自动添加数据。
− 90 −
第4章 VFP 数据库的基本操作

图 4-47 选择“追加方式”

例如:上例中,要想追加一条空白记录,打开表后,在命令窗口输入 append blank。


可以发现表的末尾追加了一条空白记录。
问题 4:如何批量追加记录?
用前面的方法只能手工一条条追加记录。当然也可以将已存在的数据表中的记录(或
EXCEL 表、LOTUS 表中的数据)追加到当前表中。本节只讲解从数据表到数据表追加记录
的操作。
注意:被追加的数据表中的字段至少要有一个与当前表的字段同名、同类型,否则不能
添加记录。若当前表中的字段多于被追加的表,则多出的字段数据为空;若被追加的表的字
段多于当前表,则多出的字段被截去。
例如:表“图书管理 2.dbf”中的记录如下所示。
记录号 读者证号 姓名 性别
1 7339913301 黎明 男
2 7339913302 张一 男
3 7339913303 李芳 女
其中的三个字段与图书管理.dbf 中的相应字段同名、同类型。
1.菜单操作
首先打开所要用的数据表图书管理.dbf,在浏览状态下显示记录,选择菜单“表”中的
“追加记录” ,弹出“追加来源”对话框,如图 4-48 所示。
单击类型栏中选择“Table(DBF) ”
(如果是其他类型,可以从其右边的下拉列表中找出) ,
要求从数据表中添加记录。在“来源于”栏中输入被追加的表的路径,也可以单击“来源于”
右侧的“ ”在弹出的对话框中选择相应的文件夹和文件名,单击“确定”按钮,完成把图
书管理 2.dbf 中的记录追加到图书管理.dbf 中的任务,结果如图 4-49 所示。
− 91 −
等级考试学习笔记——二级 Visual FoxPro

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

图 4-49 追加后的“图书管理”

把图书管理.dbf 中的记录追加到图书管理 2.dbf 中的结果如图 4-50 所示。

− 92 −
第4章 VFP 数据库的基本操作

图 4-50 追加记录演示

以上是追加所有的记录,若追加满足某些条件的记录则单击“追加来源”对话框中的“选
项”按钮,弹出如图 4-51 所示的对话框。单击“字段”弹出如图 4-52 所示的选择被追加的
字段对话框;单击“FOR” ,弹出如图 4-53 所示的“表达式生成器”对话框,输入关系表达
式,只追加使表达式为真的记录。

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

− 93 −
等级考试学习笔记——二级 Visual FoxPro

图 4-52 “字段选择器”对话框

图 4-53 “表达式生成器”对话框

− 94 −
第4章 VFP 数据库的基本操作

2.命令方式
命令格式:APPEND FROM <文件名>|? [FIELDS <字段名表>] [FOR <条件表达式>]。
功能注释:将<文件名>指定的数据表中的记录追加到当前打开的数据表中。
例如:上例中把图书管理 2.dbf 中的记录追加到图书管理.dbf 中,在命令窗口输入 APPEN
FROM 图书管理 2,即可追加成功。
由于通用型字段用于存储 OLE 对象,和其他字段不同,因此需要用特殊的命令。命令格
式如下。
APPEND GENERAL <通用字段名> FROM "<对象的文件名.扩展名>"
使用上述命令,要将指针指向当前记录,才能将指定的对象输入到通用字段中去。

例题讲解

例题 10 对于已经存在的表要增加字段,需要打开表设计器, 应使用的命令是________。
A.CHANGE B.EDIT C.MODI STRU D.INSERT
【分析】A、B、D 选项都是分别是对表进行修改、编辑、插入时的命令,使用这些命令
会使数据表处于编辑状态,只有 C 是打开表设计器。
【答案】C
例题 11 在已打开的表 XS 中,第 1、4、6 条记录的性别为男,执行下面两条命令:
DISPLAY FOR 性别="男"
DISPLAY WHILE 性别="男"
命令执行后,分别显示第________条记录和第________条记录。
【分析】FOR <表达式> 指定满足表达式的所有记录,所以第一条命令执行后,会显示
第 1、4、6 条记录,WHILE <表达式>指定满足表达式的第一个记录,当遇到第一个使表达
式为假的记录即停止,所以第二条命令执行后会显示第 1 条记录。
【答案】1、4、6 1

4.5 表的编辑

数据表除了浏览、查询外,随着情况的变化,其一个重要的工作就是数据的维护,这个
工作通常是通过“编辑”来完成的。
对于数据表的编辑主要包括记录的添加、修改及删除等,记录的添加已经讲过,这里主
要讲修改、删除。首先了解一下指针和当前记录的概念,并强调一下 EOF()和 BOF()两个函
数的作用,它们与指针的定位有很大的关系。
问题 1:指针是如何定位的?
首先介绍一下当前记录的概念。VFP 系统设有一个记录指针,其指向的记录就是当前记
录。打开一个数据表后,指针指向第一个记录(假设没有指定索引标记) ,随着命令的执行,
指针不断移动。无论数据表中有多少条记录,指针只有一个,当前记录也只有一个。指针的
定位可以利用菜单操作,但在程序中只能使用命令来操作。

− 95 −
等级考试学习笔记——二级 Visual FoxPro

1.菜单操作
打开数据表图书管理.dbf,使其处于浏览状态,单击菜单中的“表”的下拉列表中的“转
到记录”,如图 4-54 所示。单击“第一个”,指针指向第一个记录;单击“最后一个”,指针
指向最后一个记录;单击“上一个” ,指针指向当前记录的上一个记录;单击“下一个” ,指
针将指向当前记录的下一个记录;单击“记录号”,弹出对话框,在其中输入想要的记录号,
指针就指向该记录;单击“定位” ,出现定位记录对话框,如图 4-55 所示。

图 4-54 选择“转到记录”

图 4-55 “定位记录”对话框

− 96 −
第4章 VFP 数据库的基本操作

单击 for 右侧的 ,出现表达式生成器。如果要找一个姓名为李芳的记录,可双击“字


段”框里的“姓名” ,进而完成表达式“姓名="李芳"”
,如图 4-56 所示,单击“确定”后,
回到“定位记录”对话框,如图 4-57 所示。再单击“定位” ,即可发现指针指向了姓名为李
芳的记录。实际上,定位记录具有查找的功能,菜单方式适用于大量的记录,如果记录很少
的话,只要用鼠标单击即可。

图 4-56 “表达式生成器”对话框

图 4-57 “定位记录”对话框

− 97 −
等级考试学习笔记——二级 Visual FoxPro

2.命令操作
使用命令可以使记录指针绝对定位和相对定位。
(1)绝对定位
绝对定位是不考虑当前指针的位置,直接将指针移动到指定的记录号。
命令格式一:GO|GOTO TOP|BOTTOM [IN <工作区号>|<表的别名>]。
命令格式二:[GO|GOTO] <数值表达式> [IN <工作区号>|<表的别名>]。
功能注释:将指针定位到指定的记录上。
说明:
① GO、GOTO 可任选一种,作用等价。
② TOP 是将记录指针定位在第一条记录上(假设没有指定主索引标记) ,此时 BOF()
为.F.,只有再执行 SKIP-1 后, BOF()才为.T.,但此时记录号函数 RECNO()的值仍为 1;
BOTTOM
是定位在最后一个记录上,此时 EOF()为.F.,再执行 SKIP 后,EOF()才为.T.,此时 RECNO()
为当前表最大记录号加 1。
③ 格式二中的 GO 或 GOTO 可选可不选,为了增强可读性,一般选 GO,数值表达式的
值就是记录号。
例如:打开图书管理.dbf 后,在命令窗口输入一个“4” ,再使其处于浏览状态,即可发
现,指针指向了第四个记录。
(2)相对定位
命令格式:SKIP [[+]|-<数值表达式>] [IN <工作区号>|<表的别名>]。
功能注释:以当前记录为基准,前后移动指针。
说明:不选可选项,是将指针在当前记录处向下移一个记录。数值表达式的值 N 若是正
的,正号可以省略,表示从当前记录向下 N 条记录。若是负值表示从当前记录向上 N 个记录。
例如:
USE 图书管理
?RECNO(),BOF()
SKIP –1
?RECNO(),BOF()
GO 3
?RECNO()
SKIP
SKIP –2
?RECNO()
GO BOTTOM
?RECNO(),EOF()
SKIP
?RECNO(),EOF()
可以从屏幕上看出显示结果如下:
1 .F.
1 .T.
− 98 −
第4章 VFP 数据库的基本操作

3
2
6 .F.
7 .T.
【分析】具体原因在命令的说明中都有提及。读者只要仔细分析,就会得出正确的
结论。
(3)按条件定位
命令格式:LOCATE [<范围>] [FOR <条件表达式 1>] [WHILE <条件表达式 2>]。
功能注释:在当前表中,指针定位在满足范围内给定条件的第一条记录上。
说明:
① LOCATE 命令在表中顺序查找满足条件的记录。它不要求表索引。另外,还有两个
快速查找命令 FIND 和 SEEK 都需要建立索引文件且需要指定主索引标记(这两个命令在索
引文件后讲解) 。
② 范围缺省时,默认为 ALL。
③ 若找到,返回找到的记录号,此时 EOF()为.F.,FOUND()为.T.。在程序代码中,常常
测试这两个函数的值来判断是否找到某一记录。若要继续查找满足条件的其他记录,可以执行
继续查找命令。
命令格式:CONTINUE。
功能注释:继续执行 LOCATE 命令。
说明:CONTINUE 必须在 LOCATE 命令之后使用,用来继续查找满足条件的记录。
CONTINUE 可以多次使用,直到指针到了文件尾或范围末,它相当于从当前记录开始执行
LOCATE 命令。
例如:USE 图书管理
LOCATE FOR 姓名="张一"
DISPLAY &&显示张一的记录
CONTINUE &&在底行显示已到定位范围末尾
问题 2:如何修改数据表记录?
数据表记录的修改,可以在浏览窗口或编辑窗口中完成。在浏览窗口中,可以进行全屏
编辑。用鼠标单击欲修改的记录(或用上述指针定位的方法) ,使其成为当前记录,对于字符
型、数值型、逻辑型及日期型等字段,可以把插入点放在字段中修改数据。要修改备注型字
段,用鼠标双击 Memo,出现备注字段内容的编辑窗口,进行编辑。要修改通用型字段,用
鼠标单击 Gen,出现通用型字段内容的编辑窗口,可以清除或更换嵌入的或链接的 OLE 对象
(如照片) 。方法同输入记录时所述。修改结束后关闭窗口或按 Ctrl+W 键存盘,若放弃此次
修改可按 Esc 键或 Ctrl+Q 键。
也可以利用命令方式打开数据表的浏览窗口。
1.EDIT 或 CHANGE 命令
命令格式:EDIT|CHANGE [FIELDS<字段名表>] [<范围>] [FOR <条件表达式>] [WHILE
<条件表达式>]。
功能注释:在编辑窗口显示并编辑指定的字段。
− 99 −
等级考试学习笔记——二级 Visual FoxPro

说明:
① EDIT 和 CHANGE 只能选择其中之一,两者等价。
② 缺省范围和条件,从当前记录编辑到最后的记录。
③ FIELDS 短语用来指定显示和编辑的字段。
例如:EDIT ALL FIELDS 姓名 && 每条记录只显示姓名这个字段
2.BROWSE 命令
命 令 格 式 : BROWSE [FIELDS < 字 段 名 表 >][LOCK <n>] [FREEZE < 字 段 名 >]
[NOAPPEND][NOMODIFY] [<范围>] [FOR<条件表达式>] [WHILE<条件表达式>]。
例如:在命令窗口输入 BROW LOCK 2。结果如图 4-58 所示。

图 4-58 锁定字段演示

功能注释:打开浏览窗口,可以显示、添加、删除及修改记录。
说明:
① FIELDS 短语用来指定对表中哪些字段进行编辑修改,并且窗口中显示字段的次序与
<字段名表>中的次序相同。例如:BROWSE FIELDS 姓名,职称。
② LOCK<n>用来锁住表中左边 n 个字段,令其在左右移动时保持不动。
③ 选 FREEZE<字段名>,则只能编辑该字段,其他字段不能修改。
④ 选 NOAPPEND 项,则只能修改,不能追加记录。此时,菜单中“表”下的“追加记
录”和“追加新记录”均为灰色不可选项。
⑤ 选 NOMODIFY 项,则“表”下的“替换字段”为灰色不可选项,并且表中各项均不
能修改,只能浏览。

− 100 −
第4章 VFP 数据库的基本操作

3.REPLACE 命令
以上介绍的修改数据的方法是手工一条条地修改,若数据表中的记录很多,且许多记录
需要有规律地修改数据。
例如:把基本工资在 1000 元以上的人员的基本工资每人增加 100 元。
首先利用前面介绍的方法打开“工资表”,使其处于浏览状态,打开“表”中的“替
换字段”,出现如图 4-59 所示的对话框。单击“字段”的下拉列表,选择要被替换的字
段“基本工资”。可以直接在“替换为”的右边直接输入“基本工资+100”;也可以点击
右边的 ,打开表达式生成器,双击字段中的“基本工资”, “with”下面就会出现“工
资表.基本工资”(工资表表示基本工资这个字段所属的数据表),如图 4-60 所示,在其
后面输入“+100”,单击“确定”。再在“替换条件”里输入条件,“作用范围”为 ALL,
在“FOR”里输入“基本工资>=1000”或单击其右边的 ,双击“字段”里的“基本工
资”,“FOR 子句”里出现“工资表.基本工资”,在其后边再加上“>=1000”,如图 4-61
所示,单击“确定”后,返回“替换字段”对话框,如图 4-62 所示,再单击“替换”,
回到浏览状态,如图 4-63 所示,可以发现基本工资在 1000 元以上的人员的基本工资增
加了 100。

图 4-59 “替换字段”对话框

− 101 −
等级考试学习笔记——二级 Visual FoxPro

图 4-60 “表达式生成器”对话框

图 4-61 “表达式生成器”对话框

− 102 −
第4章 VFP 数据库的基本操作

图 4-62 “替换字段”对话框

图 4-63 替换后的工资表

下面介绍用命令方式实现成批修改记录数据的方法。
命令格式:REPLACE <字段名 1> WITH <表达式 1> [ADDITIVE][, <字段名 2> WITH <
− 103 −
等级考试学习笔记——二级 Visual FoxPro

表达式 2>[ADDITIVE]][,…] [<范围>][FOR <条件表达式>] [WHILE <条件表达式>]


功能注释:对当前数据表中指定范围内满足条件的记录分别用表达式的值自动取代相应
字段的原值。
说明:
如果不选用范围和条件短语,则只对当前记录进行字段更改。
如果只选了范围短语,则对指定范围内的所有记录进行字段更改。
如果只选了条件短语,则默认范围为 ALL(用 FOR 时) ,或为当前记录起的全部记录(用
WHILE 时) 。
可以同时更改几个不同字段的值。其中,<字段 n>是被更新值的字段的名字,WITH 后
面的<表达式 n>的值用来替换对应字段的值。
表达式的数据类型必须和字段的类型相同。如果表达式的值的长度比数值型字段的宽度
大,则该命令将强制性地对数据进行处理。数值型具体方法如下:首先截去多余的小数位,
再将其进行四舍五入;如果经过上一步的处理后还不符合要求,则用科学计数法表示该数。
经过上述两步的处理仍不符合要求,用*代替字段中的内容,表示溢出。若是字符型,则将多
余的部分截去。
ADDITIVE 子句只在替换备注型字段时才使用。选择该子句,表示表达式中的数据追加
到备注字段原数据的后面。如果不选此项,则用新值取代原值。
例如:上例只要在命令窗口输入如下命令就能完成要求,REPLACE 基本工资 WITH
基本工资+100 FOR 基本工资>=1000。
问题 3:如何删除记录?
有些数据表随着时间的变化以及其他情况的变化也应该相应的变化,这样就会产生一些
不再需要的记录,需要对其删除,或者有些记录只是暂时作一些删除标志,必要时可以恢复,
同时也可以随时把它们删除。
1.逻辑删除
逻辑删除只对记录作删除标记,并未从表中真正删除这些记录,要真正删除它们,还要
用 PACK 命令。对于带有删除标记的记录,可以用 RECALL 命令取消标记,使其恢复正常。
(1)菜单操作
打开数据表图书管理.dbf,使其处于浏览状态下,并将当前记录指向要求删除的记录。
单击“表”下的“删除记录”命令,如图 4-64 所示,弹出删除对话框,在其中确定范围和
FOR 或 WHILE 条件,如图 4-65 所示。若只删除当前记录,范围即为缺省状态:NEXT1。单
击“删除”按钮,即可发现当前记录左端有一黑色小方块,表示该记录已作过删除标记,如
图 4-66 所示。
另外,还有一种最简单的方法是用鼠标单击某一记录左边的白色小方块,可见其也有了
逻辑删除标记。若用命令 LIST 显示记录,可以看到被逻辑删除过的记录前有一个“*”号。
一般来说,逻辑删除的记录和其他记录一样参与操作,除非使用了命令 SET DELETE
ON。此时,具有删除标记的记录被隐藏起来,不参与任何操作。默认情况下,是 SET DELETE
OFF 状态。

− 104 −
第4章 VFP 数据库的基本操作

图 4-64 选择“删除记录”

图 4-65 “删除”对话框

− 105 −
等级考试学习笔记——二级 Visual FoxPro

图 4-66 删除演示

(2)命令方式
命令格式:DELETE [<范围>][FOR <条件表达式>][WHILE <条件表达式>][IN <工作区
号>|<表的别名>]。
功能注释:给指定的记录加上逻辑删除标记。
说明:范围、条件均不选时,仅对当前记录起作用。可以用函数 DELETE()来测试记录
是(值为.T.)否(值为.F.)被逻辑删除。
2.恢复逻辑删除记录
已经被逻辑删除的记录可以恢复。
(1)菜单方式
打开数据表,单击菜单中“表”下的“恢复记录”命令,在弹出的对话框中选好范围、
条件,单击“恢复记录”按钮即可。实际上,最简单的恢复逻辑删除记录的方法是在浏览状
态下,用鼠标单击已被逻辑删除的记录左边的小黑方块。
(2)命令方式
命令格式:RECALL [<范围>][FOR <条件表达式>][WHILE <条件表达式>][IN <工作区
号>|<表的别名>]。
功能注释:恢复已被逻辑删除的记录。
说明:若不选范围、条件,则只恢复当前记录。
3.物理删除带有逻辑删除标记的记录
若将已作过逻辑删除标记的记录真正从数据表中移去,不能再被恢复,操作有如下两种
方法。

− 106 −
第4章 VFP 数据库的基本操作

(1)菜单方式
如图 4-67 所示,打开数据表,单击菜单中“表”下的“彻底删除”命令,弹出一个警告
框,确认是否要彻底清除。如图 4-68 所示。

图 4-67 选择“彻底删除”

图 4-68 删除记录提示

− 107 −
等级考试学习笔记——二级 Visual FoxPro

(2)命令方式
命令格式:PACK。
功能注释:真正删除带有逻辑删除标记的记录,使之不能再恢复。
4.删除表中所有记录
命令格式:ZAP [IN <工作区号>|<表的别名>]。
功能注释:一次删除表中所有记录,不管记录是否作过逻辑删除标记。
说明:ZAP 等效于 DELE ALL 和 PACK 两条命令连用。由于 ZAP 命令删除的记录不能
恢复,所以要慎用此命令。在执行该命令之前,系统给用户一次确认的机会。

例题讲解

例题 12 在下列命令中,记录指针指向原来记录的是________。
A.GO 1 B.SKIP 1 C.LIST NEXT 1 D.LIST
【分析】选项 A 是将指针指向第一个记录,选项 B 是将指针指向当前记录的下一个记录,
选项 C 是指向原来的记录,选项 D 是显示所有的记录,指针指向尾记录的后面。
【答案】C
例题 13 在一个已经打开的表中,使用命令____可确保记录指针定位在记录号为 1 的记录上。
A.GO 1 B.GO TOP C.GO BOF() D.SKIP 1
【分析】选项 A 将指针定位在记录号为 1 的记录上,在这里,1 为表的物理记录号;选项
B 是将指针定位在表的第一个记录上,如果该表建立了索引,则指针指向索引后的第一个记
录上;选项 C 是一个错误的写法;选项 D 是将指针指向当前记录的下一个记录。
【答案】A
例题 14 将工资表中“职称”为“教授”的基本工资加上 100 元,其中“职称”字段是
字符型字段,下面使用的命令正确的是________。
A.REPLACE ALL 基本工资 WITH 基本工资+100 FOR 职称="教授"
B.REPLACE 基本工资 WITH 基本工资+100 FOR 职称="副教授"
C.REPLACE ALL 基本工资 WITH 基本工资+100 FOR 职称
D.REPLACE 基本工资 WITH 基本工资+100
【分析】从题中,可知 REPLACE 命令中的“条件表达式”是职称="教授",而且是对所
有记录作替换,所以选项 A 正确。
【答案】A

4.6 建立索引文件与应用
数据表通常有很多记录,当要对其中的部分记录进行操作时,就会很麻烦,VFP 提供了
索引作为排序机制,为用户对数据表进行操作提供了很大的灵活性。另外,根据应用程序的
要求,用户还可以灵活地对同一个表创建和使用不同的索引,方便按不同的顺序处理记录。
问题 1:关于索引的一些基本概念的解释。
Visual FoxPro 索引文件是由指针构成的文件,这些指针逻辑上按照索引关键字段(数据
− 108 −
第4章 VFP 数据库的基本操作

表中用来当作索引顺序的字段,称为关键字段)进行排序。实际上,索引文件可以简单地看
成是这样一个文件,仅由两个字段构成,一个字段是排序的关键字段,另一个字段是每个关
键字在原始数据表中对应的记录号(不过,索引文件的结构比较复杂,绝不是一个数据表的
结构)。
这里需要注意的是,索引文件和表的.dbf 文件分别存储,索引文件只是逻辑上的排序,
不改变原数据表中记录的物理位置。此外,索引文件不能单独使用,它必须与原数据表配合
使用才有意义。
实际上,创建索引是创建一个由指向.dbf 文件记录的指针构成的文件。若要根据特定
顺序处理表记录,可以选择一个相应的索引。使用索引还可以加速对表的查询操作。
1.主索引
主索引是指在指定字段或表达式中不允许出现重复值的索引,这样的索引可以起到主关
键字的作用,它强调的“不允许出现重复值”是指建立索引的字段值不允许重复。如果在任
何已含有重复数据的字段中建立主索引,VFP 将产生错误信息,如果一定要在这样的字段上
建立主索引,则必须首先删除重复的字段值。
建立主索引的字段可以看作是主关键字,一个表只能有一个主关键字,所以一个表只能
创建一个主索引。
主索引可确保字段中输入值的惟一性并决定了处理记录的顺序。可以为数据库中的
每一个表建立一个主索引。如果某一个表已经有了一个主索引,还可以为它添加候选
索引。
2.候选索引
候选索引和主索引具有相同的特性,建立候选索引的字段可以看作是候选关键字,所以
一个表可以建立多个候选索引。
候选索引像主索引一样要求字段值的惟一性并决定了处理记录的顺序。数据库表和自由
表均可以为每一个表建立多个候选索引。
候选索引与主索引不同的一点是,主索引还可以在永久关系中建立参照完整性的父表,
即在表间建立一对多的关系,两表中的“一方”必须用主索引作为创建关系的基础。而候选
索引则无此功能。
3.惟一索引
惟一索引是指索引项的惟一,并不是字段值的惟一。它以指定字段的首次出现值为基础,
选定一组记录,并对记录进行排序。在一个表中可以建立多个惟一索引。惟一索引主要是为
了兼容旧版本而设置的,即单入口索引,产生扩展名为.idx 的索引文件。
4.普通索引
作为普通索引的字段,称为一般关键字或次关键字。该字段中的数据值不需要惟一,可
以重复,也可以作为排序的依据,但因为可能有相同的关键字值,因此排序或查询时会列出
所有符合条件的记录。一个数据表中可以有多个一般关键字字段。
从上述定义可以看出,主索引和候选索引具有相同的功能,除具有按升序或降序索引的
功能外,都还具有关键字的特性,建立主索引或候选索引的字段值可以保证惟一性,拒绝重
复的字段值。
惟一索引和普通索引分别与以前版本的定义相同,它们只起到索引排序的作用。这里特
− 109 −
等级考试学习笔记——二级 Visual FoxPro

别需要注意惟一索引的含义,惟一索引与字段值的惟一性无关,即建立了惟一索引的字段,
它的字段值是可以重复的,它的“惟一”是指在使用相应的索引时,重复的索引字段值只有
惟一值出现在索引项中。
问题 2:怎样建立表索引?
在 VFP 中,表索引文件有两种结构:一种是传统的.idx 索引文件,一种是.cdx 复合
索引文件。.idx 索引文件只有一个索引关键字表达式,又被称为单入口索引文件,它主
要是为与 FoxBase 以前的版本兼容而存在的,在 VFP 中,大多不用这种结构。.cdx 索
引文件包含了多个索引关键字表达式,好像是把多个.idx 索引文件合并成了一个文件。
复合索引文件又可以分为两种:一种是结构化复合索引文件,一种是独立的复合索引
文件。
建立结构化复合索引文件的方法如下。
结构化复合索引文件的扩展名为.cdx,其主文件名与相应的数据表的主文件名相同。当
数据表文件打开后,结构化复合索引文件也自动被打开。
(1)菜单操作
打开一个已经存在的数据库,选择其中的一个表,单击右键,在其快捷菜单中单击“修
改”命令,打开此表的表设计器,把表中的一个字段设为按升序或降序索引,如图 4-69 所示。
再单击“索引”选项页,如图 4-70 所示。该选项页是用来定义索引项的,其中有以下几个
内容。

图 4-69 “表设计器”

− 110 −
第4章 VFP 数据库的基本操作

图 4-70 “索引”选项卡

① 排序:用来定义排序规则。单击右边的灰色方块,若为向上的箭头为升序,再单击
变为向下箭头表示降序。
② 索引名:定义索引标识名。它的命名规则同字段名,但不一定与字段名相同。
③ 类型:用来定义索引类型。可以选择主索引、候选索引、惟一索引和普通索引。各
个索引的定义已经详细讲过。
④ 表达式:用来指定作为排序的索引关键字字段表达式。该表达式值的大小是排序的
依据。其中数值型的数据按其大小排序,字符型值按其 ASCII 码值的大小排序,汉字根据汉
字内码大小排序(其中一级常用汉字是按拼音排序) ,日期型数据是按日期的先后排序,逻辑
型数据是.T.大于.F.。
另外,表达式可以是一个字段名,也可以是包含字段名的复合索引表达式。例如,假设
一个表有总成绩和数学成绩等字段,若表达式写成“总成绩+数学成绩” ,则此表达式以总成
绩与数学成绩之和的值为排序依据,但是若想做到先按总成绩排,再按数学成绩排,那么上
述的表达式无法实现。不过可以借助一些函数来排序,如借助 STR()函数转换,即用表达式:
“STR(总成绩)+STR(数学成绩)”。
如果字段中的类型不一样,一般需要用函数转换为字符型,然后用“+”号连接。例如:
姓名+DTOC(工作日期),性别+STR(基本工资)。需要注意的是,表达式必须是 VFP 的合法表
达式,否则系统会提示“操作数/操作数类型不匹配”的出错信息。
表达式可以直接输入,也可以单击右边的“ ”按钮在表达式生成器中生成。

− 111 −
等级考试学习笔记——二级 Visual FoxPro

⑤ 筛选:用来定义筛选条件,只有满足条件的记录参加索引。若不设置筛选条件,则
所有记录参加索引。
在对上述内容进行操作后,单击“确定” ,出现结构更改确认对话框,单击“是” ,索引
建立完毕。
建立后的索引可以修改。修改方法与建立方法相同:打开表设计器,可以修改已建立的
索引,也可以利用“插入”和“删除”按钮插入或删除索引。
(2)命令方式
命令格式:INDEX ON <表达式> TAG <索引标识名> [FOR <条件表达式>]
[ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]。
功能注释:建立结构化复合索引文件。
说明:
① 这里的表达式、索引标识名及 FOR 短语分别对应菜单方式中的相应内容。
② ASCENDING|DESCENDING : 用 来 指 定 某 一 索 引 表 达 式 的 升 、 降 序 , 缺 省 为
ASCENDING,即升序。
③ UNIQUE:用于实现惟一索引。如果有多个记录具有相同的关键字段值,索引时只取
其中的第一个记录。不选此项,则指所有记录。
④ CANDIDATE:选此项是创建候选结构索引标识。
⑤ ADDITIVE:选此项,则以前已经打开的索引文件将保持打开状态。缺省此项,则在
用 INDEX 命令创建索引文件时,关闭所有已打开的索引文件。
例如:在工资表中要按基本工资的升序建立索引,在命令窗口输入 INDEX ON 基本工
资 TAG JBGZ。
工资表按基本工资的升序建立了索引,如图 4-71 所示。

图 4-71 建立索引后的工资表

− 112 −
第4章 VFP 数据库的基本操作

问题 3:怎样使用索引?
上述方式给数据表建立了一个或多个索引,系统将这些索引都存储在复合结构索引文
件.cdx 中,它的主文件名与数据表名相同。与表名相同的结构化复合索引在打开表时都能够
自动打开。即当数据表中的记录被编辑(修改、删除、添加等)后,不需重新建立索引,索
引文件根据数据表更改的情况自动更改访问记录的顺序。但是对于非结构化复合索引必须在
使用之前打开索引文件。
1.结构化复合索引只需指定主控索引标识名
在这里指定主控索引标识名,就是指定访问数据表中记录的索引顺序。
(1)菜单操作
索引标识名即建立索引时用户指定的索引名,用来标识某一个索引表达式。下面以一个
例子来说明。
以浏览方式打开一个数据库。
选择菜单里“表”下的“属性”命令,出现工作区属性对话框,如图 4-72 所示,单击“索
引顺序”项下的下拉列表,其中“无顺序”表示不按任何索引来排列。

图 4-72 选择“属性”

若选择工资表.Jbgz 项,记录就是按基本工资的升序排列,如图 4-73 所示。


(2)命令方式
打开数据表后,其相应的结构化复合索引文件自动被打开,其中有若干个索引标识。在
没有指定主控索引标识之前,数据表的访问顺序仍然按原来的物理顺序,要想按某一索引标
识的顺序访问数据表,则需指定主控索引标识名。下面介绍具体的命令格式。
− 113 −
等级考试学习笔记——二级 Visual FoxPro

图 4-73 “工作区属性”对话框

命令格式一:USE <数据表名> ORDER [TAG] <索引标识名>[ASCENDING|DESCEND ING]。


命令格式二:SET ORDER TO [[TAG]<索引标识名>][ASCENDING|DESCENDING]。
功能注释:指定结构化复合索引文件的主控索引标识名。
说明:
① 格式一是在打开数据表的同时指定主控索引标识名,其中 TAG 可选可不选。
② 格式二选取可选项是在打开数据表之后,单独指定主控索引标识名。不选可选项是
取消主控索引,按原物理顺序访问数据表中的记录。
③ ASCE|DESC:可以改变原来建立索引时的升降序,重新指定关键字表达式的值升|降
序排列。TAG 可选不可选。
例如:如果在命令窗口输入 USE 工资表 ORDER 基本工资 DESC 然后再浏览,结果如
图 4-74 所示。
如果在命令窗口先输入:
USE 工资表
BROW
则结果如图 4-75 所示。

− 114 −
第4章 VFP 数据库的基本操作

图 4-74 例题演示

图 4-75 例题演示

− 115 −
等级考试学习笔记——二级 Visual FoxPro

然后再输入:SET ORDER TO 基本工资 DESC


BROW
则结果如图 4-76 所示。

图 4-76 例题演示

格式一与格式二的功能相同。
2.打开独立复合索引文件且指定主控索引标识名。
要使用独立复合索引文件必须首先要打开它,然后再指定主控索引标识名。
命令格式一:USE <数据表名> INDEX <独立复合索引文件名> ORDER [TAG] <索引标
识名>
[OF <独立复合索引文件名>]
[ASCENDING|DESCENDING]
命令格式二:SET INDEX TO <独立复合索引文件名> ORDER [TAG] <索引标识名>
[OF <独立复合索引文件名>]
3.设置当前索引
尽管结构索引在打开表时都能够自动打开,或者打开了非结构复合索引文件作为主控索
引文件,但是在使用某个特定索引项进行查询或需要记录按某个特定索引项的顺序显示时,
必须用 SET ORDER 命令指定当前索引项,SET ORDER 命令的常用格式是:SET ORDER TO
[索引序号|[TAG]索引名][ASCENDING|DESCENDING]。
其中可以按索引序号或索引名指定索引项。索引序号是指建立索引的先后顺序号,并且
按照在 SET INDEX TO 命令中的总序号排列。
不管索引是按升序或降序建立的,在使用时都可以用 ASCENDING 或 DESCENDING 重
− 116 −
第4章 VFP 数据库的基本操作

新指定升序或降序。
4.使用索引快速定位
对一个表按关键字段建立索引之后,用户可以很快地查找到所需要的记录,因为相
同关键字数据的记录已连在一起,可以连续访问。利用菜单操作方式主要是利用“表”
下的“转到记录”级联菜单中的“定位”命令,在“定位记录”对话框中设置范围和
FOR 条件,指针指向满足条件的第一个记录上。若已建立了索引,且指定了该索引为
访问顺序,则关键字数据相同的记录就连在了一起。另外,用户也可以通过命令进行快
速查找。
(1)用 FIND 命令对索引文件进行查询
命令格式:FIND <常量>。
功能注释:将记录指针定位于表中索引关键字与指定常量匹配的第一个记录。
说明:
① 在用 FIND 命令之前,一定要打开相应的表,并指定索引顺序,且只能搜索索引关键
字的数据。
② FIND 后面只能是常量,不能是一般表达式、变量或函数等。所以一般用来查找字符
型、数值型等数据,所以它在使用上有一定的限制。
(2)用 SEEK 命令对索引文件进行查询
命令格式:SEEK <表达式>。
功能注释:与 FIND 相同。
说明:
① 与 FIND①相同。
② 由于 SEEK 后面是表达式,所以提高了使用的灵活性,对常量、变量及函数等数据
都可以查找。
以上两条命令在找到了要查找的记录后,FOUND()值为.T.,EOF()值为.F.。

例题讲解

例题 15 (2002 年 9 月考试题)
下面关于索引的描述正确的是________。
A.建立索引以后,原来的数据库表文件中记录的物理顺序将被改变
B.索引与数据库表的数据存储在一个文件中
C.创建索引是创建一个指向数据库表文件记录的指针构成的文件
D.使用索引并不能加快对表的查询操作
【分析】索引只是改变记录的逻辑顺序并不能改变记录的物理顺序,索引的数据与数据
库表的数据不是存储在同一个文件中,使用索引确实能加快对表的查询操作。
【答案】C
例题 16 (2003 年 4 月考试题)
在 Visual FoxPro 中,建立索引的作用之一是________。
A.节省存储空间 B.便于管理
− 117 −
等级考试学习笔记——二级 Visual FoxPro

C.提高查询速度 D.提高查询和更新速度
【分析】索引可以提高查询速度,但是维护索引是要付出代价的,当对表进行插入、删
除和修改等操作时,系统会自动维护索引,即索引会降低插入、删除和修改等操作的速度。
【答案】C
例题 17 (2002 年 9 月考试题)
若所建立索引的字段值不允许重复,并且一个表中只能创建一个,它应该是________。
A.主索引 B.惟一索引 C.候选索引 D.普通索引
【分析】在 VFP 中,建立主索引后字段值不允许重复,并且一个表中只能创建一个;建
立候选索引后,可以保证字段值的不重复,但是一个表中可以建立多个候选索引;惟一索引
和普通索引的字段值都可以重复,但是惟一索引的索引字段值只有惟一值出现在索引项中,
一个表中可以建立多个惟一索引和普通索引。
【答案】A
例题 18 (2003 年 4 月考试题)
在 Visual FoxPro 中,相当于主关键字的索引是________。
A.主索引 B.普通索引 C.惟一索引 D.排序索引
【分析】主关键字是指数据库的每个表都必须有一个或一组字段可用以惟一确定存储在
表中的每个记录,主索引是指在指定字段或表达式中不允许出现重复值的索引,这样的索引
可以起到主关键字的作用。
【答案】A
例题 19 成绩表(数学(N) ,英语(N) ,总分(N))
。要建立索引文件,先按总分降
序排列,总分相同,按数学分数降序排列,应当使用的命令是________。
A.INDEX ON (100-总分)+(100-数学) CJ
B.INDEX ON STR(-总分)+STR(-数学) CJ
C.INDEX ON STR(100-总分)+STR(100-数学) CJ
D.INDEX ON STR(总分)+STR(数学) CJ
【分析】本题要求先按总分降序排列,再按数学分数降序排列,首先需要把字段类型由
数值型转为字符型,INDEX 命令的默认顺序是升序,要想降序排列就要用 100 减去总分,用
100 减去数学分数。
【答案】C
例题 20 表学生(学号(N) ,姓名(C) ,总分(N)),要建立学号、姓名及总分的组
合索引,正确的是________。
A.INDEX ON 学号+姓名+总分 TO XS
B.INDEX ON 学号,姓名,总分 TO XS
C.INDEX ON STR(学号)+姓名+STR(总分) TO XS
D.INDEX ON 学号+STR(姓名)+总分 TO XS
【分析】INDEX 命令建立复合索引时,要使用字符表达式,本题中需要将学号和总分两
个字段转换为字符型,用 STR()函数。
【答案】C

− 118 −
第4章 VFP 数据库的基本操作

4.7 数据表的统计操作及复制
问题 1:怎样累加求和及平均值?
VFP 数据表中,对每个记录的纵向求和统计可以用累加求和命令来实现。
命令格式:SUM|AVERAGE [<字段名表>][<范围>][FOR <条件表达式>][WHILE <条件表
达式>][TO <内存变量名表>]|[TO <数组变量名>]。
功能注释:对当前数据表中指定范围内满足条件的记录进行纵向求和(选 SUM)或求平
均值(选 AVERAGE 时) 。
说明:
① 字段名表:表示将进行求和(或求平均值)的字段名或字段表达式,如果省略,则
对所有数值型字段求和(或求平均值) 。内存变量的个数要与字段名表的数量一样,其间都用
逗号分隔。
② 缺省范围和条件短语,默认对所有记录的指定字段进行求和。
③ TO 短语表示将求和结果存入内存变量或数组元素中。不选则只在屏幕显示。
例如:打开工资表,在命令窗口输入 SUM 基本工资 TO ZGZ。
屏幕上会显示如下结果。
基本工资
4150.00
输入 AVERAGE 基本工资 TO PJGZ。
屏幕上会显示如下结果。
基本工资
1037.50
问题 2:怎样统计记录个数?
命令格式:COUNT[<范围>][FOR <条件表达式>][WHILE <条件表达式>][TO <内存变量
名表>]|[TO <数组变量名>]。
功能注释:统计当前表中指定范围内符合条件的记录个数。
说明:缺省范围和条件短语,则默认对所有记录进行统计。其他同 SUM。
例如:COUNT FOR 基本工资>=950 TO GS
?GS
屏幕上会显示 2。
问题 3:怎样分类汇总求和?
分类汇总求和对已经建立了索引并指定了主控索引的数据表,可以按关键字进行分类
汇总。
命令格式:TOTAL ON <关键字表达式> TO <新表名> [FIELDS <字段名表>][<范围>]
[FOR <条件表达式 1>][WHILE <条件表达式 2>]。
功能注释:对当前数据表中具有相同关键字表达式值的所有连续记录求和,将所求的和
作为一条新记录送入新表中。
说明:
− 119 −
等级考试学习笔记——二级 Visual FoxPro

① 当前数据表必须是按<关键字表达式>中的字段索引过且打开索引文件或指定该索引
为主索引标识,以保证具有相同关键字值的记录能连续访问。
② FIELDS 短语给出了需分类求和的字段名,这些字段只能是数值型或货币型的,如果
缺省,则对当前表中的所有数值型或货币型字段分类求和。无论是否选 FIELDS 短语,新表
与当前表的结构是相同的。
③ 对当前数据表中的若干个关键字表达式相同的记录,生成新表中的一条记录。这条
记录的非数值型或非货币型字段取自关键字相同的一组记录中首记录的相应域,参加求和的
字段值取自求和结果。
例如:工资表中有两个人的工资是相同的,都是 900,在命令窗口输入以下命令。
TOTAL ON 基本工资 TO XB FIELDS 基本工资
SELECT 2
USE XB
BROW
结果如图 4-77 所示。

图 4-77 例题演示

问题 4:如何复制数据表?
在实际操作中,常常需要将一些数据表备份。有时需要备份整个表,有时只需复制满足
条件的部分记录或部分字段,甚至将数据表复制成一个数据文件。要完成这些操作,可以用
以下命令完成。
− 120 −
第4章 VFP 数据库的基本操作

命令格式:COPY TO <表文件名> [<范围>][FOR|WHILE <逻辑表达式>] FIELDS <字段名


表 >[DATABASE < 数 据 库 名 > [NAME < 长 表 名 > ]][[WITH] CDX]| [[WITH]
PRODUCTION]|SDF| SYLK| WK1|WKS| WR1| WRK| XLS| XL5| DELIMITED [WITH <定界符>
|WITH BLANK| ……
功能注释:将打开的数据表全部或部分复制成一个新的数据库表、自由表、文本格式的
数据表、Lotus1-2-3 电子表或 Excel 电子表格等
说明:
① 该命令功能很强,上述格式中只写出其中的一部分,这里只讲述它的一部分功能。
② 不选任何可选项,是将打开的当前数据表原样复制到<数据表名>中,且其为一个自
由表。若选 DATABASE 项是将复制到的表添加到指定的数据库中,还可以指定长表名。
③两个 WITH 选项与前面复制结构时的意义相同。
④ 选 SDF 是将数据表复制成扩展名为.txt,格式为系统数据格式的数据文件(可以用
TYPE <数据文件名>来查看其内容与格式) 。选 XL5 是将数据表复制成 Excel 5.0 的电子表。
例如:输入下列命令。
USE 图书管理
COPY TO TSGL FIELDS 读者证号,姓名 XLS
然后用 Excel 打开该文件,结果如图 4-78 所示。

图 4-78 例题演示

− 121 −
等级考试学习笔记——二级 Visual FoxPro

例题讲解

例题 21 在 Visual FoxPro 中,在已打开的数据表“学生”中统计表中学生的记录个数,


应该用的命令是________。
A.SUM B.COUNT C.TOTAL D.AVERAGE
【分析】选项 A 计算当前表中指定字段的总和,选项 B 统计表中记录数目,选项 C 计算
当前选定表中数值字段的总和,选项 D 计算当前表中指定字段的平均值。
【答案】B
例题 22 在打开的数据表“工资”中,若要计算所有记录的工资总和并存入 zgz,应使
用的命令是________。
【分析】求总和的命令是 SUM,所以应该用命令 SUM 工资 TO zgz。
【答案】SUM 工资 TO zgz
例题 23 上例中,若要求所有记录的平均工资并存入 pjgz,应使用的命令是________。
【分析】求平均工资的命令是 AVERAGE,所以应该用命令 AVERAGE 工资 TO pjgz。
【答案】AVERAGE 工资 TO pjgz

4.8 多表的使用
在使用数据表时,经常会同时用到多个数据表,例如:图书管理数据表只包含了读者证
号、姓名及所借书目,图书管理 2 数据表则包含了姓名、性别及专业,要想全面了解读者的
信息,就必须同时使用这两个数据表。为此,VFP 提供了多表操作,引入了工作区和别名这
两个概念,用户可以同时在不同工作区打开不同数据表,也可以同时在不同工作区打开相同
数据表。
问题 1:多工作区的概念及其如何使用?
VFP 系统默认在第一个工作区中工作,在前面的学习中,一直没有指定工作区,实际上
都是在第一工作区中工作。
指定工作区的命令格式:SELECT <工作区编号>|<工作区别名>|<表的别名>。
功能注释:
① 工作区编号是一个大于等于 0 的数字,用于指定工作区号,最小的工作区号是 1,最
大的工作区号是 32767,即同一时刻最多允许打开 32767 个表。如果编号为 0,则系统选择编
号最小的可用工作区,即还没有使用的工作区。另外,如果在某个工作区中我们已经打开了
一个数据表,要回到该工作区操作该表,可以使用表名或表的别名。表的别名可以用如下命
令来完成:USE <数据表名> ALIAS <别名>。
② 系统为工作区规定了别名,其中 1 至 10 号工作区的别名是:A、B、C、……、J 十
个字母,11 至 32767 号工作区分别用 W11、W12、W13……、W32767 表示。所以我们在给
数据表起别名时,不要于这些别名冲突。
③ 还可以用如下的命令选择工作区:
USE <数据表名>[ALIAS <表的别名> IN 0|<工作区编号>|<工作区别名>

− 122 −
第4章 VFP 数据库的基本操作

即在打开数据表的同时选择了工作区。
例如:USE 图书管理 && 在默认工作区 1 打开该数据表
SELECT 2
USE 工资表 && 在工作区号 2 打开工资表
?SELECT() &&返回当前工作区号
也可以用在打开数据表时,选定工作区:
USE 图书管理
USE 工资表 IN 2
另外,还可以用菜单的方式打开数据表,单击“窗口”下的“数据工作期”,出现“数
据工作期”对话框,如图 4-79 所示。

图 4-79 “数据工作期”对话框

单击图中的“打开”则出现“打开”对话框,如图 4-80 所示。


在打开对话框中选择要打开的数据表,则在“别名”下有了在 1 区打开的表名。此时,
若再单击“打开” ,还可以在 2 区打开一个数据表。另外,还可以在数据工作期对话框的下方
看到该表所在的数据库、所在的工作区号以及该表总的记录数。
问题 2:如何使用不同工作区的表?
由于当前工作区只有一个,而在使用时,常常会同时用到多个数据表的数据,VFP 也解
决了这个问题。方法就是在非当前工作区的表的字段名前加注工作区别名或表的别名:<别
名>- > <字段名>或<别名>.<字段名>。
例如:
SELECT 2
− 123 −
等级考试学习笔记——二级 Visual FoxPro

USE 图书管理
SELECT 3
USE 图书管理 2
?图书管理.性别
屏幕上显示的是图书管理数据表中的第一个记录的“性别”字段。

图 4-80 “打开”对话框

问题 3:表间如何建立关联?
1.建立表间的临时关联
首先利用菜单方式来建立,点击“窗口”下的“数据工作期” ,点击对话框中的“打开”
来打开即将建立关联的数据表,如图 4-81 所示。首先选一个父表图书管理,然后单击“关系”
按钮,接着再选定另一个表图书管理 2 作为子表,这时会弹出“设置索引顺序”对话框,如
图 4-82 所示。按“确定”后,弹出“表达式生成器”对话框,如图 4-83 所示。在其中需要
设置用于建立关系的表达式(一般是两表中的共同字段) ,例如“读者证号”。单击“字段”
下的“读者证号” ,在 SET RELATION 下显示“图书管理.读者证号”
,确定后,便完成了两
表间的关联。这样,当指针在父表移动时,子表中的指针也移到相应的位置。此时,在命令
窗口输入如下命令:
GO 3
DISP
SELE 2
DISP
− 124 −
第4章 VFP 数据库的基本操作

所显示的结果是读者证号都为“7339913303”的记录。

图 4-81 “数据工作期”对话框

图 4-82 “设置索引顺序”对话框

− 125 −
等级考试学习笔记——二级 Visual FoxPro

图 4-83 “表达式生成器”对话框

也可以用命令方式建立表间的关联。
命令格式为 SET RELATION TO <关键字表达式> INTO <工作区别名>|<表的别名>。
例如:上例可以用如下实现。
OPEN DATA 数据库 1
USE 图书管理 IN 1 ORDER 读者证号
USE 图书管理 2 IN 2 ORDER 读者证号
SET RELATION TO 读者证号 INTO 图书管理 2 &&假设当前工作区是 1
如果要取消当前表到所有表的临时关联,用命令 SET RELATION TO。
如果只是取消某个具体的临时联系,应该使用命令 SET RELATION OFF INTO 工作区别
名| 表的别名。
2.建立表间的永久性关联
表间的永久性关联是指一旦建立了关联,这种关联便会一直存在于数据库文件中。而临
时性关联在每次打开数据库时都要重建。临时关联可以控制关联表内记录指针间的移动,而
永久性关联不能实现该功能。表间的临时关联通过字段来建立,永久关联通过索引来建立。
永久性关联主要是在数据库设计器中进行,而且每个要建立关联的数据表必须指定一个
索引关键字。若表间是一对一的关系(表 1 中的任何一条记录,在表 2 中能且只能有一个记
录与之对应) ,则两个表必须根据相同字段建立一个主关键字索引;若是一对多的关系(表 1

− 126 −
第4章 VFP 数据库的基本操作

的任何一条记录在表 2 中都有多条记录与之相对应) ,则“一”方必须根据共同字段建立一个


主关键字索引, “多”方的表必须根据相同字段建立一个普通索引。
举例说明,图书管理数据表中的主索引关键字是“读者证号”,图书管理 2 中的普通
索引关键字是“读者证号” 。打开数据库设计器,可以发现图书管理数据表的索引关键字
“读者证号”前有个钥匙型的图标,点击并且按住鼠标左键拖动其到图书管理 2 的索引关
键字“读者证号”上。可以看见在两表中间出现一条连线,这样就建立起两表间的永久性
关联。
3.参照完整性
参照完整性是当插入、删除或修改一个表中的数据时,通过参照引用相互关联的另一个
表中的数据,来检查对表的数据操作是否正确。
在上例中,用鼠标右键单击图书管理和图书管理 2 之间的连线,如图 4-84 所示,再单击
“编辑参照完整性”,如图 4-85 所示。这里需要注意的是,在编辑参照完整性之前,要清理数
据库。方法是:只要数据库是当前窗口,菜单栏里就会出现“数据库” ,单击其中的“清理数
据库”即可。

图 4-84 选择“编辑参照完整性”

参照完整性包括更新规则、删除规则和插入规则。
更新规则中,“级联”表示用新的关键字值更新子表中的所有相关记录;“限制”表
示若子表中有相关记录则禁止更新;“忽略”表示可以随意更新父记录的连接字段值。
删除规则中,“级联”表示自动删除子表中的所有相关记录;“限制”表示若子表中有相
关记录,则禁止删除父表中的记录;“忽略”表示删除父表的记录时与子表无关。
插入规则中,
“限制”表示若父表中没有相匹配的连接字段值则禁止插入子记录;“忽略”
表示可以随意插入子记录。

− 127 −
等级考试学习笔记——二级 Visual FoxPro

图 4-85 “参照完整性生成器”对话框

综合实例

1.(2004 年 4 月选择题第 9 题)
数据库表可以设置字段有效性规则,字段有效性规则属于________。
A.实体完整性范畴 B.参照完整性范畴
C.数据一致性范畴 D.域完整性范畴
【分析】实体完整性是保证表中记录惟一的特性,即在一个表中不允许有重复的记录。
参照完整性是当插入、删除或修改一个表中的数据时,通过参照引用相互关联的另一个表中
的数据,来检查对表的数据操作是否正确。域完整性可以限定字段的取值类型和取值范围,
另外还可以用一些域约束规则来进一步保证域完整性。域约束规则又叫字段有效性规则。
【答案】D
2.(2004 年 4 月选择题第 10 题)
在 Visual FoxPro 中字段的数据类型不可以指定为________。
A.日期型 B.时间型 C.通用型 D.备注型
【分析】在 Visual FoxPro 中字段的数据类型有:字符型、货币型、数值型、浮点型、日
期型、日期时间型、双精度型、整型、逻辑型、备注型、通用型、字符型(二进制)及备注
型(二进制) 。
【答案】B
− 128 −
第4章 VFP 数据库的基本操作

3. (2004 年 4 月选择题第 11 题)
用 命 令 “ INDEX ON 姓 名 TAG index_name UNIQUE ” 建 立 索 引 , 其 索 引 类 型
是________。
A.主索引 B.候选索引 C.普通索引 D.惟一索引
【分析】在 Visual FoxPro 中,建立索引的命令格式是:INDEX ON eExression TO
IDEFileName|TAG TagName UNIQUE(惟一索引)|CANDIDATE(候选索引) 。
【答案】D
4. (2004 年 4 月选择题第 12 题)
以下关于主索引和侯选索引的叙述正确的是________。
A.主索引和侯选索引都能保证表记录的惟一性
B.主索引和侯选索引都可以建立在数据库表和自由表上
C.主索引可以保证表记录的惟一性,而侯选索引不能
D.主索引和侯选索引是相同的概念
【分析】主索引可确保字段中输入值的惟一性并决定了处理记录的顺序。候选索引和主
索引具有相同的特性,它也要求字段中输入值的惟一性并决定了处理记录的顺序。
【答案】A
5. (2004 年 4 月选择题第 15 题)
数据库表的字段可以定义默认值,默认值是________。
A.逻辑表达式 B.字符表达式 C.数值表达式 D.前三种都可能
【分析】字段“默认值”的类型以字段的类型确定,字段的数据类型决定存储在字段中
的值的数据类型,所以其默认值的类型不确定。
【答案】D
6. (2004 年 4 月选择题第 16 题)
数据库的字段可以定义规则,规则是________。
A.逻辑表达式 B.字符表达式
C.数值表达式 D.前三种说法都不对
【分析】字段的规则是逻辑表达式。
【答案】A
7. (2004 年 4 月选择题第 22 题)
如果指定参照完整性的删除规则为“级联” ,则当删除父表中的记录时________。
A.系统自动备份父表中被删除记录到一个新表中
B.若字表中有相关记录,则禁止删除父表中记录
C.会自动删除子表中所有相关记录
D.不作参照完整性检查,删除父表记录与子表无关
【分析】删除规则中如果选择“级联” ,则自动删除子表中的相关所有记录。如果选择“限
制” ,若子表中有相关的记录,则禁止删除父表中的记录。如果选择“忽略” ,则不作参照完
整性检查,即删除父表的记录时与子表无关。
【答案】C
8. (2004 年 4 月填空题第 1 题)
− 129 −
等级考试学习笔记——二级 Visual FoxPro

使用数据库设计器为两个表建立联系,首先应在父表中建立________索引,在子表中建
立________索引。
【分析】在数据库设计器中建立两个表间的联系,首先要在父表中建立主索引,在子表
中建立普通索引,然后通过父表的主索引和子表的普通索引建立起两个表之间的联系。
【答案】主、普通
9.(2004 年 9 月选择题第 4 题)
在表设计器的“字段”选项卡中可以创建的索引是________。
A.惟一索引 B.候选索引 C.主索引 D.普通索引
【分析】表设计器中的“字段”选项卡中可以建立的是普通索引,索引名与字段名相同,
索引表达式就是对应的字段。如果要将索引定义为其他类型的,则须将界面切换到“索引”
选项卡,然后从“索引”下拉列表框中选择其类型。
【答案】D
10.(2004 年 9 月选择题第 27 题)
使用 SQL 语句增加字段的有效性规则,是为了能保证数据的________。
A.实体完整性 B.表完整性 C.参照完整性 D.域完整性
【分析】此题是对域完整性基本概念的考察。域完整性可以限定字段的取值类型和取值
范围,另外还可以用一些域约束规则来进一步保证域完整性。域约束规则又叫字段有效性
规则。
【答案】D
11.(2004 年 9 月选择题第 29 题)
有关参照完整性的删除规则,正确的描述是________。
A.如果删除规则选择的是“限制” ,则当用户删除父表中的记录时,系统将自动删除子
表中的所有相关记录。
B.如果删除规则选择的是“级联” ,则当用户删除父表中的记录时,系统将禁止删除子
表相关的父表中的记录。
C.如果删除规则选择的是“忽略” ,则当用户删除父表中的记录时,系统不负责做任何
工作。
D.上面三种说法都不对
【分析】此题是对参照完整性中删除规则内容的考察。如果选择的是“级联” ,则自动删
除子表中的所有相关记录。如果选择的是“限制” ,若子表中有相关的记录,则禁止删除父表
中的记录。如果选择的是“忽略” ,则不作参照完整性检查,即删除父表的记录与子表无关。
【答案】C
12.(2004 年 9 月填空题第 6 题)
当删除父表中的记录时,若子表中的所有相关记录也能自动删除,则相应的参照完整性
的删除规则为________。
【分析】此题是对参照完整性中删除规则内容的考查。如果选择的是“级联” ,则自动删
除子表中的所有相关记录。如果选择的是“限制” ,若子表中有相关的记录,则禁止删除父表
中的记录。如果选择的是“忽略” ,则不作参照完整性检查,即删除父表的记录与子表无关。
【答案】级联
− 130 −
第4章 VFP 数据库的基本操作

13.(2004 年 4 月选择题第 18 题)
使数据库表变为自由表的命令是________。
A.DROP TABLE B.REMOVE TABLE
C.FREE TABLE D. RELEASE TABLE
【分析】将一个表从数据库中移出,也就是使数据库表变为自由表,其命令是 REMOVE
TABLE TableName。
【答案】B
14.(2004 年 9 月填空题第 3 题)
使数据库表变为自由表的命令是_____TABLE。
【分析】从数据库中移出表的命令是:REMOVE TABLE TableName。
【答案】REMOVE

本章总结
难点重点
1.创建、打开数据库及打开数据库设计器的三种方法:通过对话框的方法、 使用命令
的方法和通过项目管理器的方法。
2.删除数据库有两种方法:从项目管理器中删除、用命令方式删除。关闭数据库也有
多种方法:最直接的办法就是关闭窗口右上角的 X,还有用命令关闭。
3.创建数据表结构有如下几种方法:利用表设计器、利用表向导以及利用命令。
4.修改数据表结构有如下几种方法:菜单方式、命令方式,如果要创建的数据表的结
构与已有数据表的结构相同可直接复制。
5.表记录的输入、浏览、追加、批量追加、修改及删除。
6.字段有效性规则和记录有效性规则的设定。
7.表的索引:主索引、候选索引、普通索引及惟一索引。索引文件的建立和使用。
8.数据表的统计操作及复制。
9.多工作区的概念、工作区的选择及多工作区的使用。
10.建立表间的关联:一对一的关联、一对多的关联;表间的临时关联和永久性关联。
11.设置参照完整性。
误点剖析
1.VFP 中字段名规定有:
l 可以是汉字或合法的西文标识符。
l 自由表字段名最长为 10 个字符。
l 数据库表字段名最长为 128 个字符。
l 字段名必须以字母或汉字开头。
l 字段名可以由字母、汉字、数字和下划线组成。
l 字段名中不能有空格。
2.删除数据库有两种方法:从项目管理器中删除;用命令方式删除。需要注意的是:
VFP 的数据库文件并不真正含有数据库表或其他数据库对象,只是在数据库文件中登录了相

− 131 −
等级考试学习笔记——二级 Visual FoxPro

关的条目信息,表、视图或其他数据库对象是独立存放在磁盘上的。所以无论是“移去”还
是“删除” ,都没有删除数据库中的表等对象,要在删除数据库的同时删除表等对象,需要使
用命令方式删除数据库,删除数据库的命令是:
DELETE DATABASE <数据库名>|?[DELETETABLES][RECYCLE]
3.常用命令的语法书写规则
(1)每个命令必须以一个命令动词开头,大小写字母等效。在命令窗口中输入命令时,
一律在英文输入状态下进行。标点符号均用英文,否则系统将提示:命令中含有不能识别的
短语或关键字。
(2)命令动词和子句中的短语可以用其前 4 个或 4 个以上字符的缩写表示,如:DISP、
DISPL、DISPLAY 及 Display 都是等效的。
(3)大多数命令动词后可以跟一个或多个限定该动词的子句。命令行中的各个子句可以
按任意次序排列。
(4)命令行中如果有多个词就以一个或多个空格隔开,如果两个词之间已嵌有双引号、
单引号、括号或逗号等分界符,则空格可以省略。
(5)命令行的最大长度不能超过 254 个字符。
(6)一行只能写一条命令,每条命令的结束标志是按回车键。如果一个命令太长,一
行写不下,可以使用续行符“;” ,然后回车,并在下一行接着写该命令。但总长不能超
过 254 个字符。
4.使用命令方式 APPEND [BLANK] [IN <工作区号>|<表的别名>]追加记录时:
① 不选任何可选项,可以追加若干条记录。
② 选 BLANK 只能在尾部添加一条空白记录。这在程序中经常用到,以便用程序的方式
自动添加数据。
5.批量追加记录时,被追加的数据表中的字段至少要有一个与当前表的字段同名、同
类型,否则不能添加记录。若当前表中的字段多于被追加的表,则多出的字段数据空着;若
被追加的表的字段多于当前表,则多出的字段被截去。
6.一个表只能有一个主关键字,所以一个表只能创建一个主索引。
7.候选索引和主索引具有相同的特性,建立候选索引的字段可以看作是候选关键字,
所以一个表可以建立多个候选索引。候选索引与主索引同样要求字段值的惟一性并决定了
处理记录的顺序。在数据库表和自由表中均可以为每一个表建立多个候选索引。候选索引
与主索引不同的一点是,主索引还可以在永久关系中建立参照完整性的父表,即在表间建
立一对多的关系,二表中的“一方”必须用主索引作为创建关系的基础。而候选索引则无
此功能。
8.参照完整性包括更新规则、删除规则和插入规则。
更新规则中, “级联”表示用新的关键字值更新子表中的所有相关记录; “限制”表示若
子表中有相关记录则禁止更新; “忽略”表示可以随意更新父记录的连接字段值。
删除规则中, “级联”表示自动删除子表中的所有相关记录; “限制”表示若子表中有相
关记录,则禁止删除父表中的记录; “忽略”表示删除父表的记录时与子表无关。
插入规则中, “限制”表示若父表中没有相匹配的连接字段值则禁止插入子记录; “忽略”
表示可以随意插入子记录。
− 132 −
第4章 VFP 数据库的基本操作

单元练习

1.(2002 年 9 月考试题)
参照完整性的规则不包括________。
A.更新规则 B.删除规则 C.插入规则 D.检索规则
2.(2002 年 9 月考试题)
如果在建立数据库表 stock.dbf 时,将单价字段的有效性规则设为“单价>0” ,通过该设
置,能保证数据的________。
A.实体完整性 B.域完整性 C.参照完整性 D.表完整性
3.(2003 年 4 月考试题)
在 Visual FoxPro 中,建立数据库时,将年龄字段值限制在 12-40 岁之间的这种约束属于
________。
A.实体完整性约束 B.域完整性约束 C.参照完整性约束 D.视图完整性约束
4.(2003 年 4 月考试题)
Visual FoxPro 中的参照完整性的规则不包括________。
A.更新规则 B.删除规则 C.查询规则 D.插入规则
5.Visual FoxPro 中的 SET RELATION 关联操作是一种________。
A.逻辑联接 B.物理联接 C.逻辑排序 D.物理排序
6.在数据库设计器中,永久关系表现为表索引之间的________。
7.在关系数据库中最常用的关系是________。

习题答案
1.D。解析:参照完整性是当插入、删除或修改一个表中的数据时,通过参照引用相互
关联的另一个表中的数据,来检查对表的数据操作是否正确。参照完整性规则包括更新规则、
删除规则和插入规则。
2.B。解析:本题通过有效性规则的设置限制了字段的取值范围和取值类型,用来检验
“单价”字段数据输入的正确性,从而保证了数据的域完整性。
3.B。解析:在 VFP 中,域完整性可以限定字段的取值类型和取值范围,也可以用一
些域约束规则来进一步保证域完整性。
4.C。解析:参照完整性是当插入、删除或修改一个表中的数据时,通过参照引用相互
关联的另一个表中的数据,来检查对表的数据操作是否正确。参照完整性包括更新规则、删
除规则和插入规则。
5.A。解析:SET RELATION 是建立两个表间的联接,并且属于逻辑联接,它并不改变
表的物理顺序。
6.连线。解析:通过前面的学习,可以知道,两表建立永久关系,则它们的表索引之
间会出现连线。
7.一对多。解析:关系数据库的关系有三种,一对一、一对多以及多对多。一对一的
关系不常见。多对多的关系又可以分解成一对多,所以最常用的关系是一对多。
− 133 −
等级考试学习笔记——二级 Visual FoxPro

第5章 程 序 设 计
本章主要介绍了程序设计及其相关内容。程序文件的建立与执行;简单的交互式输入输
出命令;程序的三种基本结构:顺序结构、选择结构及循环结构;子程序的设计与调用;过
程与过程文件;局部变量和全局变量以及过程调用中的参数传递。

知识结构图

大纲中的知识点

5.1 程序文件的建立与运行
学习程序设计的目的是为了避免因在命令窗口逐条输入命令造成的麻烦和容易出错的
问题,使得处理数据、完成一些具体任务变得准确、简洁并且迅速。

− 134 −
第5章 程 序 设 计

问题 1:程序文件是如何建立以及执行的?
程序是能够完成一定任务的命令的有序集合。这组命令被存放在称为程序文件或命令文
件的文本文件中。本节主要介绍程序的建立、运行以及专用于程序文件的若干命令。
1.程序文件如何建立与修改?
命令格式:MODIFY COMMAND <文件名>。
说明:文件名的扩展名如果缺省,系统自动加上默认扩展名.prg。文件名前可以指定保
存文件的路径。
例题 1 MODIFY COMMAND A:\VFP\TB
用菜单方式建立程序文件方法如下。
菜单中,打开文本编辑窗口,单击 【文件】→【新建】→【程序】→【新建文件】在
文本编辑窗口中输入程序内容。保存程序文件单击【文件】→【保存】(Ctrl+W)→【另存
为】(对话框)→ 指定程序文件的存放位置和文件名→【保存】 (缺省扩展名为.prg)
菜单方式打开、修改程序文件方法如下。
在菜单中,单击【文件】→【打开】→【文件类型】→【程序】→选定文件→【确定】 。
编辑修改后,若需要保存,则单击【文件】→【保存】 (Ctrl+W);若放弃修改,则单击【文
件】→【还原】 (Esc 键)。
2.程序文件是如何执行的?
命令格式:DO<文件名>。
说明:文件名前可以使用路径,否则指当前目录,若扩展名是.prg 则可以省略。当程序
文件被执行时,文件中包含的命令将依次被执行,直到所有的命令被执行完毕,或者执行以
下命令。
① CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口。
② DO:转去执行另一个程序。
③ RETURN:结束当前程序的执行,返回到调用它的上级程序,若无上级程序,则返
回到命令窗口。
④ QUIT:退出 Visual FoxPro 系统,返回到操作系统。
用菜单方式执行程序的方法如下。
在【程序】菜单中,打开【运行】对话框 → 选择要运行的程序 → 单击【运行】。采
用此方式运行程序文件时,系统会自动将默认的盘和目录设置为程序文件所在的盘和目录。

例题讲解

假定默认的磁盘和文件夹已经设置。在命令方式 下,要执行程序 AB.prg 的命令


是________。
【分析】
程序作为一个文件保存在磁盘上,执行一个程序可以用以下 4 种方式。
① 在菜单方式下,在【程序】菜单中选择【运行】命令。在弹出的【运行】对话框中,
选择【程序列表】中想要运行的程序。
② 在命令方式下,在命令窗口键入命令:DO<文件名>[WITH<发送参数表>]。VFP 允
− 135 −
等级考试学习笔记——二级 Visual FoxPro

许使用带参数的程序文件。在编写带参数的程序文件时,必须把命令作为程序的第一条命令。
③ 若程序包含在一个项目中,则可以在【项目管理器】对话框中选定它,再单击【运
行】按钮。
④ 若程序已经在当前编辑窗口中,则可以单击工具栏上的!按钮直接运行。此时 VFP
系统会把磁盘上的文件读入 VFP 的内存工作区,把控制交给该程序的第一条语句开始执行,
从而实现程序的功能。
【答案】DO AB.PRG
问题 2.简单的交互式输入输出命令包含哪些,其具体命令格式及功能是怎样的?
在一个数据库应用系统的程序设计中,总要考虑原始数据的输入及处理结果的输出,这
就要涉及输入输出问题。本节介绍输入、输出命令。
1.WAIT 命令的命令格式及其功能是怎样的?
命令格式:WAIT[<字符表达式>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT]
[CLEAR\NOCLEAR][TIMEOUT<数值表达式>]。
功能注释:
① 此命令的功能为暂停程序的执行。<字符表达式>的值作为提示信息。如果<字符达式>
的值为空串,那么不显示任何提示信息。如果缺省,则显示默认的提示信息“按任意键继
续……” 。
② 若选 TO 短语,<内存变量>只能接受由键盘输入的单个字符。如用户按的是 ENTER
键或单击了鼠标,<内存变量>中保存的是空串。
③ 若选 WINDOW 子句可使主屏幕上出现一个 WAIT 提示窗口,位置由 AT 选项的<行>
<列>来指定。若缺省 AT 选项,信息文本将显示在主屏幕的右上角。
④ 若选 NOWAIT 短语,在显示提示语的同时,光标仍处于当前控制窗中。
⑤ 若选 NOCLEAR 短语,则不关闭提示窗口,直到用户执行下一条 WAIT WINDOW 命
令或 WAIT CLEAR 命令。
⑥ 若选 TIMEOUT 子句,<数值表达式>给出以秒为单位的时间。一旦超时就不再等待
用户按键,WAIT 语句将自动终止,继续运行。
例题 2 WAIT "请输入正确内容!" WINDOW TIMEOUT 7
命令执行时,在主屏幕右上角出现一个提示窗口,其中显示“请输入正确内容! ”字样,
之后,程序暂停执行。当用户按任意键或超过 7 秒钟时,提示窗口关闭,程序继续运行。
2.INPUT 命令的命令格式以及功能是怎样的?
命令格式:INPUT[<字符表达式>]TO<内存变量>。
功能注释:
① <字符表达式>是提示语,可以通过键盘输入数值型、字符型、日期型、逻辑型及货
币型等数据给内存变量。
② 若输入字符型一定要加定界符。
③ INPUT 一般用来输入数值型数据。
例题 3
INPUT "请输入最低基本工资:" TO GGZ
LIST 职工号,姓名,性别,职称,基本工资 FOR 基本工资>=GGZ OFF
− 136 −
第5章 程 序 设 计

【分析】此题结果是只显示基本工资大于等于键盘输入的数(如:1000) ,并且不显示记
录号只显示内容。
【答案】职工号 姓名 性别 职称 基本工资
12 刘铭 男 讲师 1500
14 李霞 女 副教授 2000
15 刘媛 女 教授 2500
3.ACCEPT 命令的命令格式以及功能是怎样的?
命令格式:ACCEPT[<字符表达式>]TO<内存变量>。
功能注释:
① 键盘上输入一个字符串常量给内存变量。字符表达式是提示语。
② 该命令只能接受字符串。不需要加定界符,否则定界符本身也当成字符串的一部分
输入内存变量。
③ TO 短语是必选项。
例题 4 ACCEPT"请输入要查找的地址:"TO ADDRESS
此时,用户从键盘上输入一个地址并按回车键后,地址就被存入内存变量 ADDRESS 中。

例题讲解

下列叙述正确的是________。
A.INPUT 语句只能接收字符串
B.ACCEPT 命令只能接收字符串
C.ACCEPT 语句可以接收任意类型的 VFP 表达式
D.WAIT 只能接收一个字符,且必须按 ENTER 键
【分析】该题考察考生对于 INPUT 语句和 ACCEPT 语句的区别的理解。从 INPUT 语句
和 ACCEPT 语句的规定中可以知道,ACCEPT 命令只能接收字符串,而 INPUT 语句则可接
收任意类型的 VFP 表达式。WAIT 只能接受由键盘输入的单个字符,如用户按 ENTER 键,
<内存变量>保存的是空串。
【答案】B

5.2 程序的基本结构
程序结构是指程序中命令或语句执行的流程结构。与其他高级语言程序类似,VFP 程序
也有 3 种基本控制结构,即顺序结构、分支结构(亦称选择结构)与循环结构。
问题 1:顺序结构是按什么顺序来执行命令的?
顺序结构是最简单也是最常用、最基本的程序结构,它按命令在程序中出现的先后次序
依次执行。
例题 5 现有数据库 XS,内有两数据表分别为学生.dbf 与选课.dbf。表学生.dbf 中“学
号”(C)字段的前两位为入学年份, (如 02 代表 2002 年入学)
,第 3、4 位为专业代码。试
编写命令文件 TEST.prg,分别统计所有学生和 2002 年入学,专业代码为 03 的学生选修课程
− 137 −
等级考试学习笔记——二级 Visual FoxPro

号为 101 课程的平均成绩。
【分析及答案】
* 分别统计所有学生和 02 年入学学生的平均成绩
SET TALK OFF
OPEN DATABASE XS &&打开数据库 XS
USE 选课 IN 0 &&在空闲工作区打开选课表
SELECT AVG(成绩) FROM 选课 WHERE 课程号='101'INTO ARRAY M1
SELECT AVG(成绩) FROM 选课 WHERE 课程号='101'AND LEFT(学号,2)='02';
AND SUBS(学号,3,2)='03' INTO ARRAY M2
CLEAR &&清除 VFP 主窗口或者当前用户自定义
窗口里的全部内容
?"所有学生的平均分:",M1(1,1)
?"02 年入学学生的平均分:",M2(1,1)
CLOSE DATABASE &&关闭当前数据库
SET TALK ON
RETURN
运行后,在命令窗口输入: DO TEST。
程序运行结果如下。
所有学生的平均分:77.00
02 年入学学生的平均分: 81.33
① 注释语句:以*或 NOTE 开头的代码行为注释行。另一种注释是加在命令行后面,以
符号&&开头。注释内容不参与程序的运行。
② SET TALK ON/OFF 命令:它是一个会话开关。系统默认值为 ON,以便在圆点提示
符下随时获得命令执行结果。设置为 OFF 状态时,命令执行结果不在屏幕上反馈显示,为避
免命令响应信息干扰正常输出信息,常在程序开头设置为 OFF。
其他可能会涉及的系统环境设置命令有:
SET CONSOLE ON/OFF 设置屏幕状态命令,默认为 ON,表明输入的信息在屏幕上显示。
若设置为 OFF,则不显示,一般用户在输入密码时常用此命令。
SET SAFETY ON/OFF 安全开关命令,默认为 ON,当出现文件要被删除、覆盖、清空
或破坏数据时提出警告,要求用户确认。设置为 OFF 时,不提出警告。
③ 命令分行:程序中每条命令都以回车键结尾,一行只能写一条命令。若命令需要分
行书写,应在一行终了时键入续行符“; ” ,再按回车键。
④ RETURN 命令:此命令是结束一个程序的执行。如果程序被另一个程序调用,则返
回到调用程序;否则返回到命令窗口。一般在程序的结尾都加上一个 RETURN 命令。
问题 2:分支结构(选择结构)是按什么顺序执行命令的?
分支结构语句包括条件语句和分支语句。
1.条件语句的格式及功能是怎样的?
语句格式如下。
IF<条件>
− 138 −
第5章 程 序 设 计

<语句序列 1>
[ELSE
<语句序列 2>]
ENDIF
功能注释:
① 有 ELSE 子句时,两组可供选择的代码分别是 <语句序列 1>和<语句序列 2>。如果
<条件>成立,则执行<语句序列 1>;否则,执行<语句序列 2>。然后转向 ENDIF 的下一条语
句,如图 5-1 所示。
② 无 ELSE 子句时,可看作第二组代码不包含任何命令。如果<条件>成立,则执行<语
句序列 1>,然后转向 ENDIF 的下一条语句;否则直接转向 ENDIF 的下一条语句去执行,如
图 5-2 所示。
③ IF 和 ENDIF 必须成对出现。
④ 条件语句可以嵌套,但不能出现交叉。在嵌套时,为了使程序清晰、易于阅读,可
按缩进格式书写。

图 5-1 有 ELSE 的条件语句 图 5-2 无 ELSE 条件语句

例题 6
已知公式:

X(X >= 0)
Y= X =
− X(X < 0)

求 Y 的值,X 由键盘输入。
【答案】
*解法一(有 ELSE)
CLEAR
SET TALK OFF
INPUT "输入 X 的值:" TO X
IF X>=0
Y=X

− 139 −
等级考试学习笔记——二级 Visual FoxPro

ELSE
Y= −X
ENDIF
?X, "的绝对值是:",Y
SET TALK ON
RETURN
*解法二(无 ELSE)
CLEAR
SET TALK OFF
INPUT "输入 X 的值:" TO X
Y=X
IF X< 0
Y= −X
ENDIF
?X, "的绝对值是:",Y
SET TALK ON
RETURN
2.分支语句的格式以及功能是怎样的?
DO CASE 语句是专门用来进行多重条件判断操作,它比 IF 语句的嵌套结构更清晰、
易读。
语句格式如下。
DO CASE
CASE<条件 1>
<语句序列 1>
CASE<条件 2>
<语句序列 2>
……
CASE<条件 n>
<语句序列 n>
[OTHERWISE
<语句序列>]
ENDCASE
功能注释:
① 不管有几个 CASE 条件成立,只有最先成立的 CASE 条件的对应命令序列被
执行。
② 如果所有 CASE 条件都不成立,且没有 OTHERWISE 子句,则直接跳出本结构;若
有 OTHERWISE 选项,执行 OTHERWISE 后的语句组后再跳出本结构。
分支语句的控制流程图如图 5-3 所示。

− 140 −
第5章 程 序 设 计

图 5-3 分支语句控制流程

例题 7 编写一个关于计算分段函数值的程序:

2 x − 1( x < 0)

3x + 5(0 <= x < 3)
f( X ) = 
5 x − 3(5 <= x < 10)

7 x + 2( x >= 10)

【答案】
SET TALK OFF
INPUT "输入 X 值:" TO X
DO CASE
CASE x<0
f=2*x-1
CASE x<3
f=3*x+5
CASE x<5
f=x+1
CASE x<10
f=5*x-3
OTHERWISE

− 141 −
等级考试学习笔记——二级 Visual FoxPro

f=7*x+2
ENDCASE
?f "(x")=,f
SET TALK ON
RETURN

例题讲解

例题 8 下列程序,回答指定问题
CLEAR
INPUT "INPUT A:" TO A
INPUT "INPUT B:" TO B
IF A>B
X=A
ELSE
X=B
ENDIF
?X
运行该程序后,若从键盘上输入 50 和 100,则屏幕显示的结果是________。
【分析】若从键盘输入 50 和 100,则 A=50,B=100。因为 A<B,故执行 IF 语句中的 ELSE
语句 X=B。
【答案】100
例题 9 算下面的分段函数,当分别输入 2,3.5,8,10 和-1 时,程序分别显示运行的
结果________。
CLEAR
X=0.0
@12,1 SAY "请输入 X 值"GET X
READ
DO CASE
CASE X<O
F=2*X-1
CASE X>=0 .AND.X<3
F=3*X+5
CASE X>3 .AND. X<5
F=X+1
CASE X>=5 .AND.X<10
F=5*X-3
CASE X=10
F=7*X+2
− 142 −
第5章 程 序 设 计

ENDCASE
? "F(",STR(X,4,1) ,")=",STR(F,4,1)
【答案】每次显示一个数据,依次是:
F( 2.0)=11.0,F( 3.5)=4.5,F( 8.0)=37.0,F(10.0)=72.0,F(-1.0)=-3.0
问题 3:循环结构是按什么顺序来执行命令的?
循环结构又称为重复结构,是指在执行程序的某些过程中,其中的某段代码重复执行若
干次,被重复执行的代码段叫循环体。VFP 所支持的循环结构的语句包括:DO WHILE 、
FOR 和 SCAN 语句。
1.DO WHILE 语句(又叫条件循环)的语句格式及功能注释。
命令格式:
DO WHILE <条件>
<语句序列 1>
[LOOP]
<语句序列 2>
[EXIT]
<语句序列 3>
ENDDO
功能注释:
① 如果第一次判断条件时,条件即为假,则循环体一次都不执行。
② 如果循环体包含 LOOP 命令时,那么当遇到 LOOP 时,就结束循环体的本次执行,
不再执行其后面的语句,而是转回 DO WHILE 处重新判断条件。
③ 如果循环体包含 EXIT 命令,那么当遇到 EXIT 时,就结束该语句的执行,转去执行
ENDDO 后面的语句。
④ 通常 LOOP 或 EXIT 出现在循环体内嵌套的选择语句中,根据条件来决定是 LOOP
回去还是 EXIT 出去。包括 LOOP 或 EXIT 选项的循环语句执行过程如图 5-4、5-5 所示。

图 5-4 不含 LOOP 或 EXIT 循环 图 5-5 含有 LOOP 或 EXIT 循环

− 143 −
等级考试学习笔记——二级 Visual FoxPro

例题 10 编写一个程序计算公式:S=1+1/2+1/3+……+1/N 的前十项之和。
【答案】
SET TALK OFF
I=1
S=0
DO WHILE I<=10
T=1/I
S=S+T
I=I+1
ENDDO
?S
SET TALK ON
此程序没有包含 LOOP 或 EXIT。
例题 11 编写一个程序使得它的功能是打印下列图形:
*
***
*****
*******
【答案】
SET TALK OFF
I=1
DO WHILE I<=4
J=1
DO WHILE J<=2*I-1
@ I,4-I+J SAY "*"
J=J+1
ENDDO
I=I+1
ENDDO
SET TALK ON
此程序也没有包含 LOOP 或 EXIT。
例题 12 编写计算 S=1+2+3+……+100 的程序。
【答案】
S=0
FOR I=1 TO 100
S=S+I
NEXT
? "S=",S
2.SCAN 语句(又叫扫描循环)的格式及功能。
− 144 −
第5章 程 序 设 计

该循环语句一般用于处理表中记录。该语句可指明需处理的记录范围及其应满足的条件。
语句格式如下。
SCAN[<范围>][FOR<条件 1>][WHILE<条件 2>]
<循环体>
ENDSCAN
执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,
对每一条记录执行循环体内的命令。
功能注释:
① <范围>的默认值为 ALL。
② EXIT 和 LOOP 命令同样可以出现在该循环语句的循环体内。
例题 13 学生数据库里有一个学生.dbf 表,从此表里统计专业代码(学号的第 3、4 位)
为 01 的男、女生人数。
【答案】
OPEN DATABASE XS
USE 学生 IN 0
SELECT 学生
STORE 0 TO B,G
SCAN FOR SUBS(学号,3,2)='01'
IF 性别=.T.
B=B+1
ELSE
G=G+1
ENDIF
ENDSCAN
CLEAR
? '男生人数',B
? '女生人数',G
CLOSE DATABASE
RETURN
SCAN 语句的功能相当于 LOCATE、CONTINUE 和 DO WHILE 语句功能的合并。

例题讲解

多重嵌套循环下,注意程序运行流向,求出程序的正确输出_______。
CLEAR
A=0
DO WHILE A<=3
B=0
DO WHILE B<=4
− 145 −
等级考试学习笔记——二级 Visual FoxPro

C=1
DO WHILE C<=9
Y=100*A+10*B+C
IF Y=2*A+B*2+C*5
?Y
ENDIF
C=C+1
ENDDO
B=B+1
ENDDO
A=A+2
ENDDO
【答案】结果显示在 4 行上,依次是 12,24,36,48。

5.3 多模块程序
应用程序一般都包含多个程序摸块,在一个程序中可能某个程序段需要多次使用,模块
做为一个相对独立的程序段可以被其他模块所调用,也可以调用其他模块。将一个应用程序
划分成一个个功能相对单一、简单的模块程序,符合人们程序开发、阅读和维护的简单、便
利的要求。
问题 1:如何设计、调用子程序?
1.如何建立子程序?
子程序的建立与编辑与普通程序无区别,用命令 MODIFY COMMAND 即可。
2.如何调用子程序?
命令格式:DO <子程序名>[WITH<实参表>]。
DO 命令打开一个子程序。
3.如何从子程序返回?
从被调用的子程序执行完后返回主程序。
命令格式:RETURN[<表达式>[TO MASTER|TO <过程名>]。
例题 14 如果一个过程不包含 RETURN 语句,或者 RETURN 语句中没有指定表达式,
则该过程________。
A.没有返回值 B.返回 0 C.返回.T. D.返回.F.
【分析】当过程执行到 RETURN 命令时,控制将转回到调用程序(或命令窗口) ,并返
回表达式的值。若缺少 RETURN 命令,则在过程结束处自动执行一条隐含的 RETURN 命令。
若 RETURN 命令不带〈表达式〉,则返回逻辑值真.T.。
【答案】C
例题 15 编写一个程序,其功能是按照下面的公式计算 C 的值。
C=M!/N!(M-N)!
【分析】由于公式中出现了三个阶乘,关于计算阶乘的程序段将重复出现三次。因此,
− 146 −
第5章 程 序 设 计

必须把计算阶乘的功能独立起来使之成为一个子程序 COMP.prg。由于每一次子程序计算的
阶乘不同,所以要用参数调用。相应的,子程序中必须有接收参数的语句,即 PARAMETERS
语句。另外,子程序每次计算阶乘的值是通过变量 J 返回到主程序中参加其他计算,所以变
量 J 必须在主程序中先定义,即 J=… 语句是必需的,但可以给它赋任何值。因为在子程序
中它是一个累计器,总是被重新赋值 1,才能正确计算阶乘的值。三个对变量 C 的赋值语句,
第一次把 M!赋给变量 C,第二次相当于把 M!/N!赋给变量 C,第三次相当于把 M!/N!
(M-N) !赋值给变量 C。
【答案】
CLEAR
INPUT "Please input 整数 M" TO M
INPUT "Please input 整数 N"TO N
J=1
DO COMP WITH M
C=J
DO COMP WITH N
C=C/J
DO COMP WITH M-N
C=C/J
?"C=",ALLTRIM(STR(C) )
RETURN
* *子程序 COMP 的程序代码如下,在未引入程序概念之前,它是以 COMP.prg 的文件名
单独存放在磁盘上的。
PARAMETERS Y
J=1
FOR I=1 TO Y
J=J+1
ENDFOR
RETURN
问题 2:过程与过程文件的概念是什么?如何建立和调用过程文件?
子程序的应用简化了许多工作,但每次调用子程序都要访问磁盘,增加了内存负担。过
程文件就像一个文件整理箱,每个子程序作为一段过程放入一个过程文件中。只要打开过程
文件就可调用其中的各个子程序(过程) 。
1.如何建立过程文件
过程文件也是一个命令文件,建立与修改用 MODIFY COMMAND 命令。其内容包括多
个过程。
语句格式如下。
PROCEDURE <过程名 1>[(<形式参数表>)]
<过程名 1 的全部内容>
RETURN
− 147 −
等级考试学习笔记——二级 Visual FoxPro

ENDPROC
例题 16 过程文件“地名”的内容。
【答案】
PROCEDURE P1
? "山东省"
RETURN
ENDP
PROCEDURE P2
DO P1
? "青岛市"
RETURN TO P1
ENDP
PROCEDURE P3
? "济南市"
DO P2
RETURN TO MASTER
ENDP
2.如何调用过程文件
第一步:打开过程,SET PROCEDURE TO [<过程文件名>]。
第二步:在主程序中某处需要某段子程序(过程)时,打开过程与 5.3 问题 1 中子程序调用
方法相同,DO<过程名>[WITH<实参表>]。
第三步:关闭程序文件,SET PROCEDURE TO 。
例题 17 过程文件使用的全步骤。
【答案】
SET TALK OFF
CLEAR
SET PROCEDURE TO pro1
DO ZCX1
DO ZCX2
CLOSE PROCEDURE
SET TALK ON
RETURN

例题讲解

阅读下列程序,正确的运行结果是________。
SET TALK OFF
STORE 100 TO X,Y,Z
DO PROC1 WITH(X),Y
− 148 −
第5章 程 序 设 计

?X,Y,Z
PROCEDURE proc1
PARAMETER m,n
m=m+100
n=n+100
RETURN
A.100 100 100 B.100 200 100
C.200 200 100 D.100 100 200
【答案】B
问题 3:局部变量与全局变量的概念是什么?过程调用中的参数是如何传递的?
1.如何使用局部变量?
只能在建立它的子程序中使用,不能在上级或下级程序中使用。
命令格式:LOCAL<内存变量名表>。
功能注释:此命令建立的局部变量,赋初值为逻辑假 .F.。在其所属程序运行结束后,局
部变量自动释放。
2.全局变量
命令格式:PUBLIC <内存变量名表>
功能注释:在整个程序中有效,在任一子程序中可改变值,在子程序中定义的全局变量
在主程序中有效。程序运行结束后,全局变量仍保存在内存中,只能用命令 RELEASE 或
CLEAR ALL 清除。
3.隐藏变量
命令格式:
PRIVATE <内存变量表>
PRIVATE ALL[LIKE<通配符>|EXCEPT<通配符>]
功能注释:若多人完成一个大程序,每人在不同的子程序中可能使用重复的变量名,以
致引起混乱。可以在子程序中用 PRIVATE 命令隐藏主程序或其他程序中可能存在的变量,
使其在该子程序中无效。注意:若主程序将某一变量定义为隐藏型内存变量,子程序就不能
再定义同一变量为全局变量;若主程序中定义了全局变量,在下级子程序中可再定义为隐藏
型变量,但只在该子程序中有隐藏作用。
例题 18 全局变量、局部变量及其作用范围。
【分析及答案】
*zcx
PUBLIC x1 &&建立全局变量 x1,初值.f.
LOCAL x2 &&建立局部变量 x2,初值.f.
STORE 'f ' TO x3
DO zcx
? '主程序中' &&以上变量在主程序中都有效
? 'x1=',x1
? 'x2=',x2
− 149 −
等级考试学习笔记——二级 Visual FoxPro

? 'x3=',x3
RETURN
*过程 gc 的内容
PROCEDURE gc
? '子程序中' &&全局变量在子程序中可使用
? 'x1=',x1
? 'x3=',x3
RETURN
在命令窗口输入如下命令。
RELEASE ALL &&清除所有用户定义的内存变量
DO zcx
? '返回命令窗口时' &&程序运行完全局变量仍有效
? 'x1=',x1
程序与命令执行结果如下。
子程序中:
x1=.f.
x3=.f.
主程序中:
x1=.f.
x2=.f.
x3=.f.
返回命令窗口时:
x1=.f.
问题 4:过程调用中的参数是如何传递的?
1.子程序调用的命令格式是怎样的?
命令格式:DO<子程序名>[WITH< 实参表>]。
功能注释:如果要传递参数给子程序,必须先计算每个实参表中表达式的值,再传给
形参表。实参表里是用逗号隔开的表达式,其数:和类型应与子程序定义的形参数的数目和
类型相匹配。
2.子程序接收实参值的命令格式是怎样的?
命令格式:PARAMETERS<形参表>。
功能注释:形参的数目不能少于实参的数目,否则系统会产生运行错误。如果形参的数
目多于实参的数目,则多余的形参取初值逻辑假.F.。
参数传递的要点是个数、形式相匹配。

例题讲解

例题 19 下列关于参数传递的说法,哪个正确?
A.当形参的数量多于实参的数量时,多余的形参取逻辑假
− 150 −
第5章 程 序 设 计

B.当实参的数量多于形参的数量时,多余的实参取逻辑假
C.实参与形参的数量必须相等
D.B,C 都对
【答案】A

综合实例

1. (2004 年 4 月填空题第 3 题)
在 Visual FoxPro 中参数传递的方式有两种,一种是按值传递,另一种是按引用传递,将
参数设置为按引用传递的语句是:SET UDFPARMS________。
【分析】参数传递命令格式中:SET UDFPARMS TO VALUE 按值传递,SET UDFPARMS
TO REFERENCE 按引用传递。
【答案】TO REFERENCE
2. (2004 年 4 月填空题第 5 题)
如下程序的输出结果是________。
i=1
DO WHILE i<10
i=i+2
ENDDO
?I
【分析】此题是一个比较简单的循环结构。只要把初始值放入循环结构中,一步一步执
行程序就能解出,需要注意的是循环条件为 i<10。
【答案】11
3. (2004 年 9 月选择题第 5 题)
在程序中不需要用 public 等命令明确声明和建立,可直接使用的内存变量是________。
A.局部变量 B.公共变量 C.私有变量 D.全局变量
【分析】在程序中直接使用(没有通过 PUBLIC 和 LOCAL 命令事先声明)而由系统自动
隐含建立的变量都是私有变量。
【答案】C
4. (2004 年 9 月选择题第 7 题)
下列程序段的输出结果是________。
Clear
store 10 to a
store 20 to b
set udfparms to reference
do swap with a,(b)
?a,b
procedure swap
parameters x1,x2
− 151 −
等级考试学习笔记——二级 Visual FoxPro

temp=x1
x1=x2
x2=temp
endproc
A.10 20 B.20 20 C.20 10 D.10 10
【分析】对于 SET UDFPARMS TO 命令,如果其后是 VALUE,则是按值传递;如果其后
是 REFERENCE,则是按引用传递。按引用传递时,形参变量值改变则实参变量值也随之改
变。do swap with a,(b) 表示 a 按引用传递,(b)按值传递。
【答案】B
5.(2004 年 9 月填空题第 15 题)
在 VISUAL FOXPRO 中如下程序的运行结果(即执行命令 DO main 后)是________。
*程序文件名:main.prg
SET TALK OFF
CLOSE ALL
CLEAR ALL
mX="Visual Foxpro"
mY="二级"
DO s1
?mY+mX
RETURN
*子程序文件名:s1.prg
PROCEDURE s1
LOCAL mX
mX="Visual FoxPro DBMS 考试"
mY="计算机等级"+mY
RETURN
【分析】本题关键是对 LOCAL 命令的理解,它是局部变量建立的命令,局部变量只能在
建立它的模块中使用,不能在上层或下层模块中使用。
【答案】计算机等级二级 Visual FoxPro

本章总结
难点重点
程序设计是 VFP 考试的重心所在,笔试与上机部分均涉及较多内容。因此,本章的重点
也是全书的重点,要重点掌握。
1.程序文件的建立与执行。建立命令:MODIFY COMMAND<文件名>。执行命令:DO
<文件名>。
2.简单的交互式输入、输出命令:WAIT 命令、INPUT 命令及 ACCEPT 命令。
3.程序的三种基本结构:顺序结构、选择结构与循环结构。其中选择结构语句包括条

− 152 −
第5章 程 序 设 计

件语句和分支语句。循环结构语句包括:DO WHILE、FOR 和 SCAN 语句。


4.子程序的设计与调用。
5.过程与过程文件的概念以及过程文件的建立和调用。
6.局部变量、全局变量以及隐藏变量的概念;过程调用中的参数传递。
误点剖析
1.INPUT 命令格式:INPUT [<字符表达式>]TO<内存变量>。其功能为:
(1)<字符表达式>是提示语,可以通过键盘输入数值型、字符型、日期型、逻辑型及货
币型等数据给内存变量。
(2)若输入字符型一定要加定界符。
(3)INPUT 一般用来输入数值型数据。
2.ACCEPT 命令格式:ACCEPT[<字符表达式>]TO<内存变量>。其功能为:
(1)键盘上输入一个字符串常量给内存变量。字符表达式是提示语。
(2)该命令只能接受字符串。不需要加定界符,否则定界符本身也当成字符串的一部分
输入内存变量。
(3)TO 短语是必选项。
3.条件语句的语句格式如下。
IF<条件>
<语句序列 1>
[ELSE
<语句序列 2>]
ENDIF
功能为:
(1)有 ELSE 子句时,两组可供选择的代码分别是 <语句序列 1>和<语句序列 2>。如果
<条件>成立,则执行<语句序列 1>;否则,执行<语句序列 2>。然后转向 ENDIF 的下一条
语句。
(2)无 ELSE 子句时,可看作第二组代码不包含任何命令。如果<条件>成立,则执行
<语句序列 1>,然后转向 ENDIF 的下一条语句;否则直接转向 ENDIF 的下一条语句执行。
(3)IF 和 ENDIF 必须成对出现。
(4)条件语句可以嵌套,但不能出现交叉。在嵌套时,为了使程序清晰、易于阅读,可
按缩进格式书写。
4.分支语句的语句格式如下。
DO CASE
CASE<条件 1>
<语句序列 1>
CASE<条件 2>
<语句序列 2>
……
CASE<条件 n>
<语句序列 n>

− 153 −
等级考试学习笔记——二级 Visual FoxPro

[OTHERWISE
<语句序列>]
ENDCASE
功能为:
(1)不管有几个 CASE 条件成立,只有最先成立的 CASE 条件的对应命令序列被执行。
(2)如果所有 CASE 条件都不成立,且没有 OTHERWISE 子句,则直接跳出本结构;若
有 OTHERWISE 选项,执行 OTHERWISE 后的语句组后再跳出本结构。
5.DO WHILE 语句的语句格式如下。
DO WHILE <条件>
<语句序列 1>
[LOOP]
<语句序列 2>
[EXIT]
<语句序列 3>
ENDDO
功能为:
(1)如果第一次判断条件时,条件即为假,则循环体一次都不执行。
(2)如果循环体包含 LOOP 命令,那么当遇到 LOOP 时,就结束循环体的本次执行,不
再执行其后面的语句,而是转回 DO WHILE 处重新判断条件。
(3)如果循环体包含 EXIT 命令,那么当遇到 EXIT 时,就结束该循环语句的执行,转
去执行 ENDDO 后面的语句。
(4)通常 LOOP 或 EXIT 出现在循环体内嵌套的选择语句中,根据条件来决定是 LOOP
回去还是 EXIT 出去。
6.FOR 语句的语句格式如下。
FOR <循环变量>=<初值>TO <终值>[STEP<步长>]
<循环体>
ENDFOR|NEXT
功能为:
(1)<步长>的默认值为 1。
(2)<初值>、<终值>和<步长>都可以是数值表达式。但这些表达式仅在循环语句执行开
始时被计算一次。在循环语句的执行过程中,初值、终值和步长是不会改变的。
(3)可以在循环体内改变循环变量的值,但这会影响循环体的执行次数。
(4)EXIT 和 LOOP 命令同样可以出现在该循环语句的循环体内。当执行到 LOOP 命令
时,结束循环体本次执行,然后循环变量增加一个步长值,并再次判断循环条件是否成立。
7.SCAN 语句的语句格式如下。
SCAN[<范围>][FOR<条件 1>][WHILE<条件 2>]
<循环体>
ENDSCAN
功能为:
− 154 −
第5章 程 序 设 计

(1)<范围>的默认值为 ALL。
(2)EXIT 和 LOOP 命令同样可以出现在该循环语句的循环体内。
8.局部变量的命令格式:LOCAL<内存变量名表>。
此命令建立局部变量,赋初值为逻辑假 .F.。在其所属程序运行结束之后,局部变量自动
释放。
9.全局变量的命令格式:PUBLIC <内存变量名表>。全局变量在整个程序中有效,在任
一子程序中可改变值,在子程序中定义的全局变量在主程序中有效。程序运行结束后,全局
变量仍保存在内存中,只能用命令 RELEASE 或 CLEAR ALL 清除。
10.隐藏变量的命令格式如下。
PRIVATE <内存变量表>
PRIVATE ALL[LIKE<通配符>|EXCEPT<通配符>]
若多人完成一个大程序,每人在不同的子程序中可能使用重复的变量名,以致引起混乱。
可以在子程序中用 PRIVATE 命令隐藏主程序或其他程序中可能存在的变量,使其在该子程
序中无效。注意:若主程序将某一变量定义为隐藏型内存变量,子程序就不能再定义同一变
量为全局变量;若主程序中定义了全局变量,在下级子程序中可再定义为隐藏型变量,但只
在该子程序中有隐藏作用。
11.子程序调用的命令格式:DO<子程序名>[WITH< 实参表>]。
如果要传递参数给子程序,必须先计算每个实参表中表达式的值,再传给形参表。实参
表里是用逗号隔开的表达式,其数目和类型应与子程序定义的形参数的数目和类型相匹配。
12.子程序接收实参值的命令格式:PARAMETERS<形参表>。
形参的数目不能少于实参的数目,否则系统会产生运行错误。如果形参的数目多于实参
的数目,则多余的形参取初值逻辑假.F.。

单元练习

1.有如下两个程序,执行命令:DO MAIN 后的结果为________。


** MAIN.PRG **SUB.PRG
SET TALK OFF PRIVATE B
CLEAR A=10
A=1 B=20
B=2 ?A,B
DO SUB RETURN
?A,B
RETURN
2.在 Visual FoxPro 中,INPUT、ACCEPT 及 WAIT 三条命令可以接受字符命令的
是________。
A.只有 ACCEPT B.只有 ACCEPT 和 WAIT
C.都可以 D.只有 WAIT
3.当键盘为变量 X 输入 2 时,变量 Y 的计算方法如下,其运行结果为________。
− 155 −
等级考试学习笔记——二级 Visual FoxPro

S= 'ABCDEFGH'
DO WHILE .T.
X=0
@10,10 SAY "请选择: " GET X PICTUR '9'9 RANGE 0,4
READ
IF X=0
EXIT
ENDIF
Y=SUBSTR(S,(X-1)*2+1,2)
DO GZ&Y
ENDDO
RETURN
A.GZAB B.GZ&Y C.GZEF D.GZCD
4.有以下程序段:
SET TALK OFF
A=85
B=VAL(SUBSTR("7199009",AT("7",647791),3))
C=1500
M=0
IF A>=B .AND. A.=C
M=A
ELSE
IF B>=A .AND. B>=C
M=B
ELSE
M=C
ENDIF
ENDIF
?M
RETURN
(1)变量 B 的值是________。
A.199 B.900 C.990 D.719
(2)最后一条命令输出变量 M 的值是________。
A.1500 B.85 C.990 D.900
5.局部变量、全局变量参数传递顺序为________。
*主程序 zhucx
SET TALK OFF
CLEAR
PRIVATE C
− 156 −
第5章 程 序 设 计

A=1
B=2
C=3
E=4
? "主程序中原 A,B,C,E 的值是: "
?A,B,C,E
WAIT WINDOW
DO zicx &&调用子程序
?"调用子程序后 A,B,C,E,F 的值是: "
?A,B,C,E,F
SET TALK OFF
RETURN
*子程序 zicx
PRIVATE A
PUBLIC F
A=4
B=5
C=6
F=8
? "子程序中的 A,B,C,F,E 值分别是: "
?A,B,C,F,E
RETURN

习题答案
1.10 20
10 2
解析:变量 A 在主程序中未经 PRIVATE 定义,在子程序中为未经 PRIVATE 显示定义的
局部变量,所以它的新值可以带回主程序。变量 B 在主程序中未经 PRIVATE 定义,在子程
序中为经 PRIVATE 显示定义的局部变量,所以它的新值不能带回主程序。
2.C。
解析:此题考察对 Visual FoxPro 中键盘输入命令的掌握情况。在 Visual FoxPro 中
WAIT 、ACCEPT 和 INPUT 命令都可以用键盘输入。其中 INPUT 可以输入包括字符串在内
的各种类型数据;ACCEPT 只能输入字符串数据;WAIT 只能输入单个字符。总之,使用这
三个命令都能输入字符。
3.D。
解析:当循环体从键盘上为变量 X 输入 2 时,变量 Y 的值计算如下。
Y=SUBSTR(S,(X-1)*2+1,2)→ SUBSTR(S,(2-1)*2+1,2)→SUBSTR(S,3,2)→"CD"在 DO 命
令中经过宏替换操作后,其文件名为 GZCD。
− 157 −
等级考试学习笔记——二级 Visual FoxPro

4.(1)C (2)A。
解析:计算变量 B 的值的过程如下。
B=VAL(SUBSR("7199009",AT("7", "647791"),3))→VAL(SUBSTR("7199009",3,3))→VAL
("990") →990
通过计算可知,变量 B 的值为 990。后面 IF…ENDIF 块的功能是求 A、B 和 C 三个变量
的最大值。最大值存放在变量 M 中。显然,变量 M 的值是 1500。
5.运行主程序后,结果如下。
主程序中原 A,B,C,E 的值是:
1 2 3 4
子程序中的 A,B,C,F,E 值分别是:
4 5 6 8 4
调用子程序后 A,B,C,E,F 的值是:
1 5 6 4 8
解析:主程序中定义 C 为隐藏型变量,其仅在当前程序中有效,子程序运行后 C 值是 6。
子程序定义 A 为隐藏型变量,所以子程序中 A 为 4,但主程序中 A 仍为 1。因为主程序中未
定义 F,所以必须在子程序中将 F 定义为全局变量,才能将 F 值带回主程序,否则将显示出
错信息“找不到变量 F” 。

− 158 −
第 6 章 关系数据库标准语言 SQL

第 6 章 关系数据库标准语言 SQL
SQL 是结构化查询语言 Structured Query Language 的缩写。SQL 语言已经成为关系数据
库的标准数据语言。本章主要介绍:SQL 的数据查询功能包括简单查询、嵌套查询、连接查
询、分组与计算查询及集合的并运算;SQL 的数据修改功能,包括插入命令、更新命令和删
除命令;SQL 的数据定义功能,包括建立表的命令、修改表的命令。

知识结构图

大纲中的知识点

6.1 SQL 概述
最早的 SQL 标准是于 1986 年 10 月由美国 ANSI(American National Standards Institute)
公布的。随后,ISO(International Standards Organization)于 1987 年 6 月正式采纳它为国际
标准,并在此基础上进行了补充,到 1989 年 4 月,ISO 提出了具有完整性特征的 SQL,并称
之为 SQL89。但 SQL89 仍有许多不足或不能满足应用需求之处。为此,ISO 于 1992 年 11 月
又公布了 SQL 的新标准,即 SQL92。其内容可分为:基本、标准和完全三个级别。

− 159 −
等级考试学习笔记——二级 Visual FoxPro

问题 1:SQL 的含义是什么?
结构化查询语言 SQL 是 Structured Query Language 的缩写。是集数据定义语言 DDL (Data
Definition Language)、查询语言 QL(Query Language)、数据操作语言 DML(Data Manipulation
Language)和数据控制语言 DCL(Data Control Language)功能于一体的数据库语言。
例题 1 下列哪种语言被作为关系数据库的标准语言。
A.SBL B.SQL C.QUEL D.QBE
【分析】答案显而易见是 B 选项,这种概念性的题目只要掌握基础知识就可以了。
【答案】B
例题 2 SQL 是________。
【分析】这是一道最简单的定义题。与上题一样,只要知道 SQL 的含义就可以了。以上
两题也可换成另一种方式出题,如:关系数据库的标准语言是________。 (答案是:结构化查
询语言或 SQL。 )
【答案】结构化查询语言
问题 2:SQL 语言具体是怎样组成的?
SQL 语言的组成结构如图 6-1 所示。

图 6-1 SQL 语言的组成结构示意图

问题 3:SQL 的功能有哪些?
SQL 的功能主要是:SQL 的数据定义功能、SQL 的数据修改功能(操作功能)和 SQL
的数据查询功能。其中数据定义功能包括定义基本表、定义视图和定义索引,而数据操作功
能包括检索和更新。核心是数据库查询语言。
例题 3 SQL 的功能包括________、________和________。
【答案】定义功能修改(操作)功能查询功能
例题 4 SQL 的数据定义功能包括________、________和________三部分,SQL 的数据
操作功能包括________和________。SQL 语言的核心是________。
【答案】定义基本表定义视图定义索引检索和更新数据库查询语言
− 160 −
第 6 章 关系数据库标准语言 SQL

6.2 SQL 的数据查询功能


SQL 的核心部分是查询,查询常常依靠 SELECT 语句来完成,所以查询命令也称作
SELECT 命令,其基本格式(模块)由 SELECT-FROM-WHERE 查询块组成,它可以嵌套使
用。由于 SELECT-SQL 在 SQL 语言中非常重要,所以在此将对其作详细介绍。SELECT-SQL
命令格式相当复杂,这里仅介绍最常用的一些。
命令格式:SELECT[ALL|DISTINCT]<字段名表达式>[AS 列名]
[,<字段名表达式>[AS 列名],…]FROM<表或视图名>[,<表或视图名>,…]
[WHERE<条件表达式>[AND<条件表达式>…]]
[GROUP BY<分组表达式>[,<分组表达式>,…]][HAVING<条件表达式>]
[ORDER BY<字段名>[ASC|DESC]]
[INTO<输出目标>]|[TO FILE<文件>[ADDITIVE]]|TO PRINTER[PROMPT]]|
[TO SCREEN]
功能注释:
① ALL|DISTINCT,分别显示的查询结果包含所有符合条件|符合条件且不相同的记录
行,默认值为 ALL。DISTINCT 的作用是可以除去查询结果中的重复值。
② <字段名表达式>为必选项,指定输出列表中包含的表项,各表项之间用逗号隔离;
如果要将源表中的所有字段作为输出的表项,则可以用“*”代替。该字段可以是字段名,也
可以是字符串表达式。
③ [AS]作为可选项,必须与必选项<字段名表达式>连用,这样输出的列表中将不使用
<字段名表达式>作为列名,而是按指定的“列名”输出。
④ 必选项 FROM 说明要查询的数据来自哪个或哪些表, 即可以对单个表或多个表进行查询。
⑤ 可选项 WHERE 确定查询条件表达式,可用逻辑运算连接多个条件表达式,即查询
条件,选择元组的条件。
⑥ 可选项 GROUP BY 用于对查询结果进行分组,可以利用它对查询结果分组汇总。
⑦ 可选项 HAVING 必须与 GROUP BY 连用,对记录按<条件表达式>的限定进行分组。
⑧ 可选项 ORDER BY 用来对输出列表按指定<字段名>排序,其中,ASC 为升序排列,
DESC 按降序排列,默认为升序排列。
⑨ 可选项 INTO 确定查询输出的目标位置,系统默认是在浏览框中输出列表。
⑩ 另外,查询中还经常用到几个特殊的运算符:BETWEEN…AND…和 LIKE 等。
问题 1:简单查询的概念是什么?
简单查询是基于单个表, 可以有简单的查询条件的查询。 这样的查询由 SELECT 和 FROM
短语构成无条件查询,或由 SELECT、FROM 和 WHERE 短语构成条件查询。
例题 5 “人事档案(RSDA) ”关系中检索所有的职称。
【答案】SELECT 职称 FROM RSDA
结果显示:教授
副教授
讲师
助教
− 161 −
等级考试学习笔记——二级 Visual FoxPro

副教授
在结果中有重复值,如果想去掉它们,那么要指定 DISTINCT 短语: SELECT DISTINCT
职称 FROM RSDA
例题 6 在 GZ 关系中检索出工资多于 1300 元的教师职工号。
【答案】SELECT 职工号 FROM GZ WHERE 工资 > 1300
结果是:T5
T8
例题 7 给出在“经济学院”或者“管理学院”工作,并且工资少于 1300 元的教师职工号。
【答案】
SELECT 职工号 FROM GZ;
WHERE 工资 < 1300 AND (所属院系="经济学院"OR"管理学院")
结果是:T4
T9
注意:第一行的结尾处有一个分号,这个分号是续行符号,并不是命令格式中的,下同。
问题 2:简单的连接查询指什么?
连接是关系的基本操作之一,连接查询是一种基于多个关系的查询。下面给出一些例子。
例题 8 找出工资多于 1300 元的教师职工号和他们的籍贯。
【分析】这里要求检索的信息分别出自 RSDA 关系(职工号)和 GRZL 关系(籍贯) ,这
样的检索就是基于多个关系的,此类查询一般用连接查询实现。
【答案】
SELECT 职工号,籍贯 FROM RSDA,GRZL;
WHERE(工资> 1300)AND (RSDA.姓名=GRZL.姓名)
结果是:T5 济南
T8 青岛
注意:这里的“RSDA.姓名=GRZL.姓名”是连接条件。如果在检索命令的 FROM 之后
有两个关系,那么这两个关系之间肯定有一种联系,否则无法构成检索表达式。所以,RSDA
关系和 GRZL 关系之间必然存在着一个一对多的联系。
当 FROM 之后的多个关系中含有相同的属性名时,必须用关系前缀直接指明属性所属的
关系,如:RSDA.姓名, “.”前面是关系名,后面是属性名。
问题 3:嵌套查询指什么?
嵌套查询是一类基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的
条件却涉及多个关系。
例题 9 查询所有的教师工资都多于 1200 元的院系的信息。
【分析】这个检索要求可以描述为:没有一个教师的工资少于或等于 1200 元的院系的信息。
【答案】
SELECT * FROM YX WHERE 所属院系 NOT IN;
(SELECT 所属院系 FROM GZ WHERE 工资<= 1200)
结果是:经济学院 200
内层 SELECT-FROM-WHERE 查询块指出有职工的工资少于或等于 1200 元的院系的所
− 162 −
第 6 章 关系数据库标准语言 SQL

属院系值的集合,在这里该集合有“管理学院” , “工程学院”等除了“经济学院”外的几个
学院;然后从 YX 关系中检索元组的所属院系属性值不在该集合中的每个元组。
问题 4:简单的计算查询指什么?
SQL 语言是完备的,也就是说,只要数据是按关系方式存入数据库的,就能构造合适的
SQL 命令把它检索出来。事实上,SQL 不仅具有一般的检索能力,而且还有计算方式的检索,
比如检索职工的平均工资、检索某个职工的最高工资值等。用于计算检索的函数有:
1.COUNT—计数
2.SUM—求和
3.AVG—计算平均值
4.MAX—求最大值
5.MIN—求最小值
这些函数可以用在 SELECT 短语中对查询结果进行计算。
例题 10 找出所有教师籍贯的数目。
【答案】SELECT COUNT(DISTINCT 籍贯) FROM GRZL
参见 GRZL 关系,所有教师共有 20 个籍贯地,所以结果为 20。
例题 11 求得支付的工资总数。
【答案】SELECT SUM(工资) FROM GZ
结果是:176570
例题 12 求所有教师的工资都多于 1200 元的院系的老师的平均工资。
【答案】SELECT AVG(工资) FROM RSDA WHERE 所属院系 NOT IN;
(SELECT 所属院系 FROM GZ WHERE 工资<= 1200)
结果是:1253
例题 13 求在经济学院工作的教师的最高工资值。
【答案】SELECT MAX(工资) FROM GZ WHERE 所属院系="经济学院"
结果是:1437
与 MAX 函数相对应的是 MIN 函数(求最小值) 。若此题改为“求在经济学院工作的教
师的最低工资值” ,命令则是:
SELECT MIN(工资) FROM GZ WHERE 所属院系="经济学院"
例题 14 在 SQL SELECT 中用于计算机检索的函数有 COUNT、____、 ____ 、MAX
和 MIN。
【答案】SUMAVG
问题 5:分组与计算查询指什么?
利用 GROUP BY 子句进行分组计算查询使用得更加广泛。GROUP BY 短语的格式如下:
GROUP BY GroupColumn[,GroupColumn...][HAVING FilterCondition]
可以按一列或多列分组,还可以用 HAVING 进一步限定分组的条件。
例题 15 求每个院系职工的平均工资。
【答案】SELECT 所属院系,AVG(工资) FROM GZ GROUP BY 所属院系结果是:
经济学院 1253
管理学院 1130
− 163 −
等级考试学习笔记——二级 Visual FoxPro

………………
………………(在此,其他院系就不一一列出了)
【分析】在这个查询中,首先按所属院系属性进行分组,然后再计算每个院系的平均工
资。GROUP BY 子句一般跟在 WHERE 子句之后,没有 WHERE 子句时,跟在 FROM 子句
之后。另外,还可以根据多个属性进行分组。但在分组查询时,有时要求分组满足某个条件
时才检索,这时可以用 HAVING 子句来限定分组。
问题 6:集合的并运算是如何进行的?
SQL 支持集合的并(UNION)运算,即可以将两个 SELECT 语句的查询结果通过并运
算合并成一个查询结果。为进行并运算,要求这两个查询结果具有相同的字段个数,并且对
应字段的值要出自同一个值域,即具有相同的数据类型和取值范围。例如,如下语句的结果
是籍贯为“北京”和“上海”的教师个人资料信息。
SELECT * FROM GRZL WHERE 籍贯="北京";
UNION;
SELECT * FROM GRZL WHERE 籍贯="上海"

例题讲解

例题 16 标准 SQL 基本查询模块的结构是________。
A.SELECT…FROM…ORDER BY
B.SELECT…WHERE…GROUP BY
C.SELECT…WHERE…HAVING
D.SELECT…FROM…WHERE
【分析】在开始讲 SELECT 语句时已经提到 SQL 的基本查询模块结构。SELECT 查询命
令包含很多功能各异的子句选项,但最基础的格式通常为:SELECT…FROM…WHERE。其
中,SELECT 用于选择查询结果要显示的列表,FROM 用于列出查询要用到的所有表文件,
而 WHERE 则用于指定查询结果的筛选条件。
【答案】D
例题 17 在 SELECT-SQL 语句中,将查询结果存入数据表的短语是________。
【答案】INTO DBF<表名> 或者 INTO TABLE<表名>
例题 18 在 SELECT-SQL 语句中,将查询结果按指定字段值排序输出的短语是_______。
将查询结果分组输出的语句是________。
【答案】ORDER BY、GROUP BY
例题 19 在 SELECT-SQL 语句的 ORDER BY 子句中,DESC 表示按________输出;省
略 DESC 表示按________输出。
【答案】降序、升序
例题 20 SELECT-SQL 命令的功能是________。
A.选择工作区 B.查询表中数据
C.修改表中数据 D.选择 SQL 标准
【答案】B
− 164 −
第 6 章 关系数据库标准语言 SQL

例题 21 SQL 查询中的 HAVING 子句通常出现在________子句中。


A.ORDER BY B.GROUP BY C.SORT D.INDEX
【答案】B
注意:GROUP BY 子句用于将查询结果按一个或多个列的值分组,而 HAVING 子句则
用于指定在查询结果中的各组必须满足的条件,它是分组的附加条件。另外,SORT 命令改
变记录的物理位置,形成一个新的记录;而 INDEX 命令则不改变记录的物理位置,即不产
生新的数据表。
例题 22 SELECT-SQL 语句中的条件短语的关键字是________。
A.WHERE B.WHILE C.FOR D.CONDITION
【答案】A
例题 23 在 SQL 中,用________子句消除重复出现的元组。
【答案】DISTINCT
例题 24 假设图书管理数据库 TSGL.DBC 中包含如下三个数据表。
1.图书表 TSB.DBF,包含字段:总编号、分类号、书名、作者、出版单位及单价,上
述字段中,只有“单价”为数值型,其余均为字符型。
2.读者表 DZB.DBF,包含字段:借书证号、姓名、性别、单位、职称及地址,均为字符型。
3.借阅表 JYB.DBF,包含字段:借书证号、总编号、借阅日期及备注,其中“借阅日
期”为日期型, “备注”为备注型,其余为字符型。
要求编写 SELECT-SQL 语句实现如下功能。
查找 1998 年 10 月 10 日之前借书的记录,并将结果放入数据表 CXJG.DBF 中,该表中
包含的字段有:借书证号、姓名、单位、书名、分类号、单价及借阅日期。
【答案】
SELECT DZB.借书证号,DZB.姓名,DZB.单位,TSB.书名,TSB.分类号,TSB.单价;
JYB.借阅日期 FROM DZB,TSB,JYB WHERE JYB.借阅日期<{^1998-10-10}AND;
JYB.借书证号=DZB.借书证号 AND JYB.总编号=TSB.总编号 INTO TABLE CXJG.DBF

6.3 SQL 的数据修改功能(操作功能)


SQL 的操作功能是指对数据库中数据的操作功能,主要包括数据的插入、更新和删除。
问题 1:SQL 插入命令具体格式是什么?
SQL 插入命令是在表尾插入记录,Visual FoxPro 支持两种 SQL 插入命令的格式,第一
种是标准格式,第二种是 Visual FoxPro 的特殊格式。
格式 1 如下。
INSERT INTO dbf_name[(fname1[,fname2,...])]
VALUES(eExpression1[,eExpression2,...])
格式 2 如下。
INSERT INTO dbf_name FROM ARRAY ArrayName|FROM MEMVAR
注意:
INSERT INTO dbf_name 说明向由 dbf_name 指定的表中插入记录,当插入的不是完整的
− 165 −
等级考试学习笔记——二级 Visual FoxPro

记录时,可以用 fname1,fname2,...指定字段。
VALUE(eExpression1[,eExpression2,...])给出具体的记录值。
FROM ARRAY ArrayName 说明从指定的数组中插入记录值。
FROM MEMVAR 说明根据同名的内存变量来插入记录值,如果同名的变量不存在,那
么相应的字段为默认值或空。
问题 2:SQL 更新命令具体格式是什么?
SQL 的数据更新命令格式如下。
UPDATE TableName
SET Column_Name1=eExpression1[,Column_Name2=eExpression2...]
WHERE Condition
一般使用 WHERE 子句指定条件,以更新满足条件的一些记录的字段值,并且一次可以
更新多个字段;如果不使用 WHERE 子句,则更新全部记录。
例如,给经济学院的职工提高 15%的工资,可以用如下命令。
UPDATE GZ SET 工资=工资*1.15 WHERE 所属院系="经济学院"
问题 3:SQL 删除命令具体格式是什么?
1.SQL 从表中删除数据的命令格式如下。
DELETE FROM TableName[WHERE Condition]
这里 FROM 指定从哪个表中删除数据,WHERE 指定被删除的记录所满足的条件,如果
不使用 WHERE 子句,则删除该表中的全部记录。
例如,要删除 GZ 关系中所属院系为信息学院的元组,可用如下命令。
DELETE FROM GZ WHERE 所属院系="信息学院"
2.删除表的 SQL 命令格式如下。
DROP TABLE table_name
DROP TABLE 直接从磁盘上删除 table_name 所对应的 dbf 文件。如果 table_name 是数
据库中的表并且相应的数据库是当前数据库,则从数据库中删除了表;否则虽然从磁盘上删
除了 dbf 文件,但是记录在数据库 dbc 文件中的信息却没有删除,此后会出现错误提示。所
以要删除数据库中的表时,最好应使数据库是当前打开的,在其中进行删除操作。

6.4 SQL 的数据定义功能


问题 1:CREAT 命令具体格式是什么?
Visual Foxpro 中可以通过 SQL 的 CREAT TABLE 命令建立表,相应的命令格式如下。
CREAT TABLE|DBF TableName1[NAME LongTableName][FREE]
(FieldName1 FieldType[(nFieldWidth[,nPrecision])][NULL|NOT NULL]
[CHECK lExpression1[ERROR cMessageText1]]
[DEFAULT eExpression1]
[REFERENCES TableName2[TAG TagName1]]
[NOCPTRANS]
[,FieldName2...]
− 166 −
第 6 章 关系数据库标准语言 SQL

[,PRIMARY KEY eExpression2 TAG TagName2


|,UNIQUE eExpression3 TAG TagName3]
[,FOREIGN KEY eExpression4 TAG TagName4[NODUP]
REFERENCES TableName3[TAG TagName5]]
[,CHECK lExpression2[ERROR cMessageText2]])
|FROM ARRAY ArrayName
视图是根据对表的查询定义的,SQL 也可以用 CREAT VIEW 命令建立视图,其命令格
式如下。
CREAT VIEW view_name[(column_name[,column_name]...)]
AS select_statement
其中 select_statement 可以是任意的 SELECT 查询语句,它说明和限定了视图中的数据;
当没有为视图指定字段名(column_name)时,视图的字段名将与 select_statement 中指定的
字段名或表中的字段名同名。
问题 2:ALTER 命令的格式是什么?
修改表结构的命令是 ALTER TABLE,该命令有三种格式。
格式 1 如下。
ALTER TABLE TableName1 ADD|ALTER[COLUMN]FieldName1
FieldType [(nFieldWidth[,nPrecision])][NULL|NOT NULL]
[CHECK lExpression [ERROR cMessageText]][DEFAULT eExpression1]
[PRIMARY KEY|UNIQUE]
[REFERENCES TableName2[TAG TagName1]]
功能注释:该格式可以添加(ADD)新的字段或修改(ALTER)已有的字段,它的语法
格式基本可以与 CREAT TABLE 的语法格式相对应。
格式 2 如下。
ALTER TABLE TableName1 ALTER [COLUMN]FieldName2 [NULL|NOT NULL]
[SET DEFAULT eExpression2][SET CHECK lExpression2[ERROR cMessageText2]]
[DROP DEFAULT][DROP CHECK]
功能注释:从命令格式可以看出,该格式主要用于定义、修改和删除有效性规则和默认
值定义。
格式 3 如下。
ALTER TABLE TableName1 [DROP[COLUMN]FieldName3]
[SET CHECK lExpression3[ERROR cMessageText3]]
[DROP CHECK]
[ADD PRIMARY KEY eExpression3 TAG TagName2[FOR lExpression4]]
[DROP PRIMARY KEY]
[ADD UNIQUE eExpression4[TAG TagName3[FOR lExpression5]]]
[DROP UNIQUE TAG TagName4]
[ADD FOREIGN KEY[eExpression5] TAG TagName4 [FOR lExpression6]
REFERENCES TableName2[TAG TagName5]]
− 167 −
等级考试学习笔记——二级 Visual FoxPro

[DROP FOREIGN KEY TAG TagName6[SAVE]]


[RENAME COLUMN FieldName4 TO FieldName5]
功能注释:该格式可以删除字段(DROP[COLUMN]) 、修改字段名(RENAME COLUMN)
以及定义、修改和删除表一级的有效性规则等。

综合实例

1.(2004 年 4 月选择题第 13 题)
查询订购单号首字符是“P”的订单信息,应该使用命令________。
A.SELECT * FROM 订单 WHERE HEAD(订购单号,1)="P"
B.SELECT * FROM 订单 WHERELEFT(订购单号,1)="P"
C.SELECT * FROM 订单 WHERE "P"$订购单号
D.SELECT * FROM 订单 WHERERIGHT(订购单号,1)="P"
【分析】SQL 语句中,查询命令又叫 SELECT 命令,它的基本形式由 SELECT-FROM-
WHERE 查询块组成。WHERE 说明查询条件,本题要求查询订购单号首字符是"P"的订单信
息,查询条件是 LEFT(订购单号,1)="P"。所以答案是 B。
【答案】B
2.(2004 年 4 月选择题第 20 题)
SQL 支持集合的并运算,在 Visual FoxPro 中 SQL 并运算的运算符是________。
A.PLUS B.UNION C.+ D.U
【分析】SQL 支持的集合并运算的运算符是 UNION。
【答案】B
3.(2004 年 4 月选择题第 29 题)
以下关于查询描述正确的是________。
A.不能根据自由表建立查询 B.只能根据自由表建立查询
C.只能根据数据库表建立查询 D.可以根据数据库表和自由表建立查询
【分析】既可以根据数据库表建立查询,也可以根据自由表建立查询。
【答案】D
第 4~9 题使用如下三个表。
部门.dbf:部门号 C(8),部门名 C(12),负责人 C(6),电话 C(16)
职工.dbf:部门号 C(8),职工号 C(10),姓名 C(8),性别 C(2),出生日期 D
工资.dbf:职工号 C(10),基本工资 N(8.2),津贴 N(8.2),奖金 N(8.2),扣除 N(8.2)
4.(2004 年 4 月选择题第 30 题)
查询职工实发工资的正确命令是________。
A.SELECT 姓名,(基本工资+津贴+奖金-扣除).AS 实发工资 FROM 工资
B.SELECT 姓名,(基本工资+津贴+奖金-扣除)AS 实发工资 FROM 工资;
WHERE 职工.职工号=工资.职工号
C.SELECT 姓名,(基本工资+津贴+奖金-扣除)AS 实发工资;
FROM 工资,职工 WHERE 职工.职工号=工资.职工号
− 168 −
第 6 章 关系数据库标准语言 SQL

D.SELECT 姓名,(基本工资+津贴+奖金-扣除)AS 实发工资;


FROM 工资 JOIN 职工 WHERE 职工.职工号=工资.职工号
【分析】SQL 的查询命令是 SELECT 命令,它的基本形式是 SELECT-FROM-WHERE,
SELECT 说明查询的数据。FROM 说明要查询的数据来自哪个或哪些表,可以对单个表或多
个表进行查询。WHERE 说明查询条件,即选择元组的条件。本题中,查询数据为:姓名,
实发工资,姓名在职工表中,实发工资是由工资表中的基本工资+津贴+奖金-扣除组成。查询
条件为:职工.职工号=工资.职工号。
【答案】C
5.(2004 年 4 月选择题第 31 题)
查询 1962 年 10 月 27 日出生的职工信息的正确命令是________。
A.SELECT*FROM 职工 WHERE 出生日期={^1962-10-27}
B.SELECT*FROM 职工 WHERE 出生日期=1962-10-27
C.SELECT*FROM 职工 WHERE 出生日期="1962-10-27"
D.SELECT*FROM 职工 WHERE 出生日期=("1962-10-27")
【分析】本题关键是选择查询条件,出生日期为 1962 年 10 月 27 日,根据日期型常量的
格式可知 A 答案正确。
【答案】A
6.(2004 年 4 月选择题第 32 题)
查询每个部门年龄最长者的信息,要求得到的信息包括部门名和最长者的出生日期。正
确的命令是________。
A.SELECT 部门名,MIN(出生日期)FROM 部门 JOIN 职工;
ON 部门.部门号=职工.部门号 GROUP BY 部门名
B.SELECT 部门名,MAX(出生日期)FROM 部门 JOIN 职工;
ON 部门.部门号=职工.部门号 GROUP BY 部门名
C.SELECT 部门名,MIN(出生日期)FROM 部门 JOIN 职工;
WHERE 部门.部门号=职工.部门号 GROUP BY 部门名
D.SELECT 部门名,MAX(出生日期)FROM 部门 JOIN 职工;
WHERE 部门.部门号=职工.部门号 GROUP BY 部门名
【分析】本题属于超联接查询,在保证一个表中满足条件的元组都在结果表中的基础上,
将满足联接条件的元组与另一个表的元组进行联接。用 SELECT-FROM-JOIN-ON。要查询的
数据为部门名,最长者的出生日期,出生日期最小的职工年龄最长,用 MIN(出生日期) 。
部门名在部门表中,出生日期在职工表中。ON 指定联接条件,部门.部门号=职工.部门号。
【答案】A
7.(2004 年 4 月选择题第 33 题)
查询有 10 名以上(含 10 名)职工的部门信息(部门名和职工人数) ,并按职工人数降
序排列。正确的命令是________。
A.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
− 169 −
等级考试学习笔记——二级 Visual FoxPro

ORDER BY COUNT(职工号)ASC
B.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
ORDER BY COUNT(职工号)DESC
C.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
ORDER BY 职工人数 ASC
D.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
ORDER BY 职工人数 DESC
【分析】本题先是分组与计算查询,然后是排序。查询数据为部门名,职工人数。部门
名在部门表中, 职工人数是职工表中部门号相同的职工记录数, 用 SELECT 部门名,COUNT(职
工号)AS 职工人数 FROM 部门,职工 WHERE 部门.部门号=职工.部门号。分组:GROUP BY
部门名 HAVING COUNT(*)>=10。排序:本题要求按照职工人数降序排列,用 ORDER BY
职工人数 DESC。
【答案】D
8.(2004 年 4 月选择题第 34 题)
查询所有目前年龄在 35 岁以上(不含 35 岁)的职工信息(姓名、性别和年龄) ,正确
的命令是________。
A.SELECT 姓名,性别,YEAR(DATE())-YEAR(出生日期) 年龄 FROM 职工;
WHERE 年龄>35
B.SELECT 姓名,性别,YEAR(DATE())-YEAR(出生日期) 年龄 FROM 职工;
WHERE YEAR(出生日期)>35
C.SELECT 姓名,性别,YEAR(DATE())-YEAR(出生日期) 年龄 FROM 职工;
WHERE YEAR(DATE())-YEAR(出生日期)>35
D.SELECT 姓名,性别,年龄=YEAR(DATE())-YEAR(出生日期) FROM 职工;
WHERE YEAR(DATE())-YEAR(出生日期)>35
【分析】本题关键是年龄在 35 岁以上(不含 35 岁)的表达式,应该是 YEAR(DATE())-
YEAR(出生日期)>35。
【答案】C
9.(2004 年 4 月选择题第 35 题)
为“工资”表增加一个“实发工资”字段的正确命令是________。
A.MODIFY TABLE 工资 ADD COLUMN 实发工资 N(9,2)
B.MODIFY TABLE 工资 ADD FIELD 实发工资 N(9,2)
C.ALTER TABLE 工资 ADD COLUMN 实发工资 N(9,2)
D.ALTER TABLE 工资 ADD FIELD 实发工资 N(9,2)
− 170 −
第 6 章 关系数据库标准语言 SQL

【分析】修改表结构命令用 ALTER TABLE,根据该命令的格式可知选项 C 正确。


【答案】C
第 10~13 题使用如下三个表。
零件.DBF:零件号 C(2),零件名称 C(10),单价 N(10),规格 C(8)
使用零件.DBF:项目号 C(2),零件号 C(2),数量 I
项目.DBF:项目号 C(2),项目名称 C (20),项目负责人 C(10),电话 C(20)
10.(2004 年 4 月填空题第 6 题)
为“数量”字段增加有效性规则:数量>0。应该使用的 SQL 语句是:________TABLE
使用零件________数量 SET________数量>0。
【分析】修改表结构的命令有三种格式,其中如下一个格式主要用于定义、修改和删除有效
性规则和默认值定义:ALTER TABLE TableName1 ALTER[COLUMN] FieldName2 [NULL|NOT
NULL][SET DEFAULT eExpression2][SET CHECK lExpression2[ERROR cMessageTex2]][DROP
DEFAULT][DROP CHECK]。
【答案】ALTER ALTER CHECK
11.(2004 年 4 月填空题第 7 题)
查询与项目“s1” (项目号)所使用的任意一个零件相同的项目号、项目名称、零件号和
零件名称,使用的 SQL 语句是________。
SELECT 项目.项目号,项目名称,使用 零件.零件号,零件名称;
FROM 项目,使用零件, 零件 WHERE 项目.项目号=使用零件.项目号________;
使用零件.零件号=零件.零件号 AND 使用零件.零件号________;
(SELECT 零件号 FROM 使用零件 WHERE 使用零件.项目号='s1')
【分析】这个命令中含有两个 SELECT-FROM-WHERE 查询块,即内层查询块和外层查
询块。内外层查询块连接处用 IN。
【答案】AND IN
第 12~21 题使用的数据表如下。
当前盘当前目录下有数据库:学院.dbc,其中有“教师”表和“学院”表。
“教师”表如下。
职工号 系 号 姓 名 工 资 主讲课程

11020001 01 肖海 3408 数据结构

11020002 02 王岩盐 4390 数据结构

11020003 01 刘星魂 2450 C 语言

11020004 03 张月新 3200 操作系统

11020005 01 李明玉 4520 数据结构

11020006 02 孙民山 2976 操作系统

11020007 03 钱无名 2987 数据库

11020008 04 呼延军 3220 编译原理

11020009 03 王小龙 3980 数据结构

11020010 01 张国梁 2400 C 语言

− 171 −
等级考试学习笔记——二级 Visual FoxPro

续表
职工号 系 号 姓 名 工 资 主讲课程

11020011 04 林新月 1800 操作系统

11020012 01 乔小廷 5400 网络技术

11020013 02 周兴池 3670 数据库

11000014 04 欧阳秀 3345 编译原理

“学院”表如下。

系 号 系 名

01 计算机

02 通信

03 信息管理

04 数学

12.(2004 年 9 月选择题第 15 题)
为“学院”表增加一个字段“教师人数”的 SQL 语句是______。
A.CHANGE TABLE 学院 ADD 教师人数 I
B.ALTER STRU 学院 ADD 教师人数 I
C.ALTER TABLE 学院 ADD 教师人数 I
D.CHANGE TABLE 学院 INSERT 教师人数 I
【分析】在 SQL 语句中,修改表结构的命令是 ALTER TABLE。该命令有三种格式,其
中一个格式为:ALTER TABLE TableName1 ADD(添加)|ALTER(修改) FieldName1 FieldType。
CHANGE 为数据库操作中的命令。所以答案是 C。
【答案】C
13.(2004 年 9 月选择题第 16 题)
将“欧阳秀”的工资增加 200 元的 SQL 语句是________。
A.REPLACE 教师 WITH 工资=工资+200 WHERE 姓名="欧阳秀"
B.UPDATE 教师 SET 工资=工资+200 WHEN 姓名="欧阳秀"
C.UPDATE 教师工资 WITH 工资+200 WHERE 姓名="欧阳秀"
D.UPDATE 教师 SET 工资=工资+200 WHERE 姓名="欧阳秀"
【分析】在 SQL 语句中,数据更新命令为 UPDATE,其格式为:UPDATE TableName SET
Column_Name1=eExpression1[,Column_Name2=eExpression2…]WHERE Condition。一般使用
WHERE 子句指定条件,以更新满足条件的一些记录的字段值,并且一次可以更新多个字段。
所以答案是 D。
【答案】D
14.(2004 年 9 月选择题第 17 题)
下列程序段的输出结果是________。
CLOSE DATA
a=0
− 172 −
第 6 章 关系数据库标准语言 SQL

USE 教师 GO TOP
DO WHILE .NOT.EOF()
IF 主讲课程="数据结构".OR.主讲课程="C 语言"
a=a+1
ENDIF
SKIP
ENDDO
?a
A.4 B.5 C.6 D.7
【分析】本题实际上是考察主讲课程是数据结构和 C 语言的记录。答案是 C。
【答案】C
15.(2004 年 9 月选择题第 18 题)
有 SQL 语句:SELECT * FROM 教师 WHERE NOT(工资>3000 OR 工资<2000)
与如上语句等价的 SQL 语句是______。
A.SELECT*FROM 教师 WHERE 工资 BETWEEN 2000 AND 3000
B.SELECT*FROM 教师 WHERE 工资 >2000 AND 工资<3000
C.SELECT*FROM 教师 WHERE 工资>2000 OR 工资<3000
D.SELECT*FROM 教师 WHERE 工资<=2000 AND 工资>=3000
【分析】WHERE NOT(工资>3000 OR 工资<2000)表示工资在 2000 和 3000 之间,SQL
语言的几个特殊运算符中有一个 BETWEEN……AND 的含义就是“……和……之间” 。
【答案】A
16.(2004 年 9 月选择题第 19 题)
为“教师”表的职工号字段添加有效性规则:职工号的最左边三位字符是 110,正确的
SQL 语句是________。
A.CHANGE TABLE 教师 ALTER 职工号 SET CHECK LEFT(职工号,3)="110"
B.ALTER TABLE 教师 ALTER 职工号 SET CHECK LEFT(职工号,3)="110"
C.ALTER TABLE 教师 ALTER 职工号 CHECK LEFT(职工号,3)="110"
D.CHANGE TABLE 教师 ALTER 职工号 SET CHECK OCCURS(职工号,3)="110"
【分析】ALTER TABLE 的如下格式主要用于定义、修改和删除有效性规则和默认值定义:
ALTER TABLE TableName1 ALTER[COLUMN] FieldName2 [SET CHECK lExpression2]。
【答案】B
17.(2004 年 9 月选择题第 20 题)
有 SQL 语句 SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
ALL (SELECT 工资 FROM 教师 WHERE 系号="02")。 该语句的执行结果是系号_______。
A."01"和"02" B."01"和"03" C."01"和"04" D."02"和"03"
【分析】SQL 语句中有一种和子查询有关的运算符——ALL,ALL 要求当子查询中的所
有行都使结果为真时,结果才为真,即本题检索的是有教师的工资大于或等于系号为 02 的所
有教师工资的系号。
【答案】A
− 173 −
等级考试学习笔记——二级 Visual FoxPro

18.(2004 年 9 月选择题第 23 题)
有 SQL 语句:SELECT 主讲课程,COUNT(*)FROM 教师 GROUP BY 主讲课程。该语句
执行结果含有记录个数是________。
A.3 B.4 C.5 D.6
【分析】本题实际上是要求给出主讲课程的个数。
【答案】D
19.(2004 年 9 月选择题第 24 题)
有如下 SQL 语句。
SELECT COUNT(*)AS 人数,主讲课程 FROM 教师 GROUP BY 主讲课程;ORDER BY 人
数 DESC 该语句执行结果的第一条记录的内容是________。
A.4 数据结构 B.3 操作系统
C.2 数据库 D.1 网络技术
【分析】本题实际上是要求按主讲课程分组统计各个主讲课程的人数,并按降序排列。
【答案】A
20.(2004 年 9 月选择题第 25 题)
有如下 SQL 语句:
SELECT 学院.系名,COUNT(*)AS 教师人数 FROM 教师,学院;
WHERE 教师.系号=学院.系号 GROUP BY 学院.系名
与如上语句等价的 SQL 语句是________。
A.SELECT 学院.系名,COUNT(*)AS 教师人数;
FROM 教师 INNER JOIN 学院;
教师.系号= 学院.系号 GROUP BY 学院.系名
B.SELECT 学院.系名,COUNT(*)AS 教师人数;
FROM 教师 INNER JOIN 学院;
ON 系号 GROUP BY 学院.系名
C.SELECT 学院.系名,COUNT(*) AS 教师人数;
FROM 教师 INNER JOIN 学院;
ON 教师.系号=学院.系号 GROUP BY 学院. 系名
D.SELECT 学院. 系名,COUNT(*)AS 教师人数;
FROM 教师 INNER JOIN 学院;
ON 教师.系号 = 学院.系号
【分析】本题所给出的 SQL 语句是要求按系名分组,然后给出各个系的教师人数。四个
选项中要求用超联接查询,其格式为:SELECT……FROM Table INNER|LEFT|RIGHT|FULL
JOIN Table ON JoinCondition WHERE,其中 ON 指定联接条件。
【答案】C
21.(2004 年 9 月选择题第 26 题)
有 SQL 语句:
SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
ALL (SELECT 工资 FROM 教师 WHERE 系号="02")
− 174 −
第 6 章 关系数据库标准语言 SQL

与如上语句等价的 SQL 语句是______。


A.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
(SELECT MAX(工资)FROM 教师 WHERE 系号="02")
B.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
(SELECT MIN(工资)FROM 教师 WHERE 系号="02")
C.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
ANY(SELECT(工资)FROM 教师 WHERE 系号="02")
D.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
SOME (SELECT(工资)FROM 教师 WHERE 系号="02")
【分析】本题所给出的 SQL 语句要求列出有教师的工资大于或等于系号为 02 的所有教师
工资的系号,换句话说就是列出有教师的工资大于或等于系号为 02 中的最高工资的系号。
【答案】A
22.(2004 年 9 月填空题第 11 题)
为“学生”表增加一个“平均成绩”字段的正确命令是:ALTER TABLE 学生 ADD ______
平均成绩 N(5,2)。
【分析】添加新的字段的命令是 ALTER TABLE TableName1 ADD|ALTER [COLUMN]
FieldName1 FieldType。
【答案】COLUMN

本章总结
难点重点
1.SQL 的数据查询功能:简单查询、嵌套查询、连接查询、分组与计算查询以及集合
并运算。
2.SQL 的数据修改功能:插入命令 INSERT;更新命令 UPDATE;删除命令 DELETE。
3.SQL 的数据定义功能:建立表的命令 CREAT TABLE;修改表的命令 ALTER TABLE。
误点剖析
1.SELECT-SQL 命令格式如下。
SELECT[ALL|DISTINCT]<字段名表达式>[AS 列名]
[,<字段名表达式>[AS 列名],…]FROM<表或视图名>[,<表或视图名>,…]
[WHERE<条件表达式>[AND<条件表达式>…]]
[GROUP BY<分组表达式>[,<分组表达式>,…]][HAVING<条件表达式>]
[ORDER BY<字段名>[ASC|DESC]]
[INTO<输出目标>]|[TO FILE<文件>[ADDITIVE]]|TO PRINTER[PROMPT]]|
[TO SCREEN]
功能注释:
(1)ALL|DISTINCT,分别显示的查询结果包含所有符合条件|符合条件且不相同的记录
行,默认值为 ALL。DISTINCT 的作用是可以除去查询结果中的重复值。
(2)<字段名表达式>为必选项,指定输出列表中包含的表项,各表项之间用逗号隔离;

− 175 −
等级考试学习笔记——二级 Visual FoxPro

如果要将源表中的所有字段作为输出的表项,则可以用“*”代替。该字段可以是字段名,也
可以是字符串表达式。
(3)[AS]作为可选项,必须与必选项<字段名表达式>连用,这样输出的列表中不使用
<字段名表达式>作为列名,而是按指定的“列名”输出。
(4)必选项 FROM 说明要查询的数据来自哪个或哪些表,即可以对单个表或多个表进行
查询。
(5)可选项 WHERE 确定查询条件表达式,可用逻辑运算连接多个条件表达式,即查询
条件,选择元组的条件。
(6)可选项 GROUP BY 用于对查询结果进行分组,可以利用它对查询结果分组汇总。
(7)可选项 HAVING 必须与 GROUP BY 连用,对记录按<条件表达式>的限定进行分组。
(8)可选项 ORDER BY 用来对输出列表按指定<字段名>排序,其中,ASC 为升序排列,
DESC 按降序排列,默认为升序排列。
(9)可选项 INTO 确定查询输出的目标位置,系统默认是在浏览框中输出列表。
(10)另外,查询中还经常用到几个特殊的运算符:BETWEEN…AND…和 LIKE 等。
2.GROUP BY 子句用于将查询结果按一个或多个列的值分组,而 HAVING 子句则用于
指定在查询结果中的各组必须满足的条件,它是分组的附加条件。另外,SORT 命令改变记
录的物理位置,形成一个新的记录;而 INDEX 命令则不改变记录的物理位置,即不产生新
的数据表。
3.SQL 插入命令是在表尾插入记录,Visual FoxPro 支持两种 SQL 插入命令的格式,第
一种是标准格式,第二种是 Visual FoxPro 的特殊格式。
第一种格式:INSERT INTO dbf_name[(fname1[,fname2,...])]
VALUES(eExpression1[,eExpression2,...])
第二种格式:INSERT INTO dbf_name FROM ARRAY ArrayName/FROM MEMVAR
【特别提示】INSERT INTO dbf_name 说明向由 dbf_name 指定的表中插入记录,当插入的
不是完整的记录时,可以用 fname1,fname2,...指定字段;VALUE(eExpression1[,eExpression2,...])
给出具体的记录值;FROM ARRAY ArrayName 说明从指定的数组中插入记录值;FROM
MEMVAR 说明根据同名的内存变量来插入记录值,如果同名的变量不存在,那么相应的字
段为默认值或空。
4.修改表结构的命令格式之一:
ALTER TABLE TableName1 ADD|ALTER[COLUMN]FieldName1
FieldType [(nFieldWidth[,nPrecision])][NULL|NOT NULL]
[CHECK lExpression [ERROR cMessageText]][DEFAULT eExpression1]
[PRIMARY KEY|UNIQUE]
[REFERENCES TableName2[TAG TagName1]]
该格式可以添加(ADD)新的字段或修改(ALTER)已有的字段,它的语法格式基本可
以与 CREAT TABLE 的语法格式相对应。
5.修改表结构的命令格式之二:ALTER TABLE TableName1 ALTER [COLUMN]Field
Name2 [NULL|NOT NULL][SET DEFAULT eExpression2][SET CHECK lExpression2[ERROR
cMessageText2]] [DROP DEFAULT][DROP CHECK]。
− 176 −
第 6 章 关系数据库标准语言 SQL

该格式主要用于定义、修改和删除有效性规则和默认值定义。
6.修改表结构的命令格式之三:
ALTER TABLE TableName1 [DROP[COLUMN]FieldName3]
[SET CHECK lExpression3[ERROR cMessageText3]]
[DROP CHECK]
[ADD PRIMARY KEY eExpression3 TAG TagName2[FOR lExpression4]]
[DROP PRIMARY KEY]
[ADD UNIQUE eExpression4[TAG TagName3[FOR lExpression5]]]
[DROP UNIQUE TAG TagName4]
[ADD FOREIGN KEY[eExpression5] TAG TagName4 [FOR lExpression6]
REFERENCES TableName2[TAG TagName5]]
[DROP FOREIGN KEY TAG TagName6[SAVE]]
[RENAME COLUMN FieldName4 TO FieldName5]
该格式可以删除字段(DROP[COLUMN]) 、修改字段名(RENAME COLUMN)以及定
义、修改和删除表一级的有效性规则等。

单元练习

1.在 VFP 支持的 SQL 语句中,可以修改表结构的命令是________;可以修改表中数据


的命令是________。
2.VFP 支持的 SQL 语句中,可以删除表中记录的命令是________;可以从数据库中删
除表的命令是________。
3.SQL 语句中的数据维护命令不包括________。
A.INSERT-SQL B.CHANGE-SQL
C.DELETE-SQL D.UPDATE-SQL
4.INSERT-SQL 命令的功能是________。
A.在表头插入一条记录 B.在表尾插入一条记录
C.在表中指定位置插入一条记录 D.在表中指定位置插入若干条记录
5.SQL 查询语句中 ORDER BY 子句的功能是________。
A.对查询结果进行排序 B.分组统计查询结果
C.限定分组检索结果 D.限定查询条件

习题答案
1.ALTER TABLE、UPDATE。解析:在 SQL 语句中,可以修改表结构的命令是 ALTER
TABLE,可以修改表中数据的命令是 UPDATE。
2.DELETE、DROP TABLE。
3.B。解析:SQL 语句中的维护命令只有插入、更新和删除,没有更改命令。
4.B。解析:了解了 SQL 语句的维护命令之后就可以了解插入命令的功能。但要注意,
− 177 −
等级考试学习笔记——二级 Visual FoxPro

INSERT 命令可以在表尾插入单条记录,或是插入子查询的结果(多条记录) 。
5.A。解析:对查询结果进行分组用 GROUP BY 子句,限定查询条件用 WHERE 子句。
对查询结果进行排序的是 ORDER BY 子句。

− 178 −
第 7 章 查询与视图

第7章 查询与视图
查询与视图都是快速、方便地使用数据库中的数据的工具方法。本章主要介绍查询与视
图的有关概念;如何建立、执行和修改查询与视图;如何用“查询向导”生成多表查询。

知识结构图

大纲中的知识点

7.1 查询
查询在本章中是一个名词,它是 Visual FoxPro 支持的一种数据库对象,或者说是 Visual
FoxPro 为方便检索数据提供的一种工具方法。
问题 1:查询的概念是什么?
查询是从指定的表或视图中提取满足条件的记录,然后按照想得到的输出类型定向输出
查询结果,例如浏览器、报表、表及标签等。查询是以扩展名为.qpr 的文件保存在磁盘上的,
是一个文本文件。
问题 2:查询建立的方法是什么?
建立查询的方法有以下几种。
1.可以用 CREAT QUERY 命令打开查询设计器建立查询。
2.可以选择“文件”菜单下的“新建” ,或者单击“常用”工具栏上的“新建”按钮,
打开“新建”对话框,然后选择“查询”并单击“新建文件”打开查询设计器建立查询。
3.可以在项目管理器的“数据”选项卡下选择“查询” ,然后单击“新建”命令按钮打
开查询设计器建立查询。
4.如果熟悉 SQL SELECT,还可以直接编辑.qpr 文件建立查询。
− 179 −
等级考试学习笔记——二级 Visual FoxPro

除了第 4 种方法是用命令,前 3 种方法最终是用查询设计器建立查询,用查询设计器建


立查询的,步骤如下。
a.打开所需要的表(不必显示它) 。
b.选择“文件”菜单中的“新建”或单击“新建”按钮(标准状态的第一个按钮) 。
c.在弹出的“新建”对话框中选择“查询” ,并单击“新建文件”

d.在弹出的“添加表或视图”对话框中选择合适的数据库和其中的表,或者单击“其
他”按钮,然后从“打开”对话框中选择表。
e.单击“添加”按钮,则将所选表添加到“查询设计器”中,然后单击“关闭” 。此时,
显示“查询设计器” ,用户可限定欲观察的字段数和记录数。
首先,选择包含在查询中的字段,步骤为:在“查询设计器”窗口中单击“字段”选
项;在“可用字段”列表框中选择所需要的字段;单击“添加”将字段加入“选定字段”
列表框中。
其次,在“查询设计器”窗口中定义条件。
最后,保存查询,步骤为:选择“文件”菜单中的“另存为”,键入文件名,并单击按
钮;Visual FoxPro 可自动为其加上扩展名.qpr。
另外,查询设计器界面的各选项卡和 SQL SELECT 语句的各短语是相对应的。
1.设计查询的表或视图,对应于 FROM 短语,此后还可以从“查询”菜单或工具栏中
选择“添加表”或选择“移去表”重新指定设计查询的表。
2.“字段”选项卡对应于 SELECT 短语,可以单击“全部添加”选择所有字段,也可以
逐个选择字段“添加” ;在“函数和表达式”编辑框中可以输入或编辑计算表达式。
3.“联接”选项卡对应于 JOIN ON 短语,用于编辑联接条件。
4.“筛选”选项卡对应于 WHERE 短语,用于指定查询条件。
5.“排序依据”选项卡对应于 ORDER BY 短语,用于指定排序的字段和排序方式。
6.“分组依据”选项卡对应于 GROUP BY 短语和 HAVING 短语,用于分组。
7.“杂项”选项卡可以指定是否要重复记录(对应于 DISTINCT)及列在前面的记录(对
应于 TOP 语句)等。
问题 3:查询如何运行(执行)?
查询的执行有两种情况:一个是在查询设计器中设计好查询后,直接执行;另一种情况
是将查询作为文件形式保存起来之后再执行。
在查询设计器中,系统菜单给出“查询”选项,在此选项下选择“运行查询” ,系统便
按照设定的查询条件、查询去向进行查询,并输出查询结果到指定的去向。
当设计完成的查询以文件形式保存之后,随时都可以根据需要进行查询。方法是打开查
询文件所在的项目管理器,选取查询文件,单击项目管理器右侧的“运行”按钮,就可以执
行查询,得到查询结果。
此外,也可以把查询文件加入到设计的程序和菜单中运行,即可以用命令方式执行查询,
其命令格式是:DO QueryFile。
其中,QueryFile 是查询文件名,此时必须给出查询文件的扩展名.qpr。
问题 4:查询文件如何修改?
如果对设计的查询不满意,随时可以进行修改。方法是在查询文件所在的项目管理器中
− 180 −
第 7 章 查询与视图

选定查询文件,单击“修改”按钮,便可启动查询设计器。同使用查询设计器建立查询一样,
可以修改原来的任何一项设计,完成后,在“文件”菜单中选择“保存”,修改后的查询文件
将替代原来的文件。

例题讲解

例题 1 要求:生成一个只显示 TSB 中 TSB.书名、TSB.作者、TSB.出版单位及 TSB.


单价字段的查询。
【分析及答案】
选择包含在查询中的字段的步骤在上文中已提到,具体解题步骤如下。
1.单击“文件”菜单中的“新建”选项,打开“新建”对话框;
2.在“文件类型”下选择“查询”单选框,然后单击“新建文件”按钮;
3.选定 TSB 表,单击“添加”按钮,然后单击“关闭”按钮,则可见到 TSB 表添加到
查询设计器中;
4.单击“字段”选项,显示出“字段”选项卡,在“可用字段”列表框中选择 TSB. 书
名,并单击“添加”按钮(也可以通过双击该字段来完成) 。则将该字段加到“选定字
段”列表框中。
5.依次将 TSB.作者、TSB.出版单位及 TSB.单价字段添加到“选定字段”列表框中。
6.选择“文件”菜单下的“保存”就可以生成一个符合要求的查询了。选择“查询”
菜单中的“运行”选项,或者单击“运行”按钮(在标准工具栏显示为一个惊叹号)执行
查询。
例题 2 关于 VFP 数据库的查询,以下叙述正确的是______。 (多选)
A.查询的对象可以是数据库,也可以是已有的视图
B.查询文件中的内容是一些用 SQL 命令定义的查询条件与规则
C.执行查询文件与执行该文件包含的 SQL 命令的效果是一样的
D.执行查询文件查询数据表中的数据时,必须实现打开有关的数据库。
【分析】根据查询中的一些基本概念,可以知道选项 A、B 和 C 是正确的。
【答案】A,B,C

7.2 视图的分类及其概念
视图分为本地视图和远程视图,本地视图是利用 VFP SQL 语句从表或其他视图中选择信
息,远程视图是利用远程 SQL 语句从远程 ODBC 数据源表中选择信息。可以将一个或多个
远程视图添加到本地视图中,以便能在同一视图中同时访问 VFP 数据和远程 ODBC 数据源
表中的数据。视图兼有表和查询的特点与查询类似的地方是,都可以从一个或多个相关联的
表中提取有用信息;二者的区别在于查询只能起查询数据的作用,而视图不但可以查询数据,
还可以更新数据并把更新的结果送回到原表中。与表类似的地方是,可以用来更新其中的信
息,并将更新结果永久保存在磁盘上;区别在于视图的数据来源于表。在应用程序中,若要
创建自定义并且可更新的数据集合,可以使用视图。视图可以使数据暂时从数据库中分离成,
− 181 −
等级考试学习笔记——二级 Visual FoxPro

为自由数据,以便在主系统之外收集和修改数据。
问题 1:视图的概念是什么?
视图是用于从一个表或多个表中提取一系列记录的查询方法。
问题 2:视图如何建立?
视图建立的步骤如下。
1.打开 TESTDATA 数据库。 (视图不作为单独文件保存,它只作为数据库的一部分而存
在,因此,要生成视图必须先打开数据库。 )
2.选择“文件”菜单中的“新建”对话框。
3.在对话框中选择“视图” ,并单击“新建文件”,则打开“视图设计器” ,并弹出“添
加表或视图”对话框(观察“添加表或视图”对话框,因为在生成视图之前打开了 TESTDATA
数据库,所以 Visual FoxPro 假定用户要使用此数据库中的某个表,显示该数据库中的一系列
表) 。选择 orditems 表,单击“添加”按钮,并单击“关闭” 。
“视图设计器”和“查询设计器”
完全一致,在此不赘述。
在完成视图设计后,可将其存盘,步骤如下:选择“文件”菜单;为视图键入名称;单
击“保存” 。
视图建立的命令如下:
CREATE VIEW view_name[(column_name[,column_name]…)] AS select_statement
问题 3:视图如何运行?
可以在“项目管理器”中“浏览”视图,也可以通过命令来使用视图。
一个视图在使用时,将作为临时表在自己的工作区中打开。如果此视图基于本地表,即
本地视图, 则在另一个工作区中同时打开基本表。 视图的基本表是由定义视图的 SQL SELECT
语句访问的。
在项目管理器中使用视图的方法是:先选择一个数据库,接着再选择视图名,然后选择
“浏览”按钮,则在“浏览”窗口中显示视图,并可对视图进行操作。
如果用命令来使用一个视图则必须首先打开数据库,例如下面的语句。
OPEN DATABASE XXX (XXX 为某数据库名字)
USE YYY (YYY 是根据数据库中表建立的视图)
BROWSE
也可以使用 SQL 语句直接操作视图(当然首先也要打开数据库) ,如:SELECT FROM
GZ_EMP WHERE 工资>1500 (GZ_EMP 是根据工资表建立的视图) 。
问题 4:视图如何修改?
修改一个已经存在的视图,可以使用项目管理器或者编程方式。若要以 MODIFY VIEW
修改视图的 SQL 命令串,则必须创建新视图,保存视图定义并覆盖旧视图。
要在“视图设计器”中修改视图,只要在“项目管理器”中选择视图名,再选择“修
改”按钮,打开“视图设计器” ;或者先打开数据库,再使用带视图名的 MODIFY VIEW 命
令。如:
OPEN DATABASE XXX
MODIFY VIEW YYY

− 182 −
第 7 章 查询与视图

7.3 建立多表查询
用户可以用“查询设计器”生成一个多表查询,方法同用它生成一个基于单个表的查询。
问题 1:如何用“查询向导”生成多表查询?
生成多表查询的另一种方法是使用“查询向导” 。“查询向导”是一个特殊的程序,用来
循序渐进的指导用户如何生成一个查询。它在一个对话框中显示系列窗口,提示用户输入生
成查询所需要的信息。它会提示用户选择查询所要用到的表,选择查询所要包含的字段及记
录的排列顺序等。
用“查询向导”生成一个多表查询,步骤如下。
1.单击工具栏“新建”按钮,打开“新建”对话框。
2.在“文件类型”中选择“查询” ,并单击“向导”按钮,打开“向导选取”对话框。
3.选择“查询向导” ,并单击“确定”。显示“查询向导”对话框。
4.在“数据库和表”列表框中,选择 XXX 表;在“可用字段”中,双击在查询中所需
要包含的字段,如:AB、BC 与 CD,把它放入“选定字段”列表框中。
5.重复上一步,增加更多的表和字段。
6.单击“下一步” ,显示下一个窗口,设定表之间的关系。
7.从下拉列表中选择相关的字段:AB、BC 和 CD,单击“添加” 。列表中显示 AB、BC
和 CD。然后单击“下一步” ,显示下一个窗口,确定表中的记录。
8.选择“仅包含匹配的行”单选项,单击“下一步” 。
9. “筛选记录”用于为所设计的查询定义条件。
10.在“排序记录”中,用户可以为所创建的查询排序。
11.单击“下一步” ,进入最后一步“完成”。选择“保存并运行查询”可选项,单击“完
成”。
保存查询之后,多表查询就创建成功了。
例题 3 要求:生成一个视图。 (以上一章的数据库和表为例)
【分析及答案】
步骤如下:
1.打开数据库 TSGL。
注意:视图不作为单独文件保存,它只作为数据库的一部分而存在。因此,要生成视图
必须先打开数据库。
2.选择“文件”菜单中的“新建”选项,打开“新建”对话框。
3.在对话框中选择“视图” ,并单击“新建文件”,则打开“视图设计器” ,并弹出“添
加表或视图”对话框。
注意:观察“添加表或视图”对话框。 (因为在生成视图之前打开了 TSGL 数据库,所
以 Visual FoxPro 假定用户要使用此数据库中的某个表。 )显示该数据库中的一系列表。
4.选择 DZB 表,单击“添加”按钮,并单击“关闭” 。
注意: “视图设计器”和“查询设计器”完全一致。两种设计器使用方法在前文中已有
说明,在此就不赘述了。
− 183 −
等级考试学习笔记——二级 Visual FoxPro

5.单击“字段”选项,显示“字段”选项,然后按“全部添加”按钮,将字段全部加
到选定字段列表中。

综合实例

1. (2004 年 4 月选择题第 19 题)
在 Visual FoxPro 的查询设计器中“筛选”选项卡对应的 SQL 短语是________。
A.WHERE B.JOIN C.SET D.ORDER BY
【分析】 “联接”选项卡对应 JOIN ON,用于编辑联接条件。 “筛选”选项卡对应 WHERE
短语,用于指定查询条件。 “排序依据”选项卡对应 ORDER BY 短语,用于指定排序的字段
和排序方式。 “分组依据”选项卡对应 GROUP BY 和 HAVING 短语,用于分组。
【答案】A
第 2~3 题使用如下三个表。
零件.DBF:零件号 C(2),零件名称 C(10),单价 N(10) ,规格 C(8)
使用零件.DBF:项目号 C(2),零件号 C(2),数量 I
项目.DBF:项目号 C(2),项目名称 C (20),项目负责人 C(10),电话 C(20)
2. (2004 年 4 月填空题第 8 题)
建立一个由零件名称、数量、项目号及项目名称字段构成的视图,视图中只包含项目号
为“s2”的数据,应该 使用的 SQL 语句是:
CREATE VIEW item_view______;
SELECT 零件.零件名称,使用零件.数 量,使用零件.项目号,项目.项目名称;
FROM 零件 INNER JOIN 使用零件;
INNER JOIN______;
ON 使用零件.项目号= 项目.项目号;
ON 零件.零件号=使用零件.零件号;
WHERE 项目.项目号='s2'
【分析】根据命令格式:CREATE VIEW view_name[(column_name[,column_name]…)] AS
select_statement,可以得出第一个空是 AS。INNER JOIN 为内部联接,由于本题需要在零件、
使用零件及项目三个表中建立联接,所以第二个空为项目。
【答案】AS 项目
3. (2004 年 4 月填空题第 9 题)
从上一题建立的视图中查询使用数量最多的 2 个零件的信息,应该使用的 SQL 语句是
SELECT*________ 2 FROM item_view _______ 数量 DESC。
【分析】本题主要考查 SELECT 语句中的排序短语 ORDER BY。
【答案】TOP ORDER BY
第 4~5 题使用的数据表如下。
当前盘当前目录下有数据库:学院.dbc,其中有“教师”表和“学院”表。
“教师”表如下。

− 184 −
第 7 章 查询与视图

职工号 系 号 姓 名 工 资 主讲课程

11020001 01 肖海 3408 数据结构

11020002 02 王岩盐 4390 数据结构

11020003 01 刘星魂 2450 C 语言

11020004 03 张月新 3200 操作系统

11020005 01 李明玉 4520 数据结构

11020006 02 孙民山 2976 操作系统

11020007 03 钱无名 2987 数据库

11020008 04 呼延军 3220 编译原理

11020009 03 王小龙 3980 数据结构

11020010 01 张国梁 2400 C 语言

11020011 04 林新月 1800 操作系统

11020012 01 乔小廷 5400 网络技术

11020013 02 周兴池 3670 数据库

11000014 04 欧阳秀 3345 编译原理

“学院”表如下。

系 号 系 名

01 计算机

02 通信

03 信息管理

04 数学

4.(2004 年 9 月选择题第 21 题)
建立一个视图 salary,该视图包括了系号和(该系的)平均工资两个字段,正确的 SQL
语句是________。
A.CREATE VIEW salary AS 系号,AVG(工资)AS 平均工资 FROM 教师 GROUP BY 系号
B.CREATE VIEW salary AS SELECT 系号,AVG(工资)AS 平均工资 FROM 教师 GROUP
BY 系名
C.CREATE VIEW salary SELECT 系号,AVG(工资)AS 平均工资 FROM 教师 GROUP BY
系号
D.CREATE VIEW salary AS SELECT 系号,AVG(工资)AS 平均工资 FROM 教师 GROUP
BY 系号
【分析】建立视图的命令格式是 CREATE VIEW view_name AS select_statement,其中
select_statement 可以是任意的 SELECT 查询语句。教师表中有“系号”属性没有“系名”属性。
【答案】D
5. (2004 年 9 月选择题第 22 题)
删除视图 salary 的命令是________。

− 185 −
等级考试学习笔记——二级 Visual FoxPro

A.DROP salary VIEW B.DROP VIEW salary


C.DELETE salary VIEW D.DELETE salary
【分析】删除视图的命令格式是:DROP VIEW <视图名>。
【答案】B
6.(2004 年 9 月选择题第 30 题)
有关查询设计器,正确的描述是________。
A.“联接”选项卡与 SQL 语句的 GROUP BY 短语对应
B.“筛选”选项卡与 SQL 语句的 HAVING 短语对应
C.“排序依据”选项卡与 SQL 语句的 ORDER BY 短语对应
D.“分组依据”选项卡与 SQL 语句的 JOIN ON 短语对应
【分析】在查询设计器中, “联接”选项卡与 SQL 语句的 JOIN ON 短语对应; “筛选”
选项卡与 SQL 语句的 WHERE 短语对应; “排序依据”选项卡与 SQL 语句的 ORDER BY 短
语对应; “分组依据”选项卡与 SQL 语句的 GROUP BY 短语对应。
【答案】C
7.(2004 年 9 月填空题第 4 题)
在 Visual FoxPro 的查询设计器中________选项卡对应的 SQL 短语是 WHERE。
【分析】在查询设计器中, “筛选”选项卡与 SQL 语句的 WHERE 短语对应。
【答案】筛选

本章总结

难点重点
本章介绍了 Visual FoxPro 检索和操作数据库的两个基本工具或手段:查询和视图。
1.查询的建立、执行及修改。
2.视图的建立、执行及修改。
3.用“查询向导”生成多表查询。
误点剖析
1.查询设计器中各选项卡所对应的 SQL 短语如下。
(1)设计查询的表或视图,对应 FROM 短语,此后还可以从“查询”菜单或工具栏中选
择“添加表”或选择“移去表”重新指定设计查询的表。
(2) “字段”选项卡对应 SELECT 短语,可以单击“全部添加”选择所有字段,也可以
逐个选择字段“添加” ;在“函数和表达式”编辑框中可以输入或编辑计算表达式。
(3) “联接”选项卡对应 JOIN ON 短语,用于编辑联接条件。
(4) “筛选”选项卡对应 WHERE 短语,用于指定查询条件。
(5) “排序依据”选项卡对应 ORDER BY 短语,用于指定排序的字段和排序方式。
(6) “分组依据”选项卡对应 GROUP BY 短语和 HAVING 短语,用于分组。
(7) “杂项”选项卡可以指定是否要重复记录(对应 DISTINCT)及列在前面的记录(对
应 TOP 语句)等。
2.视图兼有表和查询的特点。与查询类似的地方是,都可以从一个或多个相关联的表
− 186 −
第 7 章 查询与视图

中提取有用信息;二者的区别在于查询只能起查询数据的作用,而视图不但可以查阅数据,
还可以更新数据并把更新的结果送回到原表中。与表类似的地方是,可以用来更新其中的信
息,并将更新结果永久保存在磁盘上;区别在于视图的数据来源于表。在应用程序中,若要
创建自定义并且可更新的数据集合,可以使用视图。视图可以使数据暂时从数据库中分离成
自由数据,以便在主系统之外收集和修改数据。

单元练习

1.VFP 的查询设计器包括的选项卡有________、________、________、________、________
和________。
2.视图与查询最根本的区别在于:查询只能查阅指定的数据,而视图不但可以查阅数
据,还可以________,并把________送回到原数据表中。
3.下列有关查询和视图的说法中,不正确的是________。
A.查询文件的扩展名为 .qpr
B.视图依赖于数据库的存在而存在
C.交叉表查询不适用于在多个数据表中进行相关数据的查询
D.只能对数据表中数据进行查询,而不能对视图文件中的数据进行查询
4.以下关于视图的描述中,正确的是________。
A.只能由自由表创建视图
B.不能由自由表创建视图
C.只能由数据库表创建视图
D.可以由各种数据表创建视图
5.视图是一个虚表,它是从________中导出的表。在数据库中,只存放视图的________,
不存放视图________。

习题答案
1.字段,联接,筛选,排序依据,分组依据,杂项。解析:查询设计器中的选项卡有
字段、联接、筛选、排序依据、分组依据和杂项。而且各选项卡和 SQL SELECT 语句的各短
语是相对应的。
2.更新,更新后的值
3.D
4.D。解析:可以由数据库表和自由表创建视图。
5.一个或几个基本表 定义 对应的数据

− 187 −
等级考试学习笔记——二级 Visual FoxPro

第8章 项目管理器、表单和菜单设计
本章主要介绍了项目管理器、表单设计器以及菜单设计器的使用。项目管理器是 VFP 中
处理数据和对象的主要组织工具,为系统开发者在组织和处理表、数据库、表单、报表、查
询时提供了简便的、可视化的方法;表单设计器是 VFP 提供的用于建立应用程序界面的最主
要的工具之一;一个应用程序一般是以菜单的形式列出其具有的功能菜单设计器提供。

知识结构图设计菜单的各种工具。

− 188 −
第 8 章 项目管理器、表单和菜单设计

大纲中的知识点

8.1 项目管理器
所谓项目是指文件、数据、文档和 Visual FoxPro 对象的集合。
“项目管理器”是 Visual
FoxPro 中处理数据和对象的主要组织工具,为系统开发者提供了极为方便的工作平台:提供
了简便的、可视化的方法来组织和处理表、数据库、表单、报表、查询和其他一切文件,通
过单击鼠标就能实现对文件的创建、修改、删除等操作;在项目管理器中可以将应用系统编
译成一个扩展名为 app 的应用文件或扩展名为 exe 的可执行文件。
问题 1:如何创建项目?
创建一个新项目有两种途径,一是仅创建一个项目文件,用来分类管理其他文件;二是
使用应用程序向导生成一个项目和一个 Visual FoxPro 应用程序框架。
1.如何创建项目文件?
用“文件”菜单中的“新建”命令创建新项目文件,具体操作如下:
(1)从“文件”菜单中选择“新建”命令,或者单击“常用”工具栏上的“新建”按钮,
弹出“新建”对话框。
(2)在“文件类型”区域选择“项目”单选项,然后单击“新建文件”图标按钮,弹出
“创建”对话框。
(3)在“创建”对话框的“项目文件”文本框中输入项目名称,然后在“保存在”组合
框中选择保存该项目的文件夹。
(4)单击“保存”按钮,Visual FoxPro 就在指定目录位置建立一个新的项目文件。
当激活“项目管理器”窗口时,在菜单栏中将显示“项目”菜单。对于已创建的项目文
件,再打开时同时自动打开项目管理器。
2.如何用应用程序向导生成一个项目?
首先启动“应用程序向导” ,然后再创建项目,具体操作如下。
(1)从“文件”菜单中选择“新建”菜单项,或单击“常用”工具栏上的“新建”图标
按钮,选中“项目”单选项。
(2)单击“向导”图标按钮,弹出“应用程序向导”对话框,选中“创建项目目录结构”
复选框。
(3)可以在对话框的“项目名称”中直接输入新项目的名称,但最好给出一个独立的子
目录,如果指定的文件夹不存在,系统将自动创建。可以单击“浏览”按钮,打开“选择目
录”对话框,查找一个已存在的项目文件,准备在应用程序生成器中使用。
(4)单击“应用程序向导”对话框上的“确定”按钮,“应用程序向导”将自动调用所
需要的各种应用程序生成器,并且为应用程序生成一个目录和项目结构。
问题 2:文件选项卡都有哪些?
“项目管理器”窗口是 Visual FoxPro 应用系统开发人员的工作平台,共有 6 个选项卡,
其中“数据” 、“文档”、“类”、
“代码” 、“其他”5 个选项卡用于分类显示各种文件, “全部”
选项卡用于集中显示该项目中的所有文件。初学者常用的是“数据”和“文档”两个选项卡,

− 189 −
等级考试学习笔记——二级 Visual FoxPro

对于应用系统开发者而言,将要用到所有选项卡。
1.“数据”选项卡包含哪些内容?
“数据”选项卡包含了一个项目中的所有数据—数据库、自由表、查询和视图。
它为数据提供了一个组织良好的分层结构视图,如果某个类型的数据项有一个或多个,
则在其前标志有一个加号。单击加号可查看此项的列表,单击减号可折叠列表,与 Windows
的资源管理器类似。
2.“文档”选项卡包含哪些内容?
“文档”选项卡包含了处理数据时所用的三类文件,即输入和查看数据所用的表单、打
印表和查询结果所用的报表及标签。另外,开发者也可以为应用程序组件添加说明:选中文
件后,单击鼠标右键后从快捷菜单上或从“项目”菜单中选择“编辑说明” ,在弹出对话框的
文本框输入一些描述性的信息即可。
问题 3:项目管理器如何使用?
1.如何创建文件?
要在项目管理器中创建文件,首先要确定新文件的类型。只有当选定了文件类型以后,
“新建”按钮才可以用。单击“新建”按钮或者从“项目”菜单中选择“新建文件”命令,即
可打开相应的设计器创建一个新文件。
注意:在项目管理器中新建的文件自动包含在该项目文件中,而利用“文件”菜单中的
“新建”命令创建的文件不属于任何项目文件。
2.如何添加文件?
利用项目管理器可以把一个已经存在的文件添加到项目文件中,具体操作如下。
(1)选择要添加的文件类型。
(2)单击“添加”按钮或者从“项目”菜单中选择“添加文件”命令,弹出“打开”对
话框,浏览选择要添加的文件。
(3)单击“确定”按钮,系统便将选择的文件添加到项目文件中。
注意:在 Visual FoxPro 中,新建或添加一个文件到项目中并不意味着该文件已成为项目
的一部分。事实上,每一个文件都以独立文件的形式存在,通常说某个项目包含某个文件只
是表示该文件与项目建立了一种关联。这样做有两大优点:一个文件可以包含在多个项目中,
项目仅仅需要知道所包含的文件在哪里,而不需关心所包含文件的其他信息;如果一个文件
同时被多个项目所包含,那么在修改该文件时,修改的结果将同时在所有相关的项目中得以
体现,这样就避免了在多个项目中分别修改文件,从而可能导致修改不一致的后果。
3.如何修改文件?
利用项目管理器可以随时修改项目文件中的指定文件,具体操作如下。
(1)选择要修改的文件。
(2)单击“修改”按钮或从“项目”菜单中选择“修改文件”命令,系统将根据要修改
的文件类型打开相应的设计器。
(3)在设计器中修改选择的文件。
4.如何移去文件?
一般来说,项目中所包含的文件是为某一个应用程序服务的,如果某个文件不需要了,
可以从项目中移去,具体操作如下。
− 190 −
第 8 章 项目管理器、表单和菜单设计

(1)选择要移去的文件。
(2)单击“移去”按钮或从“项目”菜单中选择“移去文件”命令。系统将显示“移去
文件”提示框。
(3)若单击提示框中的“移去”按钮,系统仅仅从项目中移去所选择的文件,文件仍存
在于磁盘原目录中;若单击“删除”按钮,系统不仅从项目中移去文件,还将从磁盘中删除
该文件。
问题 4:如何定制项目管理器?
“项目管理器”是作为一个独立的窗口而存在的,用户可以根据需要改变项目管理器的
外观,如调整项目管理器窗口的大小,移动项目管理器窗口的显示位置,折叠或拆分项目管
理器窗口以及使项目管理器中的选项卡永远浮在其他窗口之上。
1.移动、缩放和折叠项目管理器
① 移动和缩放项目管理器
项目管理器窗口与其他 Windows 窗口一样,也可以随时改变窗口的大小以及移动窗口的
显示位置。具体操作如下。
移动——将鼠标放在窗口的标题栏上并拖动鼠标;将鼠标放在窗口上后,单击鼠标右键,
选择“移动” ,再用键盘上的键移动。
改变大小——将鼠标指针指向项目管理器窗口的顶端、底端、两边或角上,拖动鼠标便
可扩大或缩小该窗口的尺寸了。
② 折叠项目管理器
在项目管理器右上角有按钮用于折叠或展开项目管理器窗口。该按钮在正常显示时,其
箭头向上,称为“正常”按钮,单击后,项目管理器窗口会缩小为仅显示选项卡标签,同时
其箭头也向下了,称为“还原”按钮。
在折叠状态下,选择其中一个选项卡将显示一个较小的窗口,此时的小窗口不显示命令
按钮,但是在选项卡中单击鼠标右键时,弹出的快捷菜单中增加了“项目”菜单中各命令按
钮功能的选项。
2.拆分项目管理器
当项目管理器折叠后,可以进一步拆分项目管理器窗口,使其中的选项卡成为独立、浮
动的窗口,当然此时也可以根据需要重新安排它们的位置。
当选项卡处于浮动状态时,在选项卡中单击鼠标右键时,弹出的快捷菜单增加了“项目”
菜单中的选项。
对于从项目管理器窗口中拆分出来的选项卡,单击选项卡的图钉按钮,可以钉住该选项
卡,将其设置为始终显示在屏幕的最顶层,不会被其他窗口遮挡,再次单击图钉按钮就可以
取消“顶层显示”设置。
如果要还原拆分的选项卡,可以单击选项卡的“关闭”按钮,也可以用鼠标将拆分的选
项卡拖拽回项目管理器窗口。
3.停放项目管理器
将项目管理器拖到 Visual FoxPro 6.0 主窗口的顶部,就可以使它像工具栏一样显示在主
窗口的顶部。停放后的项目管理器变成了窗口工具栏区域的一部分,不能将其整个展开,但
是可以单击每个选项卡来进行相应的操作。
− 191 −
等级考试学习笔记——二级 Visual FoxPro

例题讲解

例题 1 连编可执行文件,要使用________。
【答案】项目管理器
例题 2 连编程序,必须通过________。
A.程序编辑器 B.项目管理器
C.应用程序生成器 D.数据库设计器
【答案】B
例题 3 用项目管理器组装应用程序系统,要将_________等资源文件组装在项目中。
【答案】数据、文档、类、代码、其他
例题 4 菜单程序组装在项目管理器的________中。
【答案】其他选项

8.2 表单设计器
在使用表单设计器和菜单设计器之前,必须对面向对象的程序设计、对象、类、容器与
控件、事件等概念进行了解。这些知识在前面章节早有介绍,但都比较简单,在此对这些知
识作一下详细的解释。
面向对象的程序设计方法(Object Oriented Programming),简称 OOP。传统的过程化分
析设计方法与 OOP 区别主要如下。
1.以过程为中心和以对象为中心
2.显露数据和隐藏数据
3.单个单元和模块单元
4.使用一次和可重复使用
5.有序执行过程和事件驱动机制
使用 OOP 方法开发能建立反映真实世界事物的应用程序。这种方法更接近人们处理事
物的思维方式,使系统更容易维护,更能适应不断变化的业务需要,提高应用程序的质量和
代码复用能力。
问题 1:对象与类的概念是什么?
1.对象
对象是代码和数据的组合,可以作为一个单位来处理。对象可以是应用程序的一部分,
比如控件或窗体,也可以是整个应用程序。VFP 对象支持属性、方法和事件,对象的数据为
属性,在对象上操作的过程为方法,事件是可被对象识别的动作,例如单击鼠标或按下键盘,
可编写代码来响应事件。
对象是一个封装的属性和方法的实体,对象的结构特征由属性来表示,属性描述了对象
的状态;方法和对象紧密地连接在一起,它可以操纵对象数据(各种属性) ,改变对象的状态;
每个对象都有可以识别的和响应的事件,事件是一种定义好的特定动作,每当其他对象向本
对象发出消息并触发事件时,与事件相关的方法得以实现。

− 192 −
第 8 章 项目管理器、表单和菜单设计

2.类
创建类的目的是为了使用的便利以及维护应用程序组件的一致性。通过创建和使用类,
可以保证开发者在创建整个应用程序中使用一致的组件。
对象的属性、事件和方法都是在类定义中确定的。类就像一个蓝图或模具,对象都是由
它生成的。在 OOP 中,对象和类是很相近的,但又是不同的。类有许多重要特性:封装性、
继承性和多态性等。
问题 2:Visual FoxPro 的基类有哪些?
VFP6.0 提供了大量可供用户直接使用的基类,即内部定义的类,用户可以从这些基类中
创建对象,或派生出子类。表 1-1 已经列出 VFP 基类清单。
问题 3:容器与控件的概念是什么?
Visual FoxPro 中的类一般可分为两种类型:容器类和控件类,可分别生成容器(对象)
和控件(对象) 。
控件是一个可以以图形化的方式显示出来并能与用户进行交互的对象,例如一个命令按
钮、一个文本框等。控件通常被放置在一个容器里,容器可以被认为是一种特殊的控件,它
能包容其他的控件或容器,例如一个表单、一个表格等。在此把容器对象称为那些被包容对
象的父对象。表 1-3 已经给出了 Visual FoxPro 中常用的容器及其所能包容的对象。
问题 4:事件的概念是什么?
事件是一种由系统预先定义而由用户或系统发出的动作。事件作用于对象,对象识别事
件并作出相应反应。事件可以由系统引发,也可以由用户引发。
与方法集可以无限扩展不同,事件集是固定的。用户不能定义新的事件。表 1-5 给出了
Visual FoxPro 基类的最小事件集,不管哪个基类都包含这些事件。
事件代码既能在事件引发时执行,也可以像方法一样被显示调用。但这个原则有一个例
外,它不适用于命令按钮组和选项按钮组。
问题 5:表单的概念是什么?
表单在系统中是用户的主要界面,在 VFP 中,它是一个容器类对象。表单可以拥有多个
属性,可以响应多种事件,实现多种方法操作。因为表单对象中可以包含各种控件,而各种
控件又有自己的属性,事件和方法。
表单为数据库信息的显示、输入和编辑提供了非常简便的方法,表单的设计是可视化编
程的基础。
问题 6:在表单中如何加入和修改控件对象?
1.如何加入控件对象?
在表单中添加对象可以通过将数据源中的数据表或视图中的字段拖到表单中,也可利用
“表单”工具栏中的控件按钮。
(1)使用控件工具栏添加控件
当新建一个表单时会自动打开表单控件工具栏。如果该工具栏没有打开,可选择菜单项
“显示”—“表单工具栏” 。
具体步骤如下。
① 单击工具栏中将要添加的控件的按钮,当鼠标指针移到表单上时,指针变成十字形。
② 在表单上从某点开始,按住左键拖动,当拖出的框线达到要求的大小时,松开按键,
− 193 −
等级考试学习笔记——二级 Visual FoxPro

在表单上出现添加的控件。
(2)从类库中添加控件
在 VFP 中,用户可以通过类设计器设计自己的类放到一个类库文件里,然后用类库中的
类派生表单上的相应对象。具体方法如下。
① 在表单管理器中打开表单。
② 单击项目管理器,将其激活,再单击“类”选项页,展开类树,找到将要添加到表
单上的类名。
③ 用鼠标左键单击类名并按住向表单上拖动,当移动到表单上时,鼠标指针会变成几
本书的形状,到达适当位置后松开鼠标,该控件就被添加在表单上了。
2.如何修改控件对象?
(1)在表单中删除、复制对象
① 删除对象
选中要删除的对象,再按“Del”键;或者在主菜单的“编辑”中,单击“清除” 。这两
种方法都是彻底的从磁盘上删除文件。但是,如果采用“Ctrl”+“X”的方法或者选择“编
辑”菜单中的“剪切”命令被删除的内容会保存在剪切板中。
② 复制对象
复制对象很简单,可以使用“Ctrl”+“C”和“Ctrl”+“V”来完成。
(2)对象属性的修改
每一个对象都有自己的属性,因对象类型的不同而不同。对于选定的对象,可以用“属
性”对话框来修改其属性。
问题 7:如何设定数据环境?
数据环境的设置在表单设计时完成,方法如下。
在表单设计器中单击鼠标右键,弹出快捷菜单,从中选择“数据环境…”项,或在表单
设计工具栏单击“数据环境”按钮,就可以打开当前表单的数据环境设置对话框,进行数据
环境的设计了。
在打开的数据环境中,可以添加本表单所需要的数据表、自由表或视图。如果是本地数
据,使用数据表或视图均可;如果为远程数据,则一定要先建立起远程数据的视图,即对于
远程数据,在数据环境中只能打开视图。

例题讲解

例题 5 为一个表单建立了快捷菜单,要打开这个菜单应当______。
A.用热键 B.用快捷键 C.用事件 D.用菜单
【答案】C

8.3 菜单设计器
问题 1:菜单的结构是什么?
Visual FoxPro 6.0 有两种类型的菜单,即条形菜单和弹出式菜单。每个条形菜单都有一
− 194 −
第 8 章 项目管理器、表单和菜单设计

个内部名字和一组菜单选项,还有一个名称(标题)和内部名字。同样,每一个弹出式菜单
有一个内部名字和一组菜单选项,一个名称(标题)和选项序号。
问题 2:系统菜单包含那些内容?
Visual FoxPro 6.0 系统菜单是一个典型的菜单系统,其主菜单是一个条形菜单,其下的
每个菜单项有一个可以激活的弹出式菜单。下面是条形菜单常见的选项的名称、内部名字以
及弹出式菜单的内部名字。见表 8-1、8-2。

表 8-1 主菜单(_MSYSMENU)常见选项及内部名字
选 项 名 称 内 部 名 字

文件 _MSM_ FILE

编辑 _MSM_ EDIT

显示 _MSM_ VIEW

工具 _MSM _TOOLS

程序 _MSM _PROG

窗口 _MSM _WINDO

帮助 _MSM _SYSTM

表 8-2 弹出式菜单的选项及内部名字
弹出式菜单 内 部 名 字

“文件”菜单 _MFILE

“编辑”菜单 _MEDIT

“显示”菜单 _MVIEW

“工具”菜单 _MTOOLS

“程序”菜单 _MPROG

“窗口”菜单 _MWINDO

“帮助”菜单 _MSYSTM

问题 3:系统菜单的操作命令都有哪些?
SET SYSMENU 命令可以用来允许或者禁止在程序运行时访问系统菜单,也可以用来重
新配置系统菜单,其格式如下:
SET SYSMENU ON|OFF|AUTOMATIC
|TO[<弹出式菜单名表>]
|TO [<条形菜单项名表>]
|TO[DEFAULT]|SAVE|NOSAVE
其中,ON|OFF 分别允许|禁止程序执行时访问系统菜单;
AUTOMATIC 可使系统菜单显示出来,可以访问系统菜单;
TO<弹出式菜单名表>:重新配置系统菜单,以内部名字列出可用的弹出式菜单;
TO<条形菜单项名表>:重新配置系统菜单,以条形菜单项内部名表列出可用的子菜单;
TO DEFAULT:将系统菜单恢复为缺省配置。

− 195 −
等级考试学习笔记——二级 Visual FoxPro

SAVE:将当前的系统菜单配置指定为缺省配置。如果在执行了 SET SYSMENU SAVE


命令后,修改了系统菜单,那么执行 SET SESMENU TO DEFAULT 命令,就可以恢复 SET
SYSMENU SAVE 命令执行之前的菜单配置;
NOSAVE:将缺省配置恢复成 Visual FoxPro 系统菜单的标准配置。要将系统菜单恢复成
标准配置,可先执行 SET SYSMENU NOSAVE 命令,然后执行 SET SYSMENU TO DEFAULT
命令。
不带参数的 SET SYSMENU TO 命令将屏蔽系统菜单,使系统菜单不可用。
问题 4:如何对下拉菜单进行设计?
下拉式菜单是一种最常见的菜单,用 Visual FoxPro 提供的菜单设计器可以方便地进行下
拉式菜单的设计。具体来说,菜单设计器的功能有两个:一是为顶层表单设计下拉式菜单;
二是通过定制 Visual FoxPro 系统菜单建立应用程序的下拉式菜单。
在利用菜单设计器设计菜单时,各菜单项及其功能既可以由自己来定义,也可以采用
Visual FoxPro 系统的标准菜单项及其功能。
下拉式菜单的设计过程为:调用菜单设计器→定义菜单→生成菜单程序→运行菜单程
序,定义菜单生成的菜单文件是以.mnx 或者.mnt 为扩展名的,生成菜单程序所产生的菜单程
序文件是以.mpr 为扩展名的。

综合实例

1.(2004 年 4 月选择题第 4 题)
在当前表单的 LABEL1 控件中显示系统时间的语句是________。
A.THISFORM.LABEL1.Caption=TIME()
B.THISFORM.LABEL1.Value=TIME()
C.THISFORM.LABEL1.Text=TIME()
D.THISFORM.LABEL1.Control=TIME()
【分析】标签是用以显示文本的图形控件,其常用的属性是 Caption 属性和 Alignment 属
性。显示系统时间的语句是 A。
【答案】A
2.(2004 年 4 月选择题第 7 题)
在 Visual FoxPro 的项目管理器中不包括的选项卡是________。
A.数据 B.文档 C.类 D.表单
【分析】项目管理器中的选项卡有:数据、文档、类、代码、其他、全部。
【答案】D
3.(2004 年 4 月选择题第 25 题)
在 Visual FoxPro 中释放和关闭表单的方法是________。
A.Release B.Close C.Delete D.Drop
【分析】从表单的常用事件与方法中可以知道,释放和关闭表单的方法是 Release。
【答案】A
4.(2004 年 4 月选择题第 26 题)
− 196 −
第 8 章 项目管理器、表单和菜单设计

为了从用户菜单返回到系统菜单应该使用命令________。
A.SET DEFAULT SYSTEM B.SET MENU TO DEFAULT
C.SET SYSTEM TO DEFAULT D.SET SYSMENU TO DEFAULT
【分析】SET SYSMENU TO DEFAULT 将系统菜单恢复为缺省配置。
【答案】D
5.(2004 年 4 月选择题第 27 题)
在表单中为表格控件指定数据源的属性是________。
A.DataSource B.RecordSource C.DataFrom D.RecordFrom
【分析】在表单的表格控件中,RecordSource 属性指定表格数据源。
【答案】B
6.(2004 年 4 月选择题第 28 题)
以下关于表单数据环境叙述错误的是________。
A.可以向表单数据环境设计器中添加表或视图
B.可以从表单数据环境设计器中移出表或视图
C.可以在表单数据环境设计器中设置表之间的关系
D.不可以在表单数据环境设计器中设置表之间的关系
【分析】在表单的数据环境中可以添加表或视图,移去表或视图,还可以在数据环境中
设置表之间的关系。
【答案】D
7.(2004 年 4 月填空题第 4 题)
运行表单时,Load 事件是在 Init 事件之________被引发。
【分析】表单常用事件中,Init 事件在对象建立时引发,Load 在对象建立之前引发,所以
Load 事件是在 Init 事件之前被引发。
【答案】前
(8)~(10)使用下图:

8.(2004 年 9 月选择题第 9 题)
如果在运行表单时,要使表单的标题显示“登录窗口” ,则可以在 Form1 的 Load 事件中
加入语句________。
A.THISFORM.Caption="登录窗口"

− 197 −
等级考试学习笔记——二级 Visual FoxPro

B.Form1.Caption="登录窗口"
C.THISFORM.Name="登录窗口"
D.Form1.Name="登录窗口"
【分析】当前对象所在的表单应用的关键字是 THISFORM,表单标题属性是 Caption。
【答案】A
9.(2004 年 9 月选择题第 10 题)
如果想在运行表单时,向 Text2 中输入字符,显示的是“*” ,则可以在 Form1 的 Init 事
件中加入语句________。
A.Form1.Text2.PasswordChar="*"
B.Form1.Text2.Password="*"
C.THISFORM.Text2.Password="*"
D.THISFORM.Text2.PasswordChar="*"
【分析】文本框的 PasswordChar 属性用于决定显示用户输入的字符还是显示占位符。当
为该属性指定一个字符(即占位符,通常为*)后,文本框内将只显示占位符。
【答案】D
10.(2004 年 9 月选择题第 11 题)
假设用户名和口令存储在自由表“口令表”中,当用户输入用户名和口令并单击“登录”
按钮时,若用户名输入错误,则提示“用户名错误” ;若用户名输入正确,而口令输入错误,
则提示“口令错误” 。若命令按钮“登录”的 Click 事件中的代码如下:
USE 口令表
GO TOP
flag =0
DO WHILE .not.EOF()
IF ALLTRIM(用户名)==Alltrim(THISFORM.Text1.Value)
If ALLTRIM(口令)==ALLTRIM(Thisform.Text2.value)
WAIT"欢迎使用"WINDOW TIMEOUT2
ELSE
WAIT"口令错误"WINDOW TIMEOUT2
ENDIF
flag=1
EXIT
ENDIF
SKIP
ENDDO
IF
——————
WAIT"用户名错误"WINDOW TIMEOUT2
ENDIF
则在横线处应填写的代码是________。
− 198 −
第 8 章 项目管理器、表单和菜单设计

A.flag=-1 B.flag=0 C.flag=1 D.flag=2


【答案】B
11.(2004 年 9 月选择题第 14 题)
为表单建立了快捷菜单 MYMENU,调用快捷菜单的命令代码 DO mymenu.mpr WITH
THIS 应该放在表单的________事件中。
A.Destroy B.Init 事件 C.Load 事件 D.RightClick 事件
【分析】根据快捷菜单建立的方法和过程可知,在选定对象的 RightClick 事件代码中添加
调用快捷菜单程序的命令。
【答案】D
12.(2004 年 9 月选择题第 28 题)
向项目中添加表单,应该使用项目管理器的________。
A. “代码”选项卡 B.“类”选项卡
C. “数据”选项卡 D.“文档”选项卡
【分析】根据表单创建的方法可知,向项目中添加表单,应该使用项目管理器的“文档”
选项卡。
【答案】D
13.(2004 年 9 月选择题第 32 题)
让控件获得焦点,使其成为活动对象的方法是________。
A.Show B.Release C.SetFocus D.GotFocus
【分析】表单及其控件中常用事件中的 SetFocus 让控件获得焦点,使其成为活动对象。
【答案】C
14.(2004 年 9 月选择题第 33 题)
下面关于表单若干常用事件的描述中,正确的是________。
A.释放表单时,UnLoad 事件在 Destroy 事件之前引发
B.运行表单时,Init 事件在 Load 事件之前引发
C.单击表单的标题栏,引发表单的 Click 事件
D.上面的说法都不对
【分析】表单及其控件常用事件中,UnLoad 事件在表单对象释放时引发,是表单对象释
放时最后一个要引发的事件。Destroy 在对象释放时引发,UnLoad 事件在 Destroy 事件之后
引发。Init 事件在对象建立时引发,Load 事件在表单对象建立之前引发,Init 事件在 Load 事
件之后引发。单击表单的空白处,引发表单的 Click 事件。
【答案】D
15.(2004 年 9 月选择题第 34 题)
如果文本框的 InputMask 属性值是#99999,允许在文本框中输入的是________。
A.+12345 B.abc123 C.$12345 D.abcdef
【分析】文本框的 InputMask 属性指定在一个文本框中如何输入和显示数据。根据其模式
符的功能可知,# 允许输入数字、空格和正负号,9 允许输入数字和正负号。
【答案】A
16.(2004 年 9 月填空题第 7 题)
− 199 −
等级考试学习笔记——二级 Visual FoxPro

在 Visual FoxPro 中释放和关闭表单的方法是________。


【分析】从表单的常用事件与方法中可以知道,释放和关闭表单的方法是 Release。
【答案】Release 方法
17.(2004 年 9 月填空题第 8 题)
为了从用户菜单返回到默认的系统菜单应该使用命令 SET________ TO DEFAULT。
【分析】SET SYSMENU TO DEFAULT 将系统菜单恢复为缺省配置,即从用户菜单返回
到默认的系统菜单。
【答案】SYSMENU
18.(2004 年 9 月填空题第 9 题)
在 Visual FoxPro 的表单设计中,为表格控件指定数据源的属性是________。
【分析】在表单的表格控件中,RecordSource 属性指定表格数据源。
【答案】RecordSource
19.(2004 年 9 月填空题第 12 题)
在将设计好的表单存盘时,系统生成扩展名分别是 scx 和________的两个文件。
【分析】在将设计好的表单存盘时,系统生成扩展名分别是 scx 和 sct 的两个文件
【答案】sct
20.(2004 年 9 月填空题第 13 题)
在 Visual FoxPro 中为表单指定标题的属性是________。
【分析】根据表单常用的属性可以知道 Caption 属性为表单指定标题。
【答案】Caption
21.(2004 年 9 月填空题第 14 题)
在 Visual FoxPro 中表单的 Load 事件发生在 Init 事件之________。
【分析】Init 事件在对象建立时引发,Load 事件在表单对象建立之前引发,Load 事件发
生在 Init 事件之前。
【答案】前

本章总结
难点重点
1.Visual FoxPro 6.0 的项目管理器、向导、设计器、生成器的功能及它们的使用方法。
2.表单设计:表单中控件的添加和编辑,如何设计表单上的各种控件,常用的表单控件。
3.菜单设计器的使用,菜单有关设置。
误点剖析
1.在项目管理器中新建的文件自动包含在该项目文件中,而利用“文件”菜单中的“新
建”命令创建的文件不属于任何项目文件。
2.在 Visual FoxPro 中,新建或添加一个文件到项目中并不意味着该文件已成为项目的
一部分。
事实上,每一个文件都以独立文件的形式存在。通常说某个项目包含某个文件只是表示
该文件与项目建立了一种关联。

− 200 −
第 8 章 项目管理器、表单和菜单设计

这样做有两大优点:一个文件可以包含在多个项目中,项目仅仅需要知道所包含的文件
在哪里,而不需关心所包含文件的其他信息;如果一个文件同时被多个项目所包含,那么在
修改该文件时,修改的结果将同时在所有相关的项目中得以体现,这样就避免了在多个项目
中分别修改文件,从而可能导致修改不一致的后果。

单元练习

1.设计菜单要完成的最终操作是________。
A.创建主菜单及子菜单 B.指定个菜单任务
C.浏览菜单 D.生成菜单程序
2.要创建快速菜单,应当________。
A.用热键 B.用快捷键 C.用事件 D.用菜单
3.在一个系统中,使多个对象协调工作,可以使用________。
A.工具栏 B.菜单栏 C.单选按钮组 D.命令按钮组
4.将一个预览成功的菜单存盘,再运行该菜单,却不能执行,这是因为________。
A.没有放到项目中 B.没有生成
C.要用命令方式 D.要编入程序
5.菜单栏是用于放置菜单________。
6.设计系统菜单,可以通过________完成。
7.菜单标题是________。
8.菜单的任务可以是________、________、________。
9.菜单的调用是通过________完成的。

习题答案
1.D
2.D
3.B
4.B
5.多个菜单项
6.快速菜单
7.各个菜单项的名称
8.子菜单 命令程序 过程
9.DO <菜单名>命令

− 201 −
等级考试学习笔记——二级 Visual FoxPro

第 9 章 报表设计和应用程序向导
报表指用数据表中的数据制作出的打印输出表格,是日常工作中常用的打印文档,它为
显示并总结数据提供了灵活的途径。报表设计器是 VFP 提供的强大功能之一。本章主要介绍
了报表设计器以及应用程序生成器的使用。

知识结构图

大纲中的知识点

9.1 使用报表设计器
报表指用数据表中的数据制作出的打印输出表格。它包括两部分内容:数据源和布局。
数据源是报表的数据来源,它通常是数据库中的表或自由表,也可以是视图、查询或临时表。
视图和查询对数据库中的数据进行筛选、排序、分组,在定义了一个表、一个视图或查询之
后,便可以创建报表。布局定义了报表的打印格式。报表是最常用的查看数据的方法,也是
VFP 数据操作的最终结果。报表设计器是 VFP 提供的强大功能之一,包括多种方式显示表的
内容,且不需要进行任何编程。
问题 1:如何生成快速报表?
利用报表设计工具的快速报表功能, 可以很容易地创建一个以.frx 为扩展名的 VFP 报表。
在报表完成以后马上就可以运行。但系统提供的“快速报表”并不是一个独立的设计工具,
而是报表设计器中的一个功能。在启动“快速报表”之前,应该首先启动报表设计器,其方
法有如下几种。
1.利用“文件”菜单或工具栏的“新建”按钮,从“文件类型”中选择“报表” ,单击
− 202 −
第 9 章 报表设计和应用程序向导

“新建文件”即可启动报表设计器;
2.在项目管理器的“文档”选项卡中,选中“报表” ,单击“新建”按钮,在弹出的“新
建”对话框中,单击“新建报表”按钮;
3.用命令方式启动报表设计器,其格式是:CREATE REPORT[<报表文件名>]。
启动后的报表设计器窗口显示用户创建的空报表(即一个简单的快速报表),此时系统
菜单增加了一项“报表” ,并且“显示”菜单项和“格式”菜单项也随着增加相应的项目。
在系统菜单中选择“报表”菜单项,可以看到在菜单中有一个“快速报表”选项。选中
该项后将弹出“快速报表”对话框,用户可以根据自己的需要做各种设置,如:报表格式排
列、报表字段选择、复选框设置等,设置完成后,就生成了一个合乎需要的快速报表了。
问题 2:如何修改报表布局?
报表布局以带区的形式将报表分为几部分。在报表设计器中,报表包括若干带区:标题、
页标头、细节和页注脚等。带区名称标识在带区的标识栏上。
带区的主要作用是控制数据在页面上的打印位置。在打印或预览报表时,系统会以不同
的方式处理各个带区的数据。例如,对于“页标头”带区,系统将在每一页上依次打印该带
区所包含的内容;而对于“标题”带区,则只是在报表开始时依次打印该带区的内容。在每
一个报表中都可以添加或删除若干个带区。
报表的一些常用带区以及使用情况如下。
标题—每张报表开头打印一次或单独一页
页标头—每个页面打印一次
细节—每条记录打印一次
页注脚—每个页面下面打印一次
总结—每张报表最后一页打印或一次单独占用一页
组标头—数据分组时每组打印一次
组注脚—数据分组时每组打印一次
列标头—在分栏报表中每列打印一次
列注脚—在分栏报表中每列打印一次
对报表布局的修改其实就是对带区的调整和修改,带区的调整可以先使用鼠标进行“粗”
调整,再进行微调(在带区标识栏上,单击鼠标左键) ,只需在弹出的窗口中输入相应的数据
即可。
问题 3:如何设计分组报表?
一个报表可以设置一个或多个数据分组,组的分隔基于分组表达式。这个表达式通常
由一个或多个字段组成。对报表进行数据分组时,报表会自动包含“组标头”和“组注脚”
带区。
1.如何设置报表的记录顺序?
如果数据源是表,记录的物理顺序可能不适合于分组。报表布局实际上并不排序数据,
只是按其在数据源中存在的顺序处理数据。为了使数据源适合于分组处理,必须对数据源进
行适当的索引或排序。通过为表设置索引,或者在数据环境中使用视图、查询作为数据源才
能达到合理分组显示记录的目的。因此,可以事先在表设计器中对表建立索引,一个表可以
有多个索引;可以在数据环境之外设置当前索引,如在命令窗口执行 SET ORDER TO <索引
− 203 −
等级考试学习笔记——二级 Visual FoxPro

关键字>命令;另外在数据环境设计器中也可以指定当前索引。在数据环境中设置索引的方
法如下。
(1)从“显示”菜单中选择“数据环境”,或者单击“报表设计器”工具栏上的“数据
环境”按钮,也可以右击报表设计器,在弹出的快捷菜单上选择“数据环境” 。系统将打开数
据环境设计器。
(2)在数据环境设计器中右击鼠标,从快捷菜单中选择“属性” ,打开“属性”窗口。
(3)在“属性”窗口中选择对象框中的“Cursor1” 。
(4)选择“数据”选项卡,选定“Order”属性,输入索引名,或者在索引列表中选定一
个索引。
2.如何设计单级分组报表?
一个单组报表可以基于选择表达式进行一级数据分组。分组的操作方法如下。
(1)从“报表”菜单中选择“数据分组” ,或者单击“报表设计器”工具栏上的“数据
分组”按钮,也可以右击报表设计器,从弹出的快捷菜单上选择“数据分组” 。系统将
显示“数据分组”对话框。
(2)在第一个“分组表达式”框内键入分组表达式,或者选择“对话”按钮,在“表达
式生成器”对话框中创建表达式。
(3)在“组属性”区域选定需要的属性。
组属性主要用于指定如何分页。在“组属性”区域中有 4 个复选框,根据不同的报表类
型,复选框的可用状态不同。
l “每组从新的一列上开始”复选框:表示当组的内容改变时,是否打印到下一列上。
l “每组从新的一页上开始”复选框:表示当组的内容改变时,是否打印到下一页上。
l “每组的页号重新从 1 开始”复选框:表示当组的内容改变时,是否在新的一页上
开始打印,并把页号重新设置为 1。
l “每页都打印组标头”复选框:表示当组的内容分布在多页上时,是否每一页都打
印组标头。
有时因页面剩余的行数较少而在页面上只打印了组标头而未打印组内容,就会在页面上
出现孤立的组标头,在报表设计时应当设置组标头距页面底部的最小距离,以避免出现这样
的情况。可以在“小于右值时组从新的一页开始”微调器中输入一个数值,该数值就是在打
印组标头时组标头距页面底部的最小距离,应当包括组标头和至少一行记录及页脚的距离。
(4)选择“确定”按钮。
分组之后,报表布局就有了组标头和组注脚带区,可以向其中放置任意需要的控件。通
常,把分组所用的域控件从“细节”带区复制或移动到“组标头”带区,也可以添加线条、
矩形、圆角矩形等希望出现在组内第一条记录之前的标签。组注脚通常包含组总计和其他组
总结性信息。
3.如何设计多级数据分组报表?
Visual FoxPro 在报表内最多允许有 20 级数据分组,嵌套分组有助于组织不同层次的数
据和总计表达式,但在实际应用中往往只用到 3 级分组。在设计多级数据分组报表时,需要
注意分组的级与多重索引的关系。
(1)多个数据分组基于多重索引
− 204 −
第 9 章 报表设计和应用程序向导

多级数据分组报表的数据源必须可以分出级来。
(2)分组层次
一个数据分组对应于一组“组标头”和“组注脚”带区。数据分组将按照在“报表设计
器”中创建的顺序在报表中编号,编号越大的数据分组离“细节”带区越近。也就是说,分
组的级别越细,分组的编号越大。
在设计报表过程中,可以更改组的顺序、重复组标头、更改或删除组带区。
(3)设计多级数据分组报表具体步骤如下。
在打开的“数据分组”对话框中,输入或生成第一个“分组表达式”,接着输入或生成
下一个“分组表达式”即可。单击“插入”按钮可在当前分组表达式之前插入一个分组表达
式。对于每一个分组表达式, “数据分组”对话框下方的组属性可以分别设置。最后单击“确
定”按钮。系统按照分组表达式创建的顺序在“数据分组”列表中编号。在“报表设计器”
内,组带区的名字包含该组的序号和一个缩短了的分组表达式。最大标号的组标头和注脚带
区出现在离“细节”带区最近的地方。
(4)更改分组
定义了报表中的组之后,再次从“报表”菜单中选择“数据分组” ,或者单击“报表设
计器”工具栏上的“数据分组”按钮,或者右击报表设计器,从快捷菜单上选择“数据分组”,
系统将重新打开“数据分组”对话框,在其中显示原来保存的组定义,可以更改分组的表达
式和组打印选项、通过组左侧的移动按钮更改组的次序、使用“删除”按钮删除组带区等。
当移动组的位置重新排序时,组带区中定义的所有控件都将自动移到新的位置。对组重
新排序并不更改以前定义的控件。
注意:必须重新指定当前索引才能够正确组织各组的数据。组被删除之后,该组带区将
从布局中删除。如果该组带区中包含有控件,将提示同时删除控件。
问题 4:如何设计多栏报表?
多栏报表是一种分为多个栏目打印输出的报表。如果打印的内容较少,横向只占用部分
页面,设计成多栏报表比较合适。
1.如何设置“列标头”和“列注脚”带区?
从“文件”菜单中选择“页面设置”命令,在弹出对话框的“列”区域中把“列数”微
调器的值调整为栏目数。在报表设计器中将添加一个“列标头”带区和一个“列注脚”
带区,同时“细节”带区也相应缩短。
注意:这里所指的“列”是页面横向打印的记录数目,不是单条记录的字段数目。“报
表设计器”没有显示这种设置,它只显示了页边距内的区域,在默认的页面中,整条记录为
一列。因此,如果报表中有多列,可以调整列的宽度和间隔。当更改左边距时,列宽将自动
更改以显示出新的页边距。
2.如何添加控件?
在向多栏报表添加控件时,应注意不要超过报表设计器中带区的宽度,否则可能使打印
的内容相互重叠。
3.如何设置页面?
在打印报表时,对“细节”带区中的内容系统默认为“自上向下”的打印顺序,这适合
于除多栏报表以外的其他报表。对于多栏报表而言,这种打印顺序只能靠左边距打印一个栏
− 205 −
等级考试学习笔记——二级 Visual FoxPro

目,页面上其他栏目空白。为了在页面上真正打印出多个栏目来,需要把打印顺序设置为“自
左向右”打印。在“页面设置”对话框中单击右面的“自左向右”打印顺序按钮即可。

9.2 应用程序生成器
Visual FoxPro 6.0 改进了应用程序生成器,提供了开发应用程序需要的一般功能。开发
者利用应用程序向导能够生成一个项目和一个 Visual FoxPro 应用程序框架,利用应用程序生
成器可以添加已生成的数据库、表、表单和报表等组件。
问题 1:如何使用程序生成向导?
在前面章节中已讲解过如何使用应用程序向导创建项目,在此不赘述了,主要介绍一下
应用程序框架及应用程序生成器的功能。
1.应用程序框架包含哪些功能?
应用程序框架中包含了所有必需的以及许多可选的元素,具有极好的灵活性和创建最佳
应用程序的能力,目的是使所开发的应用程序更有效,更友好。
在运行了“应用程序向导”后,得到一个包含一些文件的已打开项目,这些文件组成了
应用程序框架。应用程序框架可以自动完成如下的任务。
(1)提供启动和清理程序,其中包括负责保存和恢复环境状态的程序。
(2)显示菜单和工具栏。
(3)帮助开发者确定应用程序的功能、用户输入数据的方式、应用程序的外观以及其他
强大功能。
2.应用程序生成器的功能有哪些?
通过“应用程序向导”创建并在“项目管理器”中打开一个项目的同时打开应用程序生
成器,生成器与应用程序框架结合在一起提供以下功能。
(1)添加、编辑或删除与应用程序相关的组件。
(2)设定表单和报表的外观样式。
(3)加入常用的应用程序元素,包括启动画面、 “关于”对话框、“收藏夹”菜单、“用
户登录”对话框和“标准”工具栏。
(4)提供应用程序的作者和版本等信息。

例题讲解

例题 1 报表设计器中不包含在基本带区的有________。
A.标题 B.页标头 C.页注脚 D.细节
【分析】报表设计器窗口刚打开时,窗内已含有页标头、细节和页注脚 3 个基本带区。
【答案】A
例题 2 报表控件有________。
A.标签 B.预览 C.数据源 D.布局
【分析】选项 C 和 D 组成报表。报表控件中最常见的是标签。此题很简单,只要考生了
解了报表控件有多少种类就可以了。
− 206 −
第 9 章 报表设计和应用程序向导

【答案】A
例题 3 报表标题要通过________控件定义。
【分析】同上题。
【答案】标签
例题 4 创建报表有________种方法。
【答案】3
例题 5 报表中是否允许加入图片?________。
【答案】允许
例题 6 如果已经设定了对报表分组,报表中将包含________和________带区。
【答案】组标头 组注脚
例题 7 报表可以在打印机上输出,也可以通过________浏览。
【答案】计算机屏幕

综合实例

1.(2004 年 4 月选择题第 21 题)
根据“职工”项目文件生成 emp_sys.exe 应用程序的命令是________。
A.BUILD EXE emp_sys FROM 职工
B.BUILD APP emp_sys.exe FROM 职工
C.LINK EXE emp_sys FROM 职工
D.LINK APP emp_sys FROM 职工
【分析】根据项目文件生成应用程序所使用的命令是 BUILD EXE。
【答案】A
2.(2004 年 4 月选择题第 24 题)
为了在报表中打印当前时间,这时应该插入一个________。
A.表达式控件 B.域控件
C.标签控件 D.文件控件
【分析】报表中的域控件用于打印表或视图中的字段、变量和表达式的计算结果。
【答案】B
3.(2004 年 9 月选择题第 8 题)
使用调试器调试第(7)小题(见附录:2004 年 9 月笔试试卷)的程序,如果想在过程
SWAP 执行时观察 X1 的值,可以在其中安置一条命令,程序执行到该命令时,系统将计算
X1 的值,并将结果在调试输出窗口中显示,这条命令的正确写法是________。
A.DEBUGOUT X1 B.DEBUG X1
C.OUT X1 D.TEST X1
【分析】可以在模块程序中安置一些 DEBUGOUT 命令(DEBUGOUT <表达式>),当模
块程序调试执行到此命令时,会计算出表达式的值,并将计算结果送入调试输出窗口。
【答案】A
4.(2004 年 9 月选择题第 31 题)
− 207 −
等级考试学习笔记——二级 Visual FoxPro

使用“调试器”调试程序时,用于显示正在调试的程序文件的窗口是________。
A.局部窗口 B.跟踪窗口
C.调用堆栈窗口 D.监视窗口
【分析】局部窗口用于显示模块程序中的内存变量,显示它们的名称、当前取值和类型。
跟踪窗口用于显示正在调试执行的程序文件。调用堆栈窗口用于显示当前处于执行状态的程
序、过程或方法过程。监视窗口用于监视指定表达式在程序调试执行过程中的取值变化情况。
【答案】B
5.(2004 年 9 月选择题第 35 题)
连编应用程序不能生成的文件是________。
A.app 文件 B.exe 文件 C.dll 文件 D.prg 文件
【分析】连编应用程序结果有两种形式:应用程序文件(.app)和可执行文件(.exe) 。另
外连编应用程序还可以创建一个具有.dll 文件扩展名的动态链接库。
【答案】D
6.(2004 年 9 月填空题第 5 题)
在 Visual FoxPro 中,BUILD________命令连编生成的程序可以脱离开 Visual FoxPro 在
Windows 环境下运行。
【分析】连编应用程序的命令是 BUILD APP 或 BUILD EXE,BUILD APP 需要先启动
Visual FoxPro,而 BUILD EXE 既可在 Visual FoxPro 中运行,也可以在 Windows 中运行。
【答案】EXE

本章总结
难点重点
1.报表的设计,如何运用设计器生成报表。
2.如何运用应用程序向导生成应用程序。
误点剖析
1.在更改分组报表时,必须重新指定当前索引才能够正确组织各组的数据。组被删除
了之后,该组带区将从布局中删除。如果该组带区中包含有控件,将提示同时删除控件。
2.设计多栏报表时,需要设置“列标头”和“列注脚”带区。这里所指的“列”是页
面横向打印的记录数目,不是单条记录的字段数目。“报表设计器”没有显示这种设置。它只
显示了页边距内的区域,在默认的页面中,整条记录为一列。因此,如果报表中有多列,可
以调整列的宽度和间隔。当更改左边距时,列宽将自动更改以显示出新的页边距。

单元练习

1.如果将一个表单文件设置为“排除”状态,那么它________。
A.不参加连编 B.排除在应用程序外
C.本次不编译 D.不显示编译错误
2.不能够作为应用程序系统中的主要程序的是________。

− 208 −
第 9 章 报表设计和应用程序向导

A.表单 B.菜单 C.数据表 D.程序


3.如果将一个数据表设置为“包含”状态,那么系统连编后,该数据表将________。
A.成为自由表 B.包含在数据库之中
C.可以随时编辑修改 D.不能编辑修改
4.一个较为完善的应用程序系统包含_______、_______、_______、_______等部分。
5.系统开发一般过程有_______个阶段。

习题答案
1.A
2.C
3.D
4.数据库 表单 菜单 报表
5.4

− 209 −
等级考试学习笔记——二级 Visual FoxPro

附录 1 全真预测试题(一)

一、选择题

下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将正确选项涂写在答题


卡相应位置,答在试卷上不得分。
1.关系数据库管理系统的 3 种基本关系运算不包括________。
A.比较 B.选择 C.连接 D.投影
2.CLEAR MEMORY 命令的功能是________。
A.清除整个屏幕 B.清除内存中的所有信息
C.清除所有内存变量 D.清除所有变量
3.下面列出的扩展名中,数据库表的扩展名是________。
A.idx B.dbf C.frm D.prg
4.当前表中有 4 个数值型字段:高等数学、英语、计算机网络和总分。其中高等数学、
英语、计算机网络的成绩均已录入,总分字段为空。要将所有学生的总分自动计算出来并填
入总分字段中,应使用命令________。
A.REPL 总分 WITH 高等数学+英语+计算机网络
B.REPL 总分 WITH 高等数学,英语,计算机网络
C.REPL 总分 WITH 高等数学+英语+计算机网络 ALL
D.REPL 总分 WITH 高等数学+英语+计算机网络 FOR ALL
5.创建类的方法有________。
A.1 种 B.5 种 C.10 种 D.2 种
6.关闭多区的表文件,并释放所有的内存变量,命令应为________。
A.CLEAR ALL 或 CLOSE B.CLEAR ALL 或 CLOSE ALL
C.CLEAR 或 CLOSE ALL D.CLEAR 或 CLOSE
7.顺序执行下列命令:
x=100
y=8
x=x+y
?x,x=x+y
最后一条命令的提示结果为________。
A.100 .F. B.100 .T. C.108 .T. D.108 .F.
8.对班级表和学生表进行查询,下列语句正确的是________。
A.SELECT A.班级号,A.班主任,B.学生号,B.学生姓名;
FROM 班级 A*= 学生 B;
ON A.班级号=B.班级号
− 210 −
附录 1 全真预测试题(一)

B.SELECT A.班级号,A.班主任,B.学生号,B.学生姓名;
FROM 班级 A LEFT 学生 B;
WHERE A.班级号=B.班级号
C.SELECT A.班级号,A.班主任,B.学生号,B.学生姓名;
FROM 班级 A LEFT 学生 B;
ON A.班级号=B.班级号
D.SELECT A.班级号,A.班主任,B.学生号,B.学生姓名;
FROM 班级 LEFT 学生 B;
ON 班级号=班级号
9.顺序执行下列命令后,最后一条命令显示结果是________。
USE ABC
GO 5
SKIP –2
?RECNO()
A.3 B.4 C.5 D.7
10.下列 4 个表达式中,错误的是________。
A."姓名:"+姓名 B."性别:"+性别
C."工资:"−工资 D.姓名:"是工程师"
11.已知当前表中有 40 条记录,当前记录为第 4 条记录,如果执行命令 SKIP 3 后,则
当前的记录号为________。
A.3 B.4 C.6 D.7
12.存储在计算机内有结构的相关数据的集合称为________。
A.数据库 B.数据库系统
C.数据库管理系统 D.数据结构
13.数据表中有 36 个记录,如果当前记录为第 30 条记录,把记录指针移到第一个记录,
执行测试当前记录号函数 RECNO()后的值是________。
A.35 B.36 C.1 D.0
14.职工数据库中有 D 型字段“出生日期”,要计算职工的整数实足年龄,应用命令____。
A.? DATE()-出生日期/365
B.?(DATE()-出生日期)/365
C.?INT((DATE()-出生日期)/365)
D.?ROUND((DATE()-出生日期)/365)
15.每个对象都可以对一个被称为事件的动作进行识别和响应。下面对于事件的描述中,
错误的是________。
A.事件是一种预先定义好的特定的动作,由用户或系统激活
B.VFP 基类的事件集合是由系统预先定义好的,是惟一的
C.VFP 基类的事件也可以由用户创建
D.可以激活事件的用户动作有按键、单击鼠标、移动鼠标等
16.“STORE 1 TO A,B,C,D”的结果是________。
− 211 −
等级考试学习笔记——二级 Visual FoxPro

A.使 A,B,C,D 四个变量的值都为 1


B.只使 A 的值为 1,其他变量的值为 0
C.只使 A 的值位,其他变量的值为.F.
D.只使 A 的值为.F.,其他变量的值为 1
17.有关@…SAY…GET…语句中的校验字句,叙述正确的是________。
A.RANGE 字句是非强制校验,如果输入的数据超过或等于给定上、下限,则提示
出错
B.VALID 强制校验,如果输入的数据使条件表达式为真或数值表达式的值不等于
零,则报警并提示出错
C.RANGE 非强制校验,只有当编辑的变量发生了变化,并按了回车键才予以校验,
在给定的初值超过上限和下限时,如果是用光标键移出当前编辑区,则不会提
示无效
D.VALID 强制校验,在初值使条件表达式为假或使数值表达式为零时,只要按下
回车键,就实施校验,并提示正确的数据范围
18.一个表文件中多个备注型(MEMO)字段的内容存放在________。
A.这个表文件中 B.一个备注文件中
C.多个备注文件中 D.一个文本文件中
19.在当前表中,查找第 2 个女同学的记录,应使用命令________。
A.LOCATE FOR 性别="女" NEXT 2 B.LOCATE FOR 性别="女"
C.LOCATE FOR 性别="女" CONTINUE D.LOCATE FOR 性别="女"NEXT 3
20.依次执行以下 6 条命令:
SELECT 1
USE F1
SELECT 2
USE F2
SELECT 3
USE F3
现在要给 F2 追加记录,但又不改变当前表的打开状态,应该使用命令序列________。
A.GO F2 B.GO 2 C.SELECT 2 D.USE F2
APPEND APPEND APPEND APPEND
21.有如下 SQL 语句:
CREATE VIEW stock_view AS SELECT 股票名称 AS 名称,单价 FROM stock
执行该语句后产生的视图含有的字段名是________。
A.股票名称、单价 B.名称、单价
C.名称、单价、交易所 D.股票名称、单价、交易所
22.假定已经生成了名为 mymenu 的菜单文件,执行该菜单文件的命令是________。
A.DO mymenu B.DO mymenu.mpr
C.DO mymenu.pjx D.DO mymenu.mnx
23.有关参数传递叙述正确的是________。
− 212 −
附录 1 全真预测试题(一)

A.参数接收时与发送的顺序相同
B.接收参数的个数必须少于发送参数的个数
C.参数接收时与发送的顺序相反
D.接收参数的个数必须正好等于发送参数的个数
24.有关自定义函数的叙述,正确的是________。
A.自定义函数的调用与标准函数不一样,要用 DO 命令
B.自定义函数的最后结束语句可以是 RETURN 或 RETRY
C.自定义函数的 RETURN 语句必须送返一个值,这个值作为函数返回值
D.调用时,自定义函数名后的括号中一定要写上形式参数
25.不可以作为文本框控件数据来源的是________。
A.数值型字段 B.内存变量
C.字符型字段 D.备注型字段
26.对学历为大本的职工按工资由高到低排序,工资相同的职工按年龄由大到小排序,
应使用的命令是________。
A.SORT TO XL ON 工资/A,出生日期/D FOR 学历="大本"
B.SORT TO XL ON 工资/D,出生日期/A FOR 学历="大本"
C.SORT TO XL ON 工资/A,出生日期/A FOR 学历="大本"
D.SORT TO XL ON 工资/D,出生日期/D FOR 学历="大本"
27.在用命令调用菜单时,需要用________来传递参数。
A.WITH B.WHERE C.FOR D.AND
28.关系数据库中的关键字段是指________。
A.能惟一决定关系的字段 B.不能改动的专用保留字段
C.关键的很重要的字段 D.能惟一标识元组的属性或属性集合
29.要求数据库文件某数值型字段的整数是 4 位,小数是 2 位,其值可能为负数,该字
段的宽度应定义为________。
A.8 位 B.7 位 C.6 位 D.4 位
30.表达式 CTOD('99-12-12')-{99-12-07}的结果是________。
A.字符 5 B.数值 5 C.数值 150 D.出错
31.要使职工数据表中不出现同名职工的记录,在数据库中需要建立________。
A.字段有效性限制 B.属性设置
C.记录有效性限制 D.设置触发器
32.在一个关系中如果有这样一个属性存在,它的值能惟一地标识关系的每一个元组,
称这个属性为________。
A.关键字 B.数据项 C.主属性 D.主属性值
33.下面有关命令 SET DEVICE TO PRINTER 的叙述正确的是________。
A.该命令的功能是开关打印设备
B.该命令的功能是将打印机联机
C.该命令的功能是设置@…SAY 命令的输出定向为打印机
D.该命令的功能是设置“?”或“??”命令的输出定向为打印机
− 213 −
等级考试学习笔记——二级 Visual FoxPro

34.在学生表单中,列表框(ListBox)控件的 RowSourceType 属性值为 3,则 RowSource


属性为________。
A.“1,2,3,4” B.“SELECT * FROM XS INTO CURSOR mylist”
C.“myQuery.qpr” D.“xs.姓名,学号”
35.逻辑判断式 ?ROUND(123.456,0)<INT(123.456)的结果应是________。
A..F. B..T. C.T D.F

二、填空题

1.数据库系统通常由 、数据操纵语言、管理和控制程序组成。
2.定义表结构时,要定义表中有多少个字段,同时还要定义每个字段的 、
________、 等。
3.视图中的数据取自数据库中的 或 。
4.由多个本地表创建的视图,应当称为 。
5.表格控件使用的数据资源大多数来自 和 。
6.在关系对应的二维表中,行对应 ,列对应 。
7.字段名必须是这样一个字符串:以字母或汉字开头,由字母、汉字、数字、下划线
等组成,其长度不超过 个字符。
8.报表由 和 两个基本部分组成。
9.在 Visual FoxPro 中,项目文件的扩展名是 。
10.菜单的任务可以是 、 、 。

参考答案

一、选择题

1.A 2.C 3.B 4.C 5.D


6.B 7.D 8.C 9.A 10.C
11.D 12.A 13.C 14.C 15.C
16.A 17.C 18.B 19.C 20.C
21.B 22.B 23.A 24.C 25.D
26.B 27.A 28.D 29.A 30.B
31.D 32.A 33.C 34.B 35.A

二、填空题

1.数据描述语言
2.名称 类型 宽度
3.表 视图
4.本地视图
5.父表 子表
− 214 −
附录 1 全真预测试题(一)

6.元组 域
7.10
8.数据源 布局
9.pjx 或 .pjx
10.子菜单 命令 程序(过程)

− 215 −
等级考试学习笔记——二级 Visual FoxPro

附录 2 全真预测试题(二)

一、选择题

下列各题 A、B、C、D 四个选项中,只有一个选择是正确的,请将正确选项涂写在答题


卡相应位置上,答在试卷上不得分。
1.关系数据库管理系统所管理的关系是________。
A.一个 dbf 文件 B.若干个二维表
C.一个 dbc 文件 D.若干个 dbc 文件
2.不允许记录中出现重复索引值的索引是________。
A.主索引 B.主索引、候选索引、普遍索引
C.主索引和候选索引 D.主索引、候选索引和惟一索引
3.要控制两个表中数据的完整性和一致性可以设置“参照完整性”,要求这两个
表________。
A.是同一个数据库中的两个表 B.不同数据库中的两个表
C.两个自由表 D 一个是数据库表另一个是自由表
4.在 Visual FoxPro 中,可以对字段设置默认值的表________。
A.必须是数据库表 B.必须是自由表
C.自由表或数据库表 D.不能设置字段的默认值
5.Visual FoxPro 关系数据库管理系统能够实现的三种基本关系运算是________。
A.索引、排序、查找 B.建库、录入、排序
C.选择、投影、联接 D.显示、统计、复制
6.打开 Visual FoxPro“项目管理器”的“文档” (Docs)选项卡,其中包含________。
A.表单(Form)文件 B.报表(Report)文件
C.标签(Label)文件 D.以上三种文件
7.可以链接或嵌入 OLE 对象的字段类型是________。
A.备注型字段 B.通用型和备注型字段
C.通用型字段 D.任何类型的字段
8.下面关于属性、方法和事件的叙述中,错误的是________。
A.属性用于描述对象的状态,方法用于表示对象的行为
B.基于同一个类产生的两个对象可以分别设置自己的属性值
C.事件代码也可以像方法一样被显示调用
D.在新建一个表单时,可以添加新的属性、方法和事件
9.查询设计器和视图设计器的主要不同表现在于________。
A.查询设计器有“更新条件”选项卡,没有“查询去向”选项
B.查询设计器没有“更新条件”选项卡,有“查询去向”选项
− 216 −
附录 2 全真预测试题(二)

C.视图设计器没有“更新条件”选项卡,有“查询去向”选项
D.视图设计器有“更新条件”选项上,也有“查询去向”选项
10.在 Visual FoxPro 中,表单(Form)是指________。
A.数据库中各个表的清单 B.一个表中各个记录的清单
C.数据库查询的列表 D.窗口界面
11.在 Visual FoxPro 中,打开数据库的命令是________。
A.OREN DATABASE <数据库名> B.USE <数据库名>
C.USE DATABASE <数据库名> D.OPEN <数据库名>
12.连续执行以下命令之后,最后一条命令的输出结果是________。
SET EXACT OFF
X="A"
?IIF("A"=X,X-"BCD",X+"BCD")
A.A B.BCD C.ABCD D.ABCD
13.在以下 4 组函数运算中,结果相同的是________。
A.LEFT("Visual FoxPro",6)与 SUBSTR("Visual FoxPro",1,6)
B.YEAR(DATE())与 SUBSTR(DTOC(DATE()),7,2)
C.VARTYPE("36-5*4")与 VARTYPE(36-5*4)
D.假定 A="this ", B="is a string", A-B 与 A+B
14.在 Visual Foxpro 中,用于建立或修改过程文件的命令是________。
A.MODIFY <文件名> B.MODIFY COMMAND <文件名>
C.MODIFY PROCEDURE <文件名> D.B 和 C 都对
15.在 SQL 查询时,使用 WHERE 子句指出的是________。
A.查询目标 B.查询结果 C.查询条件 D.查询视图
16.在下面关于面向对象数据库的叙述中,错误的是________。
A.每个对象在系统中都有惟一的对象标识
B.事件作用于对象,对象识别事件并作出相应反应
C.一个子类能够继承其所有父类的属性和方法
D.一个父类包括其所有子类的属性和方法
17.结构化程序设计的三种基本逻辑结构是________。
A.选择结构、循环结构和嵌套结构
B.顺序结构、选择结构和循环结构
C.选择结构、循环结构和模块结构
D.顺序结构、递归结构和循环结构
18.使用命令 DECLARE mm(2,3)定义的数组,包含的数组元素(下标变量)的个数
为________。
A.2 个 B.3 个 C.5 个 D.6 个
19.使用 Visual FoxPro 的菜单设计器时,选中菜单项之后,如果要设计它的子菜单,应
在 Result 中选择________。
A.Pad Name B.Submenu C.Command D.Procedure
− 217 −
等级考试学习笔记——二级 Visual FoxPro

20.Visual FoxPro 的报表文件.frx 中保存的是________。


A.打印报表的预览格式 B.打印报表本身
C.报表的格式和数据 D.报表设计格式的定义
21.在 Visual FoxPro 中进行参照完整性设置时,要想设置成:当更改父表中的主关键字
段或候选关键字段时,自动更改所有相关子表记录中的对应值。应选择________。
A.限制 B.忽略 C.级联 D.级联或限制
22.在 Visual FoxPro 的数据工作期窗口,使用 SET RELATION 命令可以建立两个表之
间的关联,这种关联是________。
A.永久性关联 B.永久性关联或临时性关联
C.临时性关联 D.永久性关联和临时性关联
23.清除主窗口屏幕的命令是________。
A.CLEAR B.CLEAR ALL
C.CLEAR SCREEN D.CLEAR WINDOWS
24.在创建快速报表时,基本带区包括________。
A.标题、细节和总结 B.页标头、细节和页注脚
C.组标头、细节和组注脚 D.报表标题、细节和页注脚
25.在下面的 Visual FoxPro 表达式中,不正确的是________。
A.{^2002-05-01 10:10:10 AM}-10 B.{^2002-05-01}-DATE()
C.{^2002-05-01}+DATE() D.{^2002-05-01}+[1000]
26.如果要在屏幕上直接看到查询结果,“查询去向”应该选择________。
A.屏幕 B.浏览 C.临时表或屏幕 D.浏览或屏幕
27.使用菜单操作方法打开一个在当前目录下已经存在的查询文件 zgjk.qpr 后,在命令
窗口生成的命令是________。
A.OPEN QUERY zgjk.qpr B.MODIFY QUERY zgjk.qpr
C.DO QUERY zgjk.qpr D.CREATE QUERY zgjk.qpr
28.下面关于 Visual FoxPro 数组的叙述中,错误的是________。
A.用 DIMENSION 和 DECLARE 都可以定义数组
B.Visual FoxPro 只支持一维数组和二维数组
C.一个数组中各个数组元素必须是同一种数据类型
D.新定义数组的各个数组元素初值为.F.
29.在下列函数中,函数值为数值的是________。
A.AT('人民','中华人民共和国')
B.CTOD('01/01/96')
C.BOF()
D.SUBSTR(DTOC(DATE()),7)
30.在 Visual FoxPro 中,通用型字段 G 和备注型字段 M 在表中的宽度都是________。
A.2 个字节 B.4 个字节 C.8 个字节 D.10 个字节
31.不论索引是否生效,定位到相同记录上的命令是________。
A.GO TOP B.GO BOTTOM C.GO 6 D.SKIP
− 218 −
附录 2 全真预测试题(二)

32.可以伴随着表的打开而自动打开的索引是________。
A.单一索引文件(IDX) B.复合索引文件(CDX)
C.结构化复合索引文件 D.非结构化复合索引文件
33.要为当前表中所有职工增加 100 元工资应该使用命令________。
A.CHANGE 工资 WITH 工资+100
B.REPLACE 工资 WITH 工资+100
C.CHANGE ALL 工资 WITH 工资+100
D.REPLACE ALL 工资 WITH 工资+100
34.Visual FoxPro 参照完整性规则不包括________。
A.更新规则 B.查询规则 C.删除规则 D.插入规则
35.在数据库设计器中,建立两个表之间的一对多联系是通过以下索引实现的________。
A.“一方”表的主索引或候选索引,“多方”表的普通索引
B.“一方”表的主索引,“多方”表的普通索引或候选索引
C.“一方”表的普通索引,“多方”表的主索引或候选索引
D.“一方”表的普通索引,“多方”表的候选索引或普通索引

二、填空题

1.在关系数据库中,二维表的列称为属性,二维表的行称为 [1] 。
2.在 Visual FoxPro 中,项目文件的扩展名是 [2] 。
3.查询设计器的“筛选”选项卡用来指定查询的 [3] 。
4.要为表单设计下拉式菜单,首先需要在菜单设计时,在“常规选项”对话框中选择
“顶层表单”复选框;其次要将表单的 Show Window 属性值设置为 [4] ,使其成为顶层表
单;最后需要在表单的 [5] 事件代码中添加调用菜单程序的命令。
* * * 样本数据库* * *
假设图书管理数据库中有 3 个表,图书.dbf、读者.dbf 和借阅.dbf。它们的结构分别如下:
图书(总编号 C(6),分类号 C(8),书名 C(16),作者 C(6),出版单位 C(20) ,
单价 N(6,2))
读者(借书证号 C(4) ,单位 C(8)
,姓名 C(6)
,性别 C(2),职称 C(6)
,地址 C(20))
借阅(借书证号 C(4) ,总编号 C(6),借书日期 D(8))
5.在上述图书管理数据库中,图书的主索引是总编号,读者的主索引是借书证号,借
阅的主索引应该是 [6] 。
6.有如下 SQL 语句:
SELECT 读者.姓名,读者.职称,图书.书名,借阅.借书日期;
FROM 图书管理!读者,图书管理!借阅,图书管理!图书;
WHERE 借阅.借书证号=读者.借书证号;
AND 图书.总编号=借阅.总编号
其中 WHERE 子句中的“借阅.借书证号=读者.借书证号”对应的关系操作是 [7] 。
7.如果要在藏书中查询“高等教育出版社”和“科学出版社”的图书,请对下面的 SQL
语句填空。
− 219 −
等级考试学习笔记——二级 Visual FoxPro

SELECT 书名,作者,出版单位;
FROM 图书管理!图书;
WHERE 出版单位 [8]
8.如果要查询所藏图书中,各个出版社的图书最高单价、平均单价和册数,请对下面
的 SQL 语句填空。
SELECT 出版单位,MAX(单价), [9] , [10] ;
FROM 图书管理!图书;
[11] 出版单位
9.如果要查询借阅了两本和两本以上图书的读者姓名和单位,请对下面的 SQL 语句填空。
SELECT 姓名,单位;
FROM 图书管理!读者;
(SELECT [12] ;
FROM 图书管理!借阅;
CROUP BY 借书证号;
[13] COUNT(*)>=2)
10.运行 XY.prg 程序后,将在屏幕上显示如下乘法表:
1) 1
2) 2 4
3) 3 6 9
4) 4 8 12 16
5) 5 10 15 20 25
6) 6 12 18 24 30 36
7) 7 14 21 28 35 42 49
8) 8 16 24 32 40 48 56 64
9) 9 18 27 36 45 54 63 72 81

请对下面的程序填空。
* * * 计算乘法 XY.prg * * *
SET TALK OFF
CLEAR
FOR J=1 TO 9
?STR(J,2)+′) ′
FOR [14]
?? [15]
ENDFOR
?
ENDFOR
RETURN

− 220 −
附录 2 全真预测试题(二)

参考答案

一、选择题

1.B 2.C 3.A 4.A 5.C


6.D 7.C 8.D 9.B 10.D
11.A 12.C 13.A 14.B 15.C
16.D 17.B 18.D 19.B 20.D
21.C 22.C 23.A 24.B 25.C
26.D 27.B 28.C 29.A 30.B
31.C 32.C 33.D 34.B 35.A

二、填空题

1.[1]元组
2.[2]pjx 或.pjx
3.[3]查询条件
4.[4]2 [5] Init
5.[6]总编号+借书证号 或 借书证号+总编号
6.[7]内部联接(INNER JOIN) 或 联接(JOIN)
7.[8]IN("高等","科学")或 IN("高等教育出版社","科学出版社")或出版单位="
高等教育出版社".OR.出版单位="科学出版社"
注:出版单位的次序不限
8.[9]AVG(单价)
[10]COUNT(*)
[11]GROUP BY
9.[12]借书证号
[13]HAVING
10.[14]for K=1 TO J
[15]STR(J*K,6)
注:其中的 K 可以是其他字母。

− 221 −
等级考试学习笔记——二级 Visual FoxPro

附录 3 全真预测试题(三)

一、选择题

下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将正确选项涂写在答题


卡相应位置,答在试卷上不得分。
1.DTOC({98/09/28})的值应为________。
A.1998 年 9 月 28 日 B.98/09/28
C.“98/09/28” D.“98-09-28”
2.在命令窗口中,显示当前数据库中所有 40 岁(含 40 岁)以下、职称为“教授”、 “副
教授”的取工姓名和工资,应使用命令________。
A.LIST 姓名,工资 FOR 年龄<=40.AND.职称="教授".AND.职称="副教授"
B.LIST 姓名,工资 FOR 年龄<=40.OR.职称="教授".OR.职称="副教授"
C.LIST 姓名,工资 FOR 年龄<=40.AND.(职称="教授".OR.职称="副教授")
D.LIST 姓名,工资 FOR 年龄<=40.OR.(职称="教授".AND.职称="副教授")
3.X="ABC",Y="ABCD",则下列表达式中值为.T.的是________。
A.X=Y B.X= =Y C.X$Y D.AT(X,Y)=0
4.表达式 CTOD('97-06-06')-{97-06-01}的结果是________。
A.字符 5 B.数值 5 C.数值 150 D.出错
5.关系数据库管理系统应能实现的专门关系运算包括________。
A.排序、索引、统计 B.选择、投影、连接
C.关联、更新、排序 D.显示、打印、制表
6.假定学生关系是 S(S#,SNAME,SEX,AGE),课程关系是 C(C#,CNAME,
TEACHER),学生选课关系是 SC(S#,C#,GRADE)。要查找选修 “COMPUTER”课程
的“女”学生姓名,将涉及到关系________。
A.S B.SC,C C.S,SC D.S,C,SC
7.在学生表中查找没有选课的学生,下列语句正确的是________。
A.SELECT * FROM XS WHERE EXISTS;
(SELECT * FROM 选课 WHERE 学生号=XS.学生号)
B.SELECT * FROM XS WHERE NOT EXISTS;
(SELECT * FROM 选课 WHERE 学生号=XS.学生号)
C.SELECT * FROM XS WHERE EXISTS;
NO(SELECT * FROM 选课 WHERE 学生号=学生号)
D.SELECT * FROM XS WHERE NOT EXISTS;
(SELECT * FROM 选课 WHERE 学生号=学生号)
8.以下属于非容器类控件的是________。
− 222 −
附录 3 全真预测试题(三)

A.Form B.Label C.Page D.Container


9.对内存变量的叙述,不正确的是________。
A.内存变量是独立于数据库的变量 B.内存变量有 N、C、L、D、S 型
C.内存变量由赋值语句定义 D.内存变量的形式只有标量
10.在当前盘目录下删除表学生的命令是________。
A.DROP 学生 B.DELETE TABLE 学生
C.DROP TABLE 学生 D.DELETE 学生
11.将学生表的学生姓名字段的宽度由 6 改为 8,应使用的 SQL 语句________。
A.ALTER TABLE 学生 学生姓名 WITH c(8)
B.ALTER TABLE 学生 学生姓名 c(8)
C.ALTER TABLE 学生 ALTER 学生姓名 c(8)
D.ALTER 学生 TABLE 学生姓名 c(8)
12.在一个关系中如果有这样一个属性存在,它的值能惟一地标识关系中的每一个元组,
称这个属性为________。
A.关键字 B.数据项 C.主属性 D.主属性值
13.在关系数据库中,实现“表中任意两行不能相同”的约束是靠________。
A.外码 B.属性 C.主码 D.列
14.执行命令序列:
STORE{99/08/06} TO MDATE
NDATE=MDATE+2
?NDATE
变量 NDATE 的显示值是________。
A.99-08-08 B.99-10-06 C.99-08-06 D.99-10-08
15.表 DEMO.dbf 中包含有备注型字段,该表中所有的备注字段均存储到备注文件中,
该备注文件是________。
A.DEMO.fmt B.DEMO.txt C.DEMO.dbt D.DEMO.bat
16.将 1999 年 12 月 10 日存入日期型变量 RQ 的正确方法是________。
A.STORE 99/12/10 TO RQ B.STORE DTOC("99/12/10") TO RQ
C.STORE {99/12/10} TO RQ D.STORE "99/12/10" TO RQ
17.在文件管理系统中,下列叙述正确的是________。
A.文件内部数据之间有联系,文件之间没有任何联系
B.文件内部数据之间有联系,文件之间有联系
C.文件内部数据制没有联系,文件之间没有任何联系
D.文件内部数据之间没有联系,文件之间有联系
18.若想从字符串“上海市”中取出汉字“海” ,应用函数________。
A.SUBSTR("上海市",2,2) B.SUBSTR("上海市",2,1)
C.SUBSTR("上海市",3,1) D.SUBSTR("上海市",3,2)
19.逻辑设计主要是把概念模式转换成________。
A.DBMS 能处理的模式 B.与 DBMS 无关的模式
− 223 −
等级考试学习笔记——二级 Visual FoxPro

C.层次结构模型 D.子模式
20.若当前工作区为 A,执行以下命令后结果为________。
REPLACE NUM WITH 20
STORE 0 TO NUM
?NUM,A->NUM,M.NUM
A.0 0 20 B.0 20 0
C.0 0 0 D.20 20 0
21.学生成绩表: (学号(N),姓名(C),数学(N),政治(N)),若要建立包含学号、
姓名和总分字段的视图,下列语句正确的是________。
A.CREATE VIEW CJ AS;
SELECT 学号,姓名,数学+政治 AS 总分 FROM 成绩
B.CREATE VIEW CJ AS;
SELECT 学号,姓名,数学+政治 FROM 成绩
C.CREATE VIEW CJ AS;
SELECT 学号,姓名,数学,政治 AS 总分 FROM 成绩
D.CREATE VIEW CJ AS;
SELECT 学号,姓名,总分 FROM 成绩
22.Visual FoxPro 6.0 数据库系统是________。
A.网络 B.层次 C.关系 D.链状
23.确定列表框内的某个条目是否被选定应使用的属性是________。
A.Value B.ColumnCount C.ListCount D.Selected
24.计算表文件中所有职称为副教授和教授的工资总额,并将结果赋予变量 ZGZ,可使
用命令________。
A.SUM 工资 TO ZGZ FOR 职称="副教授".AND. "教授"
B.SUM 工资 TO ZGZ FOR 职称="副教授".OR. "教授"
C.SUM 工资 TO ZGZ FOR 职称="副教授".OR.职称="教授"
D.SUM 工资 TO ZGZ FOR "教授"$职称
25.检索选修两门以上课程的学生总成绩,并要求按总成绩降序排列出来,下列语句正
确的是________。
A.SELECT 学生号,SUM(成绩) FROM 选课;
GROUP BY 学生号;
ORDER BY 2 DESC
B.ELECT 学生号,SUM(成绩) FROM 选课;
GROUP BY 学生号;
ORDER BY 2
C.ELECT 学生号,SUM(成绩) FROM 选课;
GROUP BY 学生号;
ORDER BY 学生号 DESC
D.SELECT 学生号,SUM(成绩) FROM 选课;
− 224 −
附录 3 全真预测试题(三)

GROUP BY 成绩;
ORDER BY 2 DESC
26.如果要创建一个数据 3 级分组报表,第一个分组表达式是“部门” ,第二个分组表
达式是“性别”,第三个分组表达式是“基本工资”,当前索引的索引表达式应该是________。
A.部门+性别+基本工资 B.部门+性别+STR(基本工资)
C.STR(基本工资)+性别+部门 D.性别+部门+STR(基本工资)
27.索引字段值不惟一,应该选择的索引类型是________。
A.主索引 B.普通索引 C.候选索引 D.惟一索引
28.为表单设置数据环境,可通过________菜单调出“数据环境”设计器。
A.文件 B.编辑 C.显示 D.工具
29.设当前数据库文件中含有字段 NAME,系统中有一内存变量的名称也为 NAME,下
面命令:?NAME,显示的结果是________。
A.内存变量 NAME 的值 B.字段变量 NAME 的值
C.与该命令之前的状态有关 D.错误信息
30.数据库的概念模型独立于________。
A.具体的机器和 DBMS B.E-R 图
C.信息世界 D.现实世界
31.在表单的常用事件中,用来表示“当对象获得焦点时引发”的事件是________。
A.Init B.Load C.Destroy D.GetFocus
32.计时器控件的主要属性是________。
A.Enabled B.Caption C.Interval D.Value
33.下面不是用来创建项目的方法是________。
A.文件、新建、项目、新建文件 B.CREATE PROJECT
C.MODIFY PROJECT D.工具、向导、应用程序
34.下面关于数据环境和数据环境中两个表之间的关系的陈述中,正确的是________。
A.数据环境是对象,关系不是对象
B.数据环境不是对象,关系是对象
C.数据环境是对象,关系是数据环境中的对象
D.数据环境和关系都不是对象
35.在 SQL 中,建立视图用________。
A.CREATE SCHEMA 命令 B.CREATE TABLE 命令
C.CREATE VIEW 命令 D.CREATE INDEX 命令

二、填空题

1.数据库应用系统的设计应该具有对于数据进行收集、存储、加工、抽取和传播等功
能,即包括数据设计和处理设计,而 是系统设计的基础和核心。
2.假设数据库已打开,要将视图 mingdan 改名为 md1,所使用的命令是 。
3.删除记录的操作通常分为两步:先给要删除的记录作 ,然后再在磁盘上将
其物理删除。
− 225 −
等级考试学习笔记——二级 Visual FoxPro

4.内部联接是指只有 的记录才包含在查询结果中。
5.已知数据表 COURSE.dbf 的结构为:
字段名 类型 长度 小数
学号 C 2
课程名称 C 8
成绩 N 5 1
在该表中已存入了每位学生的各科成绩,且按学号排序。若要统计每位学生的总成绩,
并存入 SCOURSE.dbf 中,可用命令 。
6.将查询结果存放到临时表中,使用 短语;存放到永久表中,使用 短
语;存放到内存变量中,使用 短语;添加到文本文件末尾,使用 短语。
7.在 SQL 中用 命令可以从表中删除行,用 命令可以从数据库中删除表。
8.报表的组标头每组打印 次。
9.数据分组的依据是 。
10.要将 Visual FoxPro 系统菜单恢复成标准配置,可先执行命令 ,然后执行命
令 。

参考答案

一、选择题

1.C 2.C 3.C 4.B 5.B


6.D 7.B 8.B 9.D 10.C
11.C 12.A 13.C 14.A 15.C
16.C 17.A 18.D 19.A 20.D
21.A 22.C 23.D 24.C 25.A
26.B 27.B 28.C 29.B 30.A
31.D 32.C 33.C 34.C 35.C

二、填空题

1.数据设计
2.RENAME VIEW mingdan TO md1
3.删除标记
4.满足联接条件
5.TOTAL TO SCORE.DBF ON 学号
6.NTO CURSOR INTO TABLE INTO ARRAY TO FILE… ADDITIVE
7.DELETE DROP
8.1
9.分组表达式
10.SET SYSMENU NOSAVE SET SYSMENU TO DEFAULT
− 226 −
附录 4 2004 年 4 月全国计算机等级考试二级 VFP 笔试试卷

附录 4 2004 年 4 月全国计算机等级考试
二级 VFP 笔试试卷
(考试时间90分钟,满分100分)

一、选择题

下列各题在 A、B、C、D 四个选项中,只有一个选项是正确的,请在答题卡相应位置上


将正确选项涂写。
1.数据库(DB)、数据库系统(DBS)、数据库管理系统(DBMS)三者之间的关系
是________。
A.DBS 包括 DB 和 DBMS B.DBMS 包括 DB 和 DBS
C.DB 包括 DBS 和 DBMS D.DBS 就是 DB,也就是 DBMS
2.在 Visual FoxPro 中“表”是指________。
A.报表 B.关系 C.表格 D.表单
3.数据库系统与文件系统的最主要区别是________。
A.数据库系统复杂,而文件系统简单
B.文件系统不能解决数据冗余和数据独立性问题,而数据库系统可以解决
C.文件系统只能管理程序文件,而数据库系统能够管理各种类型的文件
D.文件系统管理的数据量较小,而数据库系统可以管理庞大的数据量
4.在当前表单的 LABEL1 控件中显示系统时间的语句是________。
A.THISFORM.LABEL1.CAPTION=TIME()
B.THISFORM.LABEL1.VALUE=TIME()
C.THISFORM.LABEL1.TEXT=TIME()
D.THISFORM.LABEL1.CONTROL=TIME()
5.在关系模型中,为了实现“关系中不允许出现相同元组”的约束应使用________。
A.临时关键字 B.主关键字
C.外部关键字 D.索引关键字
6.在 Visual FoxPro 中创建项目,系统将建立一个项目文件,项目文件的扩展名是______。
A.pro B.prj C.pjx D.itm
7.在 Visual FoxPro 的项目管理器中不包括的选项卡是________。
A.数据 B.文档 C.类 D.表单
8.在 Visual FoxPro 中说明数组的命令是________。
A.DIMENSION 和 ARRAY B.DECLARE 和 ARRAY
C.DIMENSION 和 DECLARE D.只有 DIMENSION
9.数据库表可以设置字段有效性规则,字段有效性规则属于________。
− 227 −
等级考试学习笔记——二级 Visual FoxPro

A.实体完整性范畴 B.参照完整性范畴
C.数据一致性范畴 D.域完整性范畴
10.在 Visual FoxPro 中字段的数据类型不可以指定为________。
A.日期型 B.时间型 C.通用型 D.备注型
11.用命令“INDEX ON 姓名 TAG index_name UNIQUE”建立索引,其索引类型是
________。
A.主索引 B.候选索引 C.普通索引 D.惟一索引
12.以下关于主索引和候选索引的叙述正确的是________。
A.主索引和候选索引都能保证表记录的惟一性
B.主索引和候选索引都可以建立在数据库表和自由表上
C.主索引可以保证表记录的惟一性,而候选索引不能
D.主索引和候选索引是相同的概念
13.查询订购单号首字符是“P”的订单信息,应该使用命令________。
A.SELECT * FROM 订单 WHERE HEAD(订购单号,1)=“P”
B.SELECT * FROM 订单 WHERELEFT(订购单号,1)= “P”
C.SELECT * FROM 订单 WHERE “P”$订购单号
D.SELECT * FROM 订单 WHERERIGHT(订购单号,1)= “P”
14.有如下赋值语句,结果为“大家好”的表达式是________。
a="你好"
b="大家"
A.b+AT(a,1) B.b+RIGHT(a,1)
C.b+ LEFT(a,3,4) D.b+RIGHT(a,2)
15.数据库表的字段可以定义默认值,默认值是________。
A.逻辑表达式 B.字符表达式
C.数值表达式 D.前三种都可能
16.数据库的字段可以定义规则,规则是________。
A.逻辑表达式 B.字符表达式
C.数值表达式 D.前三种说法都不对
17.在 SQL 语句中,与表达式“供应商名 LIKE"北京"”功能相同的表达式是________。
A.LEFT(供应商名,4)= "北京" B."北京"$供应商名
C.供应商名 IN"北京" D.AT(供应商名,"北京")
18.使数据库表变为自由表的命令是________。
A.DROP TABLE B.REMOVE TABLE
C.FREE TABLE D.RELEASE TABLE
19.在 Visual FoxPro 的查询设计器中“筛选”选项卡对应的 SQL 短语是________。
A.WHERE B.JOIN C.SET D.ORDER BY
20.SQL 支持集合的并运算,在 Visual FoxPro 中 SQL 并运算的运算符是________。
A.PLUS B.UNION C.+ D.U
21.根据“职工”项目文件生成 emp_sys.exe 应用程序的命令是________。
− 228 −
附录 4 2004 年 4 月全国计算机等级考试二级 VFP 笔试试卷

A.BUILD EXE emp_sys FROM 职工


B.BUILD APP emp_sys.exe FROM 职工
C.LINK EXE emp_sys FROM 职工
D.LINK APP emp_sys FROM 职工
22.如果指定参照完整性的删除规则为“级联” ,则当删除父表中的记录时________。
A.系统自动备份父表中被删除记录到一个新表中
B.若子表中有相关记录,则禁止删除父表中记录
C.会自动删除子表中所有相关记录
D.不作参照完整性检查,删除父表记录与子表无关
23.以下关于关系的说法正确的是________。
A.列的次序非常重要 B.当需要索引时列的次序非常重要
C.列的次序无关紧要 D.关键字必须指定为第一列
24.为了在报表中打印当前时间,这时应该插入一个________。
A.表达式控件 B.域控件
C.标签控件 D.文件控件
25.在 Visual FoxPro 中释放和关闭表单的方法是________。
A.RELEASE B.CLOSE C.DELETE D.DROP
26.为了从用户菜单返回到系统菜单应该使用命令________。
A.SET DEFAULT SYSTEM B.SET MENU TO DEFAULT
C.SET SYSTEM TO DEFAULT D.SET SYSMENU TO DEFAULT
27.在表单中为表格控件指定数据源的属性是________。
A.DataSource B.RecordSource
C.DataFrom D.RecordFrom
28.以下关于表单数据环境叙述错误的是________。
A.可以向表单数据环境设计器中添加表或视图
B.可以从表单数据环境设计器中移出表或视图
C.可以在表单数据环境设计器中设置表之间的关系
D.不可以在表单数据环境设计器中设置表之间的关系
29.以下关于查询描述正确的是________。
A.不能根据自由表建立查询 B.只能根据自由表建立查询
C.只能根据数据库表建立查询 D.可以根据数据库表和自由表建立查询
第(30)~(35)题使用如下三个表:
部门.dbf:部门号 C(8) ,部门名 C(12),负责人 C(6),电话 C(16)
职工.dbf:部门号 C(8) ,职工号 C(10),姓名 C(8),性别 C(2),出生日期 D
工资.dbf:职工号 C(10) ,基本工资 N(8.2),津贴 N(8.2),奖金 N(8.2),扣除 N(8.2)
30.查询职工实发工资的正确命令是________。
A.SELECT 姓名,(基本工资+津贴+奖金−扣除)AS 实发工资 FROM 工资
B.SELECT 姓名,(基本工资+津贴+奖金−扣除)AS 实发工资 FROM 工资
WHERE 职工.职工号=工资.职工号
− 229 −
等级考试学习笔记——二级 Visual FoxPro

C.SELECT 姓名,(基本工资+津贴+ 奖金−扣除)AS 实发工资;


FROM 工资,职工 WHERE 职工.职工号=工资.职工号
D.SELECT 姓名,(基本工资+津贴+奖金−扣除)AS 实发工资;
FROM 工资 JOIN 职工 WHERE 职工.职工号=工资. 职工号
31.查询 1962 年 10 月 27 日出生的职工信息的正确命令是________。
A.SELECT*FROM 职工 WHERE 出生日期={^1962-10-27}
B.SELECT*FROM 职工 WHERE 出生日期=1962-10-27
C.SELECT*FROM 职工 WHERE 出生日期="1962-10-27"
D.SELECT*FROM 职工 WHERE 出生日期=("1962-10-27")
32.查询每个部门年龄最长者的信息,要求得到的信息包括部门名和最长者的出生日期。
正确的命令是________。
A.SELECT 部门名,MIN(出生日期)FROM 部门 JOIN 职工;
ON 部门.部门号=职工.部门号 GROUP BY 部门名
B.SELECT 部门名,MAX(出生日期)FROM 部门 JOIN 职工;
ON 部门.部门号=职工.部门号 GROUP BY 部门名
C.SELECT 部门名,MIN(出生日期)FROM 部门 JOIN 职工;
WHERE 部门.部门号=职工.部门号 GROUP BY 部门名
D.SELECT 部门名,MAX(出生日期)FROM 部门 JOIN 职工;
WHERE 部门.部门号=职工.部门号 GROUP BY 部门名
33.查询有 10 名以上(含 10 名)职工的部门信息(部门名和职工人数) ,并按职工人
数降序排列。正确的命令是________。
A.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
ORDER BY COUNT(职工号)ASC
B.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
ORDER BY COUNT(职工号)DESC
C.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
ORDER BY 职工人数 ASC
D.SELECT 部门名,COUNT(职工号)AS 职工人数;
FROM 部门,职工 WHERE 部门.部门号=职工.部门号;
GROUP BY 部门名 HAVING COUNT(*)>=10;
ORDER BY 职工人数 DESC
34.查询所有目前年龄在 35 岁以上(不含 35 岁)的职工信息(姓名、性别和年龄) ,
正确的命令是________。
− 230 −
附录 4 2004 年 4 月全国计算机等级考试二级 VFP 笔试试卷

A.SELECT 姓名,性别,YEAR(DATE())-YEAR(出生日期) 年龄 FROM 职工;


WHERE 年龄>35
B.SELECT 姓名,性别,YEAR(DATE())-YEAR(出生日期) 年龄 FROM 职工;
WHERE YEAR(出生日期)>35
C.SELECT 姓名,性别,YEAR(DATE())-YEAR(出生日期) 年龄 FROM 职工;
WHERE YEAR(DATE())-YEAR(出生日期)>35
D.SELECT 姓名,性别,年龄=YEAR(DATE())-YEAR(出生日期) FROM 职工;
WHERE YEAR(DATE())-YEAR(出生日期 )>35
35.为“工资”表增加一个“实发工资”字段的正确命令是________。
A.MODIFY TABLE 工资 ADD COLUMN 实发工资 N(9,2)
B.MODIFY TABLE 工资 ADD FIELD 实发工资 N(9,2)
C.ALTER TABLE 工资 ADD COLUMN 实发工资 N(9,2)
D.ALTER TABLE 工资 ADD FIELD 实发工资 N(9,2)

二、填空题

请将每一个空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。
注意:以命令关键字填空的必须拼写完整。
1.使用数据库设计器为两个表建立联系,首先应在父表中建立【1】索引,在子表中建
立【2】索引。
2.常量 .n.表示的是【3】型的数据。
3.在 Visual FoxPro 中参数传递的方式有两种,一种是按值传递,另一种是按引用传递,
将参数设置为按引用传递的语句是:SET UDFPARMS【4】
4.运行表单时,Load 事件是在 Init 事件之【5】被引发。
5.如下程序的输出结果是【6】 。
i=1
DO WHILE i<10
i=i+2
ENDDO
?i
第(6)~(9)题使用如下三个表:
零件.dbf:零件号 C(2) ,零件名称 C(10),单价 N(10),规格 C(8)
使用零件.dbf:项目号 C(2),零件号 C(2),数量 I
项目.dbf:项目号 C(2) ,项目名称 C(20),项目负责人 C(10),电话 C(20)
6.为“数量”字段增加有效性规则:数量>0,应该使用的 SQL 语句是:
【7】TABLE 使用零件【8】数量 SET【9】数量>0
7.查询与项目“s1”(项目号)所使用的任意一个零件相同的项目号、项目名称、零件
号和零件名称,使用的 SQL 语句是:
SELECT 项目.项目号,项目名称,使用 零件.零件号,零件名称;
FROM 项目,使用零件, 零件 WHERE 项目.项目号=使用零件.项目号【10】;
− 231 −
等级考试学习笔记——二级 Visual FoxPro

使用零件.零件号=零件.零件号 AND 使用零件.零件号【11】;


(SELECT 零件号 FROM 使用零件 WHERE 使用零件.项目号=‘s1’)
8.建立一个由零件名称、数量、项目号、项目名称字段构成的视图,视图中只包含项
目号为“s2”的数据,应该 使用的 SQL 语句是:
CREATE VIEW item_view 【12】;
SELECT 零件.零件名称,使用零件.数量,使用零件.项目号,项目.项目名称;
FROM 零件 INNER JOIN 使用零件;
INNER JOIN 【13】;
ON 使用零件.项目号= 项目.项目号;
ON 零件.零件号=使用零件.零件号;
WHERE 项目.项目号='s2'
9. 从上一题建立的视图中查询使用数量最多的 2 个零件的信息,应该使用的 SQL 语句是:
SELECT* 【14】 2 FROM item_view 【15】 数量 DESC

参考答案

一、选择题

1.A 2.B 3.B 4.A 5.B


6.C 7.D 8.C 9.D 10.B
11.D 12.A 13.B 14.D 15.D
16.A 17.B 18.B 19.A 20.B
21.A 22.C 23.C 24.B 25.A
26.D 27.B 28.D 29.D 30.C
31.A 32.A 33.D 34.C 35.C

二、填空题

1.【1】主 【2】普通 2.【3】逻辑 3.【4】TO REFERENCE


4.【5】前 5.【6】11 6.【7】ALTER 【8】ALTER 【9】CHECK
7.【10】AND 【11】IN 8.【12】AS 【13】项目
9.【14】TOP 【15】ORDER BY

− 232 −
附录 5 2004 年 9 月全国计算机等级考试二级 VFP 笔试试卷

附录 5 2004 年 9 月全国计算机等级考试
二级 VFP 笔试试卷
(考试时间90分钟,满分100分)

一、选择题

1.DBMS 的含义是________。
A.数据库系统 B.数据库管理系统
C.数据库管理员 D.数据库
2.从关系模式中指定若干个属性组成新的关系的运算称为________。
A.联接 B.投影 C.选择 D.排序
3.对于“关系”的描述,正确的是________。
A.同一个关系中允许有完全相同的元组
B.同一个关系中元组必须按关键字升序存放
C.在一个关系中必须将关键字作为该关系的第一个属性
D.同一个关系中不能出现相同的属性名
4.在表设计器的“字段”选项卡中可以创建的索引是________。
A.惟一索引 B.候选索引 C.主索引 D.普通索引
5.在程序中不需要用 public 等命令明确声明和建立,可直接使用的内存变量是________。
A.局部变量 B.公共变量 C.私有变量 D.全局变量
6.扩展名为 dbf 的文件是________。
A.表文件 B.表单文件 C.数据库文件 D.项目文件
7.下列程序段的输出结果是________。
Clear
store 10 to a
store 20 to b
set udfparms to reference
do swap with a,(b)
?a,b
procedure swap
parameters x1,x2
temp=x1
x1=x2
x2=temp
endproc
− 233 −
等级考试学习笔记——二级 Visual FoxPro

A.10 20 B.20 20 C.20 10 D.10 10


8.使用调试器调试第(7)小题的程序,如果想在过程 swap 执行时观察 x1 的值,可以
在其中安置一条命令,程序执行到该命令时,系统将计算 x1 的值,并将结果在调试输出窗口
中显示,这条命令的正确写法是________。
A.DEBUGOUT x1 B.DEBUG x1
C.OUT x1 D.TEST x1
9~11 使用下图:

9.如果在运行表单时,要使表单的标题显示“登录窗口”,则可以在 Form1 的 Load 事


件中加入语句________。
A.THISFORM.Caption="登录窗口"
B.Form1.Capiton="登录窗口"
C.THISFORM.Name="登录窗口"
D.Form1.Name="登录窗口"
10.如果想在运行表单时,向 Text2 中输入字符,回显字符是“*”,则可以在 Form1 的
Init 事件中加入语句________。
A.Form1.Text2.PasswordChar="*"
B.Form1.Text2.Password="*"
C.THISFORM.Text2.Password="*"
D.THISFORM.Text2.PasswordChar="*"
11.假设用户名和口令存储在自由表“口令表”中,当用户输入用户名和口令并单击“登
录”按钮时,若用户名输入错误,则提示“用户名错误”;若用户名输入正确,而口令输入错
误,则提示“口令错误” 。若命令按钮“登录”的 Click 事件中的代码如下:
USE 口令表
GO TOP
flag =0
DO WHILE .not.EOF()
IF ALLTRIM(用户名)==ALLTRIM(Thisform.Text1.value)
If ALLTRIM(口令)==ALLTRIM(Thisform.Text2.value)
WAIT"欢迎使用"WINDOW TIMEOUT2
ELSE

− 234 −
附录 5 2004 年 9 月全国计算机等级考试二级 VFP 笔试试卷

WAIT"口令错误"WINDOW TIMEOUT2
ENDIF
flag=1
EXIT
ENDIF
SKIP
ENDDO
IF
——————
WAIT"用户名错误"WINDOW TIMEOUT2
ENDIF
则在横线处应填写的代码是________。
A.flag= −1 B.flag=0 C.flag=1 D.flag=2
12.设 X=10, 语句?VARTYPE ("X")的输出结果是________。
A.N B.C C.10 D.X
13.表达式 LEN(SPACE(0))的运算结果是________。
A..NULL. B.1 C.0 D." "
14.为表单建立了快捷菜单 MYMENU,调用快捷菜单的命令代码 DO mymenu.mpr WITH
THIS 应该放在表单的________事件中。
A.Desory B.Init 事件 C.load 事件 D.RIGHTCLICK 事件
第 15~26 题使用的数据表如下。
当前盘当前目录下有数据库:学院.dbc,其中有“教师”表和“学院”表。
“教师”表:
职工号 系 号 姓 名 工 资 主讲课程

11020001 01 肖海 3408 数据结构

11020002 02 王岩盐 4390 数据结构

11020003 01 刘星魂 2450 C 语言

11020004 03 张月新 3200 操作系统

11020005 01 李明玉 4520 数据结构

11020006 02 孙民山 2976 操作系统

11020007 03 钱无名 2987 数据库

11020008 04 呼延军 3220 编译原理

11020009 03 王小龙 3980 数据结构

11020010 01 张国梁 2400 C 语言

11020011 04 林新月 1800 操作系统

11020012 01 乔小廷 5400 网络技术

11020013 02 周兴池 3670 数据库

11000014 04 欧阳秀 3345 编译原理

− 235 −
等级考试学习笔记——二级 Visual FoxPro

“学院”表:
系 号 系 名

01 计算机

02 通信

03 信息管理

04 数学

15.为“学院”表增加一个字段“教师人数”的 SQL 语句是________。


A.CHANGE TABLE 学院 ADD 教师人数 I
B.ALTER STRU 学院 ADD 教师人数 I
C.ALTER TABLE 学院 ADD 教师人数 I
D.CHANGE TABLE 学院 INSERT 教师人数 I
16.将“欧阳秀”的工资增加 200 元 SQL 语句是________。
A.REPLACE 教师 WITH 工资=工资+200 WHERE 姓名="欧阳秀"
B.UPDATE 教师 SET 工资=工资+200 WHEN 姓名="欧阳秀"
C.UPDATE 教师工资 WITH 工资+200 WHERE 姓名="欧阳秀"
D.UPDATE 教师 SET 工资=工资+200 WHERE 姓名="欧阳秀"
17.下列程序段的输出结果是________。
CLOSE DATA
a=0
USE 教师 GO TOP
DO WHILE .NOT. EOF()
IF 主讲课程="数据结构".OR.主讲课程="C 语言"
a=a+1
ENDIF
SKIP
ENDDO
?a
A.4 B.5 C.6 D.7
18.有 SQL 语句:SELECT * FROM 教师 WHERE NOT(工资>3000 OR 工资<2000)与如
上语句等价的 SQL 语句是________。
A.SELECT*FROM 教师 WHERE 工资 BETWEEN 2000 AND 3000
B.SELECT*FROM 教师 WHERE 工资 >2000 AND 工资<3000
C.SELECT*FROM 教师 WHERE 工资>2000 OR 工资<3000
D.SELECT*FROM 教师 WHERE 工资<=2000 AND 工资>=3000
19.为“教师”表的职工号字段添加有效性规则:职工号的最左边三位字符是 110,正
确的 SQL 语句是________。
A.CHANGE TABLE 教师 ALTER 职工号 SET CHECK LEFT(职工号,3)="110"
B.ALTER TABLE 教师 ALTER 职工号 SET CHECK LEFT(职工号,3)="110"

− 236 −
附录 5 2004 年 9 月全国计算机等级考试二级 VFP 笔试试卷

C.ALTER TABLE 教师 ALTER 职工号 CHECK LEFT(职工号,3)="110"


D.CHANGE TABLE 教师 ALTER 职工号 SET CHECK OCCURS(职工号,3)="110"
20.有 SQL 语句:SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
ALL (SELECT 工资 FROM 教师 WHERE 系号="02",该语句的执行结果是系号________。
A.“01”和“02” B.“01”和“03”
C.“01”和“04” D.“02”和“03”
21.建立一个视图 salary,该视图包括了系号和(该系的)平均工资两个字段,正确的
SQL 语句是________。
A.CREATE VIEW salary AS 系号,AVG(工资)AS 平均工资 FROM 教师 GROUP BY
系号
B.CREATE VIEW salary AS SELECT 系号,AVG(工资)AS 平均工资 FROM 教师
GROUP BY 系名
C.CREATE VIEW Salary SELECT 系号,AVG(工资)AS 平均工资 FROM 教师 GROUP
BY 系号
D.CREATE VIEW salary AS SELECT 系号,AVG(工资)AS 平均工资 FROM 教师
GROUP BY 系号
22.删除视图 salary 的命令是________。
A.DROP salary VIEW B.DROP VIEW salary
C.DELETE salary VIEW D.DELETE salary
23.有 SQL 语句:SELECT 主讲课程,COUNT(*)FROM 教师 GROUP BY 主讲课程,
该语句执行结果含有记录个数是________。
A.3 B.4 C.5 D.6
24.有 SQL 语句:SELECT COUNT(*)AS 人数,主讲课程 FROM 教师 GROUP BY 主
讲课程 ORDERBY 人数 DESC
该语句执行结果的第一条记录的内容是________。
A.4 数据结构 B.3 操作系统
C.2 数据库 D.1 网络技术
25.有 SQL 语句:
SELECT 学院.系名,COUNT(*)AS 教师人数 FROM 教师,学院;
WHERE 教师.系号=学院.系号 GROUP BY 学院.系名
与如上语句等价的 SQL 语句是________。
A.SELECT 学院.系名,COUNT(*)AS 教师人数;
FROM 教师 INNER JOIN 学院;
教师.系号= 学院.系号 GROUP BY 学院. 系名
B.SELECT 学院.系名,COUNT(*)AS 教师人数;
FROM 教师 INNER JOIN 学院;
ON 系号 GROUP BY 学院.系名
C.SELECT 学院.系名,COUNT(*) AS 教师人数;
FROM 教师 INNER JOIN 学院;
− 237 −
等级考试学习笔记——二级 Visual FoxPro

ON 教师.系号=学院.系号 GROUP BY 学院. 系名


D.SELECT 学院. 系名,COUNT(*)AS 教师人数;
FROM 教师 INNER JOIN 学院;
ON 教师.系号 = 学院.系号
26.有 SQL 语句:SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
ALL (SELECT 工资 FROM 教师 WHERE 系号="02")
与如上语句等价的 SQL 语句是________。
A.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
(SELECT MAX(工资)FROM 教师 WHERE 系号="02")
B.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
(SELECT MIN(工资)FROM 教师 WHERE 系号="02")
C.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
ANY(SELECT(工资)FROM 教师 WHERE 系号="02")
D.SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;
SOME (SELECT(工资)FROM 教师 WHERE 系号="02")
27.使用 SQL 语句增加字段的有效性规则,是为了能保证数据的________。
A.实体完整性 B.表完整性 C.参照完整性 D.域完整性
28.向项目中添加表单,应该使用项目管理器的________。
A.“代码”选项卡 B.“类”选项卡
C.“数据”选项卡 D.“文档”选项卡
29.有关参照完整性的删除规则,正确的描述是________。
A.如果删除规则选择的是“限制”,则当用户删除父表中的记录时,系统将自动
删除子表中的所有相关记录
B.如果删除规则选择的是“级联”,则当用户删除父表中的记录时,系统将禁止
删除子表相关的父表中的记录
C.如果删除规则选择的是“忽略”,则当用户删除父表中的记录时,系统不负责
做任何工作
D.上面三种说法都不对
30.有关查询设计器,正确的描述是________。
A.“联接”选项卡与 SQL 语句的 GROUP BY 短语对应
B.“筛选”选项卡与 SQL 语句的 HAVING 短语对应
C.“排序依据”选项卡与 SQL 语句的 ORDER BY 短语对应
D.“分组依据”选项卡与 SQL 语句的 JOIN ON 短语对应
31.使用“调试器”调试程序时,用于显示正在调试的程序文件的窗口是________。
A.局部窗口 B.跟踪窗口
C.调用堆栈窗口 D.监视窗口
32.让控件获得焦点,使其成为活动对象的方法是________。
A.Show B.Release C.SetFocus D.GotFocus
33.下面关于表单若干常用事件的描述中,正确的是________。
− 238 −
附录 5 2004 年 9 月全国计算机等级考试二级 VFP 笔试试卷

A.释放表单时,UnLoad 事件在 Destroy 事件之前引发


B.运行表单时,Init 事件在 Load 事件之前引发
C.单击表单的标题栏,引发表单的 Click 事件
D.上面的说法都不对
34.如果文本框的 INPUTMASK 属性值是#99999,允许在文本框中输入的是________。
A.+12345 B.abc123 C.$12345 D.abcdef
35.连编应用程序不能生成的文件是________。
A.APP 文件 B.EXE 文件 C.DLL 文件 D.PRG 文件

二、填空题

1.在关系模型中,“关系中不允许出现相同元组”的约束是通过________实现的。
2.在 visual foxpro 中项目文件的扩展名是________。
3.使数据库表变为自由表的命令是________TABLE。
4.在 visual foxpro 的查询设计器中________选项卡对应的 SQL 短语是 WHERE。
5.在 visual foxpro 中,BUILD________命令连编生成的程序可以脱离开 visual foxpro 在
Windows 环境下运行。
6.当删除父表中的记录时,若子表中的所有相关记录也能自动删除,则相应的参照完
整性的删除规则为________。
7.在 visual foxpro 中释放和关闭表单的方法是________。
8.为了从用户菜单返回到默认的系统菜单应该使用命令 SET________TO DEFAULT。
9.在 VISUAL FOXPRO 的表单设计中,为表格控件指定数据源的属性是________。
10.表示“1962 年 10 月 27 日”的日期常量应该写为________。
11.为“学生”表增加一个“平均成绩”字段的正确命令是:ALTER TABLE 学生 ADD
________平均成绩 N(5,2)
12.在将设计好的表单存盘时,系统生成扩展名分别是 SCX 和________的两个文件。
13.在 VISUAL FOXPRO 中为表单指定表题的属性是________。
14.在 VISUAL FOXPRO 中表单的 Load 事件发生在 Init 事件之________。
15.在 VISUAL FOXPRO 中如下程序的运行结果(即执行命令 DO main 后) 是________。
*程序文件名:main.prg
SET TALK OFF
CLOSE ALL
CLEAR ALL
mX="Visual Foxpro"
mY="二级"
DO s1
?mY+mX
RETURN
*子程序文件名:s1.prg
PROCEDURE s1
− 239 −
等级考试学习笔记——二级 Visual FoxPro

LOCAL mX
mX="Visual FoxPro DBMS 考试"
mY="计算机等级"+mY
RETURN

参考答案

一、选择题

1.B 2.B 3.D 4.D 5.C


6.A 7.B 8.A 9.A 10.D
11.B 12.B 13.C 14.D 15.C
16.D 17.C 18.A 19.B 20.A
21.D 22.B 23.D 24.A 25.C
26.A 27.D 28.D 29.C 30.C
31.B 32.C 33.D 34.A 35.D

二、填空题

1.主关键字或候选关键字(或主索引或候选索引)
2.pjx(或.pjx)
3.Remove
4.筛选
5.EXE
6.级联
7.Release 方法
8.SysMenu
9.RecordSource
10.{^1962-10-27}
11.Column
12.sct
13.Caption
14.前
15.计算机等级二级 Visual FoxPro

− 240 −

You might also like