数据表概述;数据类型、表结构的创建、修改与显示;表记录的显示、追加、 修改与删除等基本操作;表的索引与排序、数据计算、多表的操作等。 数据表是组成关系型数据库的基本单元,也是程序操作的数据对象。在编写程序之前需 创建表,设计表的结构和录入数据,以便为应用程序提供数据处理的对象。在数据表创建之后 也有大量的维护工作,如记录的增加、删除和修改等。
3.1 数据表概述
3.1.1 表的相关概念 表以记录和字段的形式存储数据,是关系型数据库管理系统的基本结构,是处理数据和 建立关系型数据库及应用程序的基本单元。 在日常的工作和生活中,遇到的数据中有很多都是以表格形式出现的,如表 31 所示就是 学生登记表中的一部分。 表 31 学生登记表 学号 姓名 院系 性别 出生年月日 英语 计算机 奖学金 党员否 备注 98402017 陈超群 文学院 男 19791218 49.0 52.0 48.5 F 98404062 曲歌 西语学院 男 1980101 61.0 67.0 55.5 F 97410025 刘铁男 法学院 男 19781210 64.0 67.0 60.5 F 98402019 王艳 文学院 女 1980119 52.0 78.0 53.5 F 98410012 李侠 法学院 女 198077 63.0 78.0 58.5 F 98402021 赵勇 文学院 男 19791111 70.0 75.0 55.5 T 98402006 彭德强 文学院 男 197991 70.0 78.0 63.5 F 98410101 毕红霞 法学院 女 19791116 79.0 67.0 58.5 F 98401012 王维国 哲学院 男 19791026 63.0 86.0 55.5 F 98404006 刘向阳 西语学院 男 198024 67.0 84.0 56.5 F 这是一个简单的二维表格。实际上,这个二维表格就是 Visual FoxPro 中的“表” 。表存储 有关某个主题(如学生的基本情况)的信息。如表 31 所示,表中按列存放该主题不同种类的信息(如学生学号、姓名等),按行描述该主题“某一实例”的全部信息(特定学生的数据)。 表中的每一行称为一条记录,每一列称为一个字段。 表的第一行称为表头,表头中每列的值是这个字段的名称,称为字段名。 表有以下特征: (1)表可以存储若干条记录。 (2)每条记录可以有若干个字段,而且每条记录的字段结构相同,也就是具有相同的字 段名、字段类型和字段顺序。 (3)字段可以是不同的类型,以便存储不同类型的数据。 (4)记录中每个字段的顺序与存储的数据无关。 (5)每条记录在表中的顺序与存储的数据无关。 3.1.2 表中的数据类型 表中的每一个字段由于其数据代表的意义不同,因而都有特定的数据类型,如学号、出 生年月日、奖学金这 3 个字段的类型是各不相同的。在 Visual FoxPro 中,分别是用字符型、 日期型、 数值型 (或整型) 来表示。 熟悉各种数据类型可以更快地对表进行操作。 Visual FoxPro 6.0 表中的数据类型及简单的说明如下。 l 字符型:用于包含字母、汉字、数字型文本、符号及标点等一种或几种的字段,其中 的数字一般不是用来进行数学计算的,如电话号码、姓名、地址。 l 货币型:货币单位,最多可有 4 位小数,如果小数部分超过 4 位,则将通过四舍五入 只保留 4 位,如商品价格。 l 数值型:整数或小数,如成绩、工资、订货数量。如果有小数,需要指定小数位数, 小数点包含在字段宽度中,占一个字节。它还支持十六进制数值。 l 整型:不带小数点的数值。 l 日期型:用来存放日期数值,Visual FoxPro 6.0/5.0 支持 2000 年型的日期数值。格式 为:月/日/年,如输入 07/01/97。其中的年份如果输入 97,则系统默认为 1997,将光 标条移到表中该字段时就会显示“07/01/1997” ,如果输入小于 59 的数(如 45)则系 统默认为 2045,因此,最好输入完整的年份。 l 日期时间型:格式为月/日/年 时:分:秒 AM 或 PM,如 12/1/98 06:26:00 AM。 l 双精度型:双精度数值,如所要求的一些高精度数据。 l 逻辑型:当存储的数据只有两种可能时使用,用 True(.T.)和 False(.F.)表示,如 团员(.T.)与非团员(.F.) 、已婚(.T.)与未婚(.F.) 。 l 备注型:又称内存型,它的数据存储和表中其他数据是分开的,存放在扩展名为.FPT 的文件中,如个人简历等。 l 通用型: 可以链接或嵌入 OLE 对象, 如由其他应用程序创建的电子表格、 Word 文档、 图片。当链接 OLE 对象时,表中只包含指向数据的链接和创建 OLE 对象的应用程序 的链接;当嵌入 OLE 对象时,表中包含 OLE 对象复件及指向创建此 OLE 对象应用 程序的链接,如照片、图像等。 下面就以上面的示例为基础来介绍如何创建新表、处理和修改已有的表、数据库表和自 由表的特征、如何创建索引来对表中数据进行排序以及表的数值计算。
3.2 创建新表
在 Visual FoxPro 6.0 中,可按以下两个步骤创建一个新表。 步骤一:创建表的结构。即说明表包含哪些字段,每个字段的长度及数据类型。 步骤二:向表中输入记录。即向表中输入数据。 3.2.1 设计表结构 一个表中的所有字段组成了表的结构。在建表之前应先设计字段属性。字段的基本属性 包括了字段的名称、类型、宽度、小数位数及是否允许为空。 (1)字段名:表中的每个字段都是有名称的,如“学生”表中的“学号”字段, “学号” 即为这个字段的字段名。字段名可以是以字母开头的字母数字串,也可以是汉字。自由表中的 字段名不能超过 10 个字符,数据库表字段名长度不能超过 128 个字符。字段名中不接受空格 字符。 (2)字段类型:字段的数据类型应与存储其中的信息类型相匹配。数据库可以存储大量 的数据,并提供丰富的数据类型。这些数据可以是一段文字、一组数据、一个字符串、一幅图 像或一段多媒体作品。 当把不同类型的数据存入字段时, 就必须告诉数据库系统这个字段存储 什么类型的数据, 这样数据库系统才能对这个字段采取相应的数据处理方法。 Visual FoxPro 6.0 支持 13 种不同类型的数据,每种均有不同的目的和用途。应为表中的每个字段选取最适合于 该字段数据用途的数据类型。对那些可能超过 254 个字符或含有诸如制表符及回车符的长文 本,可以使用备注数据类型。 (3)字段宽度:设置以字符为单位的列宽。设置的列宽应保证能够存放所需的字段,但 也不必设置得太宽,否则将占用大量内存。 (4)小数位数:当字段类型为数值型和浮点型时,应为其设置小数位数。(5)是否允许为空:是否允许字段接受 NULL 值。NULL 值就是无明确的值。NULL 值不等 同于零或空格。一个 NULL 值不能认为比某个值(包括另一个 NULL 值)大或小、相等或不等。 例如,将表 31 所示的学生登记表中的字段属性定义为如表 32 所示。 表 32 XSDB 字段属性 字段名 字段类型 字段宽度 小数位数 学号 C 8 姓名 C 6 院系 C 10 性别 C 2 出生年月日 D 8 英语 N 5 1 计算机 N 5 1 奖学金 N 4 1 党员否 L 1 备注 M 4
3.2.2 通过表设计器创建新表 使用表设计器可以方便、直接地创建表,既可以通过项目管理器的“数据”选项卡中的 表设计器创建,也可以通过“文件”菜单中的表设计器命令创建。 创建表结构的操作步骤如下: (1)选择菜单“文件”→“新建”命令,打开“新建”对话框,如图 31 所示。选择“表” 单选按钮。 (2)单击“新建文件”按钮,打开“创建”对话框,如图 32 所示。 图 31 “新建”对话框 图 32 “创建”对话框 (3)在“创建”对话框中,可以确定表的类型、名称和保存位置,其中表的类型为“表 /DBF” 。在“输入表名”文本框中输入要建的表名,如“xsdb” ,单击“保存”按钮,即出现 “表设计器”对话框,如图 33 所示。 (4)定义“xsdb”表的字段。选择“表设计器”的“字段”选项卡,将光标放在“字段 名”下,输入第一个字段名“学号” ,这时,旁边的“类型” 、 “宽度” 、 “小数位数” 、 “索引” 等对应栏均有显示。单击“类型”列的下拉列表(当前的类型是“字符型” ),打开可选的数据 类型列表,在其中选择所需的数据类型。其他各字段如表 32 所示进行定义。 (5)创建完新表的表结构后,单击“确定”按钮,打开如图 34 所示的对话框。此时, 如果单击“否”按钮,则表示现在不想立即输入数据记录,只想创建一个空表的表结构,留待 以后再追加记录;如果单击“是”按钮,便会打开编辑窗口,开始输入每个学生的数据。 图 33 “表设计器”对话框 图 34 询问是否现在输入记录 “表设计器”对话框用来定义字段的属性,主要选项如下:
(1)移动按钮:这是位于最左侧的双向箭头按钮,用户输入 2 或 3 行后,使用此按钮可 以通过在列表内上下移动某一行来改变字段的顺序。 (2)字段名:指定字段名。 (3)类型:指定字段的数据类型,单击下拉箭头并从中选择一种数据类型。 (4)宽度:指定字符或数值字段能被存储的长度。 (5)小数位数:指定小数点右边的数字位数(适用于数值型和双精度型数据)。 (6)索引:指定字段的普通索引,用以对数据进行排序。 (7)NULL:选定此项时,该字段可接受 NULL 值。 (8) “插入”按钮:在选定字段之前插入一个新字段。 (9) “删除”按钮:从表中删除选定字段。 注意: (1)所取名称要符合语法规定。 (2)字段的数据类型应与存储其中的数据类型相匹配。 (3)字段的宽度要足够容纳欲显示的信息内容。 (4)为“数值型”或“浮动型”字段设置正确的小数位数。 (5)如果字段允许为空,应选中 NULL 选项。 (6) 输入表结构的过程中不要按回车键, 否则会退出表设计器。 应在输入完一列后按 Tab 键使光标移到下一列。 3.2.3 通过表向导创建新表 表向导提供了一个交互式界面,由一系列对话框组成。表向导是 Visual FoxPro 6.0 众多向 导中的一个,它能够基于典型的表结构创建表。在有样表可供利用的条件下,可以使用表向导 来定义表结构。 表向导允许用户从样表中选择满足需要的字段, 也允许用户在执行向导的过程 中修改表的结构和字段。利用表向导生成的表之后,用户仍可启动表设计器来进一步修改表。 例如,要建立一个“jsj” (计算机成绩)表,表中有 3 个字段: “学号”和“姓名”字段是 一样的,为此,可以利用“xsdb”表做样表,先用“表向导”来建立“jsj”表,然后再在表设 计器中定义其他字段,如图 35 所示。 1.打开“表向导”的步骤 (1)在“项目管理器”中选择“数据”选项卡,然后选择“自由表” ,单击“新建”按 钮,打开“新建表”对话框。 (2)在“新建表”对话框中选择“表向导” ,打开“表向导”对话框,如图 35 所示。 Visual FoxPro 6.0 中的各种向导有统一的界面: 显示 “步骤” 的下拉列表框和 “帮助” 、 “取 消” 、 “上一步” 、 “下一步”及“完成”共 5 个命令按钮在各种向导中都有。在对话框上部的下 拉列表框中有该向导的所有步骤,从中选择任一步骤可以立即转到所选步骤上;单击“帮助” 按钮,可看到该向导步骤的有关帮助信息;单击“取消”按钮,可使所有设置无效并取消该向 导的执行过程;单击“上一步”按钮,返回到该向导的前一步骤中,以便查看或修改前一步骤 中的设置;单击“下一步”按钮,进行该向导的下一步操作;单击“完成”按钮,将跳过该向 导当前步骤之后的所有步骤,完成向导的设置过程。这些步骤中的设置将取向导的默认值。 2.选择样表 在如图 35 所示的“表向导”的“步骤 1字段选取”对话框中,先从“样表”列表框中选
择样表,如图 36 所示。若没有所需的样表,则可通过单击“加入”按钮,在“打开”对话框 中选择所需的“学生登记表” ,将其加入到样表中,然后再选择它。 图 35 “表向导”对话框 图 36 选择样表和字段 3.选择字段 选择了样表以后,就可以通过“可用字段”列表框选择字段。 “字段选取”对话框中的 4 个字段选择按钮的意义如下: ►:将某一选定字段从“可用字段”列表框移入“选定字段”列表框。 ►►:将“可用字段”列表框中的全部字段移入“选定字段”列表框。 ◄:将某一选定字段从“选定字段”列表框移回“可用字段”列表框。 ◄◄:将“选定字段”列表框中的全部字段移回“可用字段”列表框。 如果希望使用其中的部分字段,只要单击要使用的字段名,然后单击►按钮,则此字段 被放入“选定字段”列表框中,重复此操作可以选出所有需要的字段;如果要使用所有字段, 则单击►►按钮即可。 相反,如果不需要已经选择的字段,可以单击“选定字段”列表框中不要的字段名,并 单击◄按钮,则此字段被从“选定字段”列表框中清除。 可通过选择不同的样表以便将这些表中的可选字段选入新的表中。这样可以很快建立一 个新表,并保持各表在相同字段上结构的一致性,有利于相关表之间的数据交换及建立联系。 现在,在“可用字段”列表框中选中“学号”字段,单击►按钮;再选中“姓名”字段, 单击►按钮。这样就将“学号”和“姓名”两个字段移入了“选定字段”列表框,如图 36 所示。 4.是否加入数据库 单击“下一步”按钮,进入向导的“步骤 1a选择数据库” ,如图 37 所示。如果建立的是 数据库表,则选择“将表添加到下列数据库”单选按钮,然后在下面的数据库下拉列表框中选 择一个需要的数据库;如果是基于数据库的表,可以使用数据库表中的样式、字段映射或主关 键字,也可以建立或使用数据库表中的关系。 因为现在建立的是自由表,所以选择“创建独立的自由表”单选按钮。 说明:表分为自由表和数据库表。有关数据库表的内容将在后面讲解。 5.修改字段 单击“下一步”按钮,进入向导的“步骤 2修改字段设置”对话框,如图 38 所示。这一 步可以对选定的字段进行所需的修改。可修改的内容如下:
图 37 选择是否加入数据库 图 38 修改字段设置 l 字段名称。 l 字段标题:在自由表中用字段名称作为字段标题。在数据库表中,字段标题可以不同 于字段名称。 l 字段类型、字段宽度、字段是否为 NULL,小数位数。 这里不需要修改“学号”和“姓名”字段,直接单击“下一步”按钮即可。 6.设置表索引和表间关系 在如图 39 所示的“步骤 3为表建索引”对话框中可以为表建立所需的索引。有关表索引 的问题在后面的章节再介绍。 如果创建的是数据库表,单击“下一步”按钮,将进入“步骤 3a建立关系”对话框;如 果创建的是自由表,则直接进入“步骤 4完成”对话框,如图 310 所示。 图 39 设置表索引 图 310 “步骤 4完成”对话框 7.完成表结构的创建 如果认为所建立的表不合适,可以单击“上一步” 按钮,回到以前的步骤并重复上述过程。如果不想建新 表,单击“取消”按钮。 选择“保存表以备将来使用” 、 “保存表,然后浏览 该表”或“保存表,然后在表设计器中修改该表”中任 一个单选按钮,然后单击“完成”按钮,都可打开“另 存为”对话框,如图 311 所示。在“另存为”对话框中 输入表名 jsj,单击“保存”按钮即建立起了“jsj”表, 图 311 “另存为”对话框
只是此时的“jsj”表中只有两个字段: “学号”和“姓名” 。 保存完毕后,若选择的是“保存表以备将来使用”单选按钮,则返回 Visual FoxPro 6.0 的主 界面;若选择的是“保存表,然后浏览该表”单选按钮,则打开“浏览”对话框,用户可在其中 输入记录;若选择的是“保存表,然后在表设计器中修改该表”单选按钮,则打开“表设计器” 对话框,可在其中对表的结构作进一步的修改。在这里选择“保存表,然后在表设计器中修改该 表”单选按钮,然后在弹出的“另存为”对话框中输入表名“jsj” ,单击“保存”按钮,然后在“表 设计器”对话框中按照前面的介绍定义其他各字段(如计算机、笔试、上机)即可。 3.2.4 输入记录与浏览表中的信息 创建好表结构以后,还需输入表中的数据。Visual FoxPro 6.0 中有以下两种输入数据的 方法。 1.在创建表时输入 每次创建完一个新表的表结构后,当单击“确定”按扭,就会出现一个如图 34 所示的询 问对话框。单击“是”按钮,便会出现一个编辑窗口,这时可以在编辑窗口中输入每个学生的 数据。在输入每条记录的字段值时,只能输入对字段的数据类型有效的值。如果输入了无效数 据,则会在屏幕的右上角弹出一个信息框显示出错信息,在更正错误之前,无法将输入记录数 据的光标移动到其他的字段上。 输入完所有的记录后,可以单击编辑窗口右上角的“关闭”按钮,关闭编辑窗口,则输 入的数据就被保存到表中。 2.在表创建好以后输入 (1)打开浏览或编辑窗口。 如果在创建表时没有输入记录,可以在表创建好以后的任何时候输入记录。但在向已存在 的表中输入记录之前,应先打开该表。然后选择“显示”→“浏览”命令,进入浏览窗口,再 选择“显示”→“追加方式”命令,便可依次输入各学生信息,如图 312 所示。 图 312 “浏览”窗口 输入记录或浏览表中的记录都可以使用浏览窗口。当在浏览窗口中浏览一个表时,可以 用两种方式查看记录:浏览和编辑。可以选择“显示”→“浏览”/“编辑”命令切换显示 方式。 (2)输入备注型和通用型字段。 ① 输入备注型字段的数据。 如果要输入备注型字段的内容,可在浏览窗口中双击该字段,打开一个文本编辑窗口, 即可在其中输入备注型字段的内容。输入完毕后关闭该窗口即可。
② 输入通用型字段的数据。 通用型字段包括一个嵌入或链接的 OLE 对象。插入 OLE 对象的步骤如下(首先修改表结 构在 xsdb 中加入“照片”字段,类型为“通用型” )。 l 双击浏览窗口中的通用型字段,打开通用型字段输入窗口。 l 选择“编辑”→“插入对象”命令,打开“插入对象”对话框。插入的对象可以是多 种生成器形成的图片格式文件。 l 如果图片文件不存在,则选择“新建”选项,并在“对象类型”列表框中选择对象类 型,然后单击“确定”按钮,Visual FoxPro 6.0 就启动相应的应用程序,用户可以使 用这些应用程序创建新的 OLE 对象。 l 如果图片文件已经存在,选择“由文件创建”选项,在“插入对象”对话框中单击“浏 览”按钮,进入“浏览”对话框,选择所需文件后单击“插入”按钮,回到文件选择 对话框,这时“文件”框中将显示选中的图片文件的路径及文件名,单击“确定”按 钮,又回到输入窗口。 当选择从文件建立时,如果不是将文件实际插入到表中,而是建立链接,应选择“链接” 复选框,链接文件以后,如果源文件发生变化,这种变化将自动反映到表中。
3.3 浏览和编辑表中信息
3.3.1 修改已有表的结构 1.打开表及“表设计器” (1)选择“文件”→“打开”命令,将文件类型切换至表,找到要打开的表并将其打开。 (2)选择“显示”→“表设计器”命令,和创建表结构时一样,表设计器中显示了表的 结构。 2.表设计器中的“表”选项卡 打开表设计器后,先看一下“表”选项卡,如图 313 所示。 它显示了当前表设计器所设计表的有关信息。这个表有 100 条记录,共 12 个字段,每条 记录长 64 个字节。需要注意的是,在表设计器中输入表结构的各字段总长度为 63,而这里是 64,其中多出的一个字节是留做存放“删除”标志用的。 下面选择“字段”选项卡,看一下如何对表结构进行修改,如图 314 所示。 图 313 “表”选项卡 图 314 “字段”选项卡3.在表中增加字段 (1)如果要在最后增加字段,在表设计器的“字段”选项卡中最后一行直接输入即可。 如果想使增加的字段插入到某字段的前面, 可以在表设计器中将光标移到某字段, 单击 “插入” 按钮,就会在该字段前面插入一个名为“新字段”的字段,编辑该字段即可。 (2)在“字段名” 、 “类型” 、 “宽度” 、 “小数位数” 、 “索引” 、 “NULL”等列中,输入或 选择相应内容,然后单击“确定”按钮,最后单击“是”按钮,将改变的表结构保存即可。 4.删除表中的字段 选定该字段后,单击“删除”按钮即可。 5.改变字段顺序 在表设计器中,被选中的字段左边有一个上下方向的双向箭头,将鼠标指针移到该处, 指针也变成了双向箭头的形状,此时拖动鼠标上下移动即可改变这个字段在表中的位置。 3.3.2 添加新记录 若想在表中快速加入新记录,可以将浏览/编辑窗口设置为“追加方式”状态。在“追加 方式”中,文件底部显示了一组空字段,用户可以在其中输入新记录。 3.3.3 删除记录 在 Visual FoxPro 中,删除表中的记录共有两个步骤。首先是单击每个要删除记录左边的 小方框,标记要删除的记录,如图 315 所示。 图 315 标记要删除的记录 标记记录并不等于删除记录。要想真正地删除记录,还应选择“表”→“彻底删除”命 令。当出现提示,询问是否想从表中移去已删除的记录时,单击“是”按钮即可。 除了单击鼠标做删除标记外,还可以通过在“删除”对话框中设置条件,有选择地删除 一组记录。步骤如下: (1)选择“表”→“删除记录”命令,出现“删 除”对话框,如图 316 所示。 (2)在其中输入删除的范围或条件(如删除所有 英语成绩低于 60 分的记录),单击“删除”按钮,符合 条件的记录将打上删除标记。 (3)选择“表”→“彻底删除”命令即可。 图 316 “删除”对话框
3.3.4 在表中移动记录指针 表的内部有一个记录指针,当打开表文件时,指针将指向首条记录。当对记录进行操作 时,记录指针将会移动,指向当前记录。 下面看一下怎样查看不同的记录。 当打开浏览/编辑窗口时, Visual FoxPro 的菜单会发生变化, 增加了 “表” 菜单。 这是 Visual FoxPro 的特点,菜单不是固定不变的,它会随着打开项目的不同而有所变化。 选择“表”→“转到记录”命令,可以看到 6 个子命令,如图 317 所示。 如果选择“第一个” 、 “最后一个” 、 “下一个” 、 “上一个”选项,会自动转到相应的记录。 如果选择“记录号”子命令,会弹出一个对话框,输入记录号后,单击“确定”按钮就 可以转到相应记录。 如果选择“定位”子命令,会弹出“定位记录”对话框,如图 318 所示。 图 317 “表”菜单 图 318 “定位记录”对话框 打开“作用范围”下拉列表框,可以看到有 All、Next、Record、Rest 四个选项。 默认的 All 指全部记录;Next 配合其右边的数字(如 8),表示对从当前记录起以下多少 个记录进行操作;Record 配合其右边的数字,作用与上面的“记录号”相同;Rest 表示对从 当前记录开始,到文件的最后一个记录为止的所有记录进行操作。 For、While 文本框是可选项,可以输入或选择表达式,以表示操作的条件。其右边的 按 钮是表达式生成按钮,单击它会弹出对话框,以方便选择操作条件。 For、While 虽然都表示操作条件,但也有区别:For 对满足表达式条件的所有记录进行操 作; While 则从表中的当前记录开始向下顺序判断, 遇到第一个不满足条件的记录就停止操作, 而不管其后是否还有满足条件的记录。例如下面两条命令: Browse Next 9 For 英语>85
Browse Next 9 While 英语>85
前者表示的是从当前记录后的 9 个记录中所有英语成绩高于 85 分的记录都显示;而后者 则遇到一个符合条件的显示一个, 当遇到英语成绩不高于 85 分的记录终止, 不再向下显示 (其 中,Browse 是记录浏览命令,作用是将符合条件的记录显示在浏览窗口中)。 3.3.5 定制浏览窗口 可以按照不同的需求定制浏览窗口,可以重新安排列的位置、改变列的宽度、显示或隐 藏表格线或把浏览窗口分为两个窗格。
1.改变列宽和行高 当鼠标位于行标头或列标头区的两行或两列的中间时,鼠标将变成上下方向或左右方向 的双向箭头,这时拖动鼠标就可以改变浏览窗口中记录的行高或字段的列宽。 2.调整字段顺序 在浏览窗口中可以使用鼠标把某一列移动到窗口中新的位置上,从而改变字段在浏览窗 口中的排列顺序。将鼠标指向列标头区要移动的那一列上,鼠标指针变为向下的箭头,将列标 头拖到新的位置上即可。 注意:在浏览窗口改变列宽和列的排列顺序不会影响字段的实际结构。 3.打开或关闭网格线 选择“显示”→“网格线”命令,可以显示或隐藏浏览窗口中的网格线。 4.拆分浏览窗口 利用拆分条拆分浏览窗口可以查看同一表中的不同区域的数据,拆分条位置如图 319 所示。 将鼠标指向窗口左下角的拆分条,这时鼠标指针变为左右箭头对接的形状,将拆分条拖 到所需的位置上即可,如图 320 所示。 图 319 拆分条的位置 图 320 拆分窗口 若要调整拆分窗口的大小,只需向左或向右拖动拆分条即可改变窗口的相对大小。 默认情况下,两个窗口是链接的,即在一个窗口中选择了不同的记录,这种选择也会反 映到另一个窗口中。 取消“表”菜单中“链接分区”的选中状态,可以中断两个窗口之间的联系,使它们的 功能相对独立。这时滚动某一个窗口,不会影响到另一个窗口的显示内容。
3.4 表的索引与排序
Visual FoxPro 中的索引和书中的索引类似。书中的索引是一份页码的列表,指向书中的 页号。表索引是一个记录号的列表,它存储了一组记录指针指向待处理的记录,并确定了记录 的处理顺序。索引并不改变表中所存储数据的顺序,它只改变了 Visual FoxPro 读取每条记录 的顺序。 对于已经建好的表,索引可以帮助用户对其中的数据进行排序,以便加速检索数据的速 度;可以快速显示、查询或者打印记录;还可以选择记录、控制重复字段值的输入并支持表间 的关系操作。 3.4.1 索引的类型 索引有以下 4 种类型。主索引:可确保字段中输入值的唯一性并决定处理记录的顺序。可以为数据库中的每一 个表建立一个主索引。如果某个表已经有了一个主索引,可以继续添加候选索引。 候选索引:像主索引一样要求字段值的唯一性,并决定了处理记录的顺序。在数据库表 和自由表中均可为每个表建立多个候选索引。 普通索引:也可以决定记录的处理顺序,但是允许字段中出现重复值。在一个表中可以 加入多个普通索引。 唯一索引:为了保持同早期版本的兼容性,还可以建立一个唯一索引,以指定字段的首 次出现值为基础,选定一组记录,并对记录进行排序。 3.4.2 各种类型索引的使用 通过建立和使用索引,可以提高完成某些重复性任务的工作效率,如对表中的记录排序及建 立表间关系等。根据所建索引类型的不同,可以完成不同的任务,如表 33 所示。 表 33 各类型索引的使用 使用的索引 完成的任务 使用普通索引、候选索引或主索引 排序记录,以便提高显示、查询或打印的速度 对数据库表使用主索引或候选索引,对自由表使用 候选索引 在字段中控制重复值的输入并对记录排序 下面以控制字段中重复值的输入为例介绍建立索引的方法。 在 xsdb 表中,每个学生的“学号”字段值必须保证唯一,那么以学号建立“主索引”或 “候选索引”即可保证其值唯一。 注意:对自由表只能建立候选索引。对数据库表可以建立主索引或候选索引,并且对于 一个数据库表,主索引只能建一个,候选索引可以建多个。 建立索引的步骤如下: (1)在“表设计器”中选择“索引”选项卡。 (2)在“索引名”文本框中输入索引名。如果在“字段”选项卡中设置了索引,则索引 名将自动出现。 (3)在“类型”列表中选定索引类型,如选择“候选索引”选项。 (4)在“表达式“文本框中输入作为记录排序依据的字段名,或者通过单击表达式框后 面的按钮,显示表达式生成器来建立表达式。 (5)若想有选择地输出记录,可在“筛选”文本框中输入筛选表达式,或者单击该框后 面的按钮来建立表达式。如想显示英语低于 60 分的记录,则在“筛选”文本框中选择或输入 “英语<60” 。 (6)索引名左侧的箭头按钮表示升序或降序,箭头方向向上时按升序排序,向下时则按 降序排序。 (7)单击“确定”按钮。 建好表的索引后,便可以用它来为记录排序。下面是查看索引后的逻辑排序步骤: (1)打开已建好索引的表。 (2)单击“浏览”按钮。 (3)选择“表”→“属性”命令。
(4)在“索引顺序”文本框中选择要用的索引名。 (5)单击“确定”按钮。 显示在浏览窗口中的表将按照索引指定的顺序排列记录。选定索引后,通过运行查询或 报表,还可对它们的输出结果进行排序。 3.4.3 用多个字段进行索引 为了提高对多个字段进行筛选的查询速度,可以在索引表达式中指定多个字段对记录进 行排序。步骤如下: (1)打开“表设计器”对话框。 (2)在“索引”选项卡中输入索引名和索引类型。 (3)在“表达式”框中输入表达式,其中列出要作为排序依据的字段。例如,如果要按 照院系、姓名的升序对记录进行排序,可以用“+”号建立“字符型”字段的索引表达式:院 系+姓名。 (4)单击“确定”按钮。 如果想用不同数据类型的字段作为索引,可以在非“字符型”字段前加上 STR(),将它转 换成“字符型” 。例如,先按“院系”字段排序,再按“英语”字段排序。在这个表达式中, “英语”是一种数值型字段, “院系”是一个字符型字段,组成的表达式如下: 院系+STR(英语,5,1) 注意:字段索引的顺序与它们在表达式中出现的顺序相同。如果用多个“数值型”字段 建立一个索引表达式,索引将按照字段的和值排序。例如,如果要按照英语、计算机的升序对 记录进行排序,可以用“+”号建立索引表达式:英语+计算机,其实现的排序效果是按英语 与计算机的成绩之和进行排序。 3.4.4 排序 前面介绍的是利用索引进行逻辑排序,也可以利用 SORT 命令进行物理排序。 1.命令格式 SORT TO <新表文件名> ON <字段名> [ASC/DESC][FOR<条件>] 2.举例 USE XSDB SORT TO NPX ON 院系 FOR 性别= "男" 对所有的男同学按院系的升序排序,生成一个新的表 NPX.DBF,排序后并不改变原表 XSDB 的顺序。 可以通过下面命令查看新生成的表: USE NPX BROWSE
3.5 表的数值计算
Visual FoxPro 6.0 提供了对表中数值型字段进行统计和计算的几个命令,下面分别介绍。3.5.1 纵向求和 SUM 1.命令格式 SUM [<数字型字段名> [TO <内存变量名表>][<范围>][FOR <条件>]] 2.命令功能 在当前表中,凡是在指定范围内指定条件的记录,可计算指定的数值型字段的代数和, 并分别将计算结果依次存入指定的内存变量中。 3.说明 如果不选择[TO <内存变量名表>],则计算结果不被保存,后面不能引用其计算结果;如果 任何参数都不选择,则当前表的所有数值型字段都能分别计算代数和,且计算结果不被保存。 4.举例 【例 31】计算奖学金总和。 USE XSDB SUM 奖学金 TO X ?X &&显示计算结果 【例 32】计算特定条件的奖学金总和。 SUM 奖学金 TO Y FOR 院系="文学院" 3.5.2 纵向求平均值 AVERAGE 1.命令格式 AVERAGE [<数字型字段名> [TO <内存变量名表>][<范围>][FOR <条件>]] 2.命令功能 在当前表中,凡是在指定范围内指定条件的记录,可计算指定的数值型字段的平均值, 并将计算结果依次存入指定的内存变量中。 3.说明 如果不选择[TO <内存变量名表>],则计算结果不被保存,后面不能引用其计算结果; 如果任何参数都不选择,则当前表的所有数值型字段都能分别计算平均值,且计算结果不被 保存。 4.举例 【例 33】计算英语平均成绩。 USE XSDB AVERAGE 英语 TO X ?X &&显示计算结果 【例 34】计算特定条件的平均成绩。 AVERAGE 英语,计算机 TO X,Y FOR 院系= "文学院" &&计算文学院学生的英语和计算机平均成绩 ?X,Y 3.5.3 统计记录数 COUNT 1.命令格式 COUNT [TO <内存变量名>[<范围>][FOR <条件>]]
2.命令功能 统计当前表中指定范围内,符合指定条件的记录个数。 3.说明 如果不选择[TO <内存变量名>],则计算结果不被保存,后面不能引用其计算结果。如果 任何参数都不选择,则统计当前表中所有记录数,且计算结果不被保存。 4.举例 【例 35】统计 XSDB 中记录个数(即总人数)。 USE XSDB COUNT TO X ?X 【例 36】统计表中所有男生的人数。 COUNT TO Y FOR 性别="男" ?Y
3.6 多表的操作
3.6.1 工作区的概念 1.工作区号与别名 为了能够同时使用多个表,引入了工作区的概念。Visual FoxPro 6.0 提供了多达 32767 个 工作区,每个工作区都有一个工作区号,分别用 1~32767 表示,其工作区 1~10 还分别对应 有别名 A~J。系统规定用工作区号作为各个工作区的标识符,即数字 1~32767;同时还规定, 可以用工作区的别名作为工作区的标识符,A~J 这 10 个字母是工作区的别名,因此,单个字 母 A~J 不可用来作为表的文件名,它是系统的保留字。 每个工作区中同时只能打开一个表,在一个工作区中打开其他的表时,原来在该工作区 中打开的表将自动关闭。若要同时使用多个表,就要使用多个工作区。每个打开的表也都有一 个别名,当用命令“USE <表文件名>”打开表时,系统默认的表的别名就是该表的主文件名。 如果在打开表时,在 USE 命令后面使用了 ALIAS 参数指定了表的别名,则可为表另外起一个 别名,这时的表文件名就不再是表的别名。命令如下: USE <表文件名> [ALIAS <别名>] [IN <工作区号/工作区别名/表别名>] 2.在“数据工作期”窗口查看工作区 (1) “数据工作期”窗口。选择“窗口”→“数 据工作期”命令或在命令窗口中输入 SET 命令, Visual FoxPro 6.0 打开“数据工作期”窗口,如图 321 示,并显示在当前数据工作期中的工作区中打 开的表的别名。 (2)在工作区中打开/关闭表。在“数据工作 期”窗口中打开表的步骤如下: 1)在“数据工作期”窗口中单击“打开”按钮, 弹出“打开”对话框。 2)在“打开”对话框中选择要打开的表,单击“确定”按钮。 图 321 “数据工作期”窗口在“数据工作期”窗口中关闭表的步骤:在“数据工作期”窗口中选定要关闭的表别名, 然后单击“关闭”按钮。 当在同一工作区中打开其他表时,会自动关闭已打开的表。 3.6.2 选择工作区的命令 1.命令格式 SELECT <工作区号>/<别名>/0 2.命令功能 选择或切换一个工作区作为当前工作区。 3.说明 (1)选择一个工作区作为当前工作区,在其中打开表或使该工作区已打开的表成为当前表。 (2)要选择的工作区,可使用工作区号、工作区的别名或表的别名。 (3)若选择 0(零),则系统自动选取当前未使用的区号最小的工作区作为当前工作区。 4.举例 【例 37】选择工作区。 SELECT 2 USE JSJ SELECT C USE XSDB 3.6.3 使用 USE 命令指定工作区打开表 1.命令格式 USE <表名> IN <工作区号>/<别名> 2.命令功能 使用区号或别名在指定工作区中打开表文件。 3.说明 (1)别名可以是工作区的别名,也可以是表的别名。 (2)在当前工作区调用其他工作区的数据时,非当前工作区中的表文件的字段名前要加 上该表文件的<别名>和“>”符号,或者是<别名>和符号“.” 。格式如下: <别名> ><字段名> 或<别名>.<字段名> 4.举例 【例 38】在 2 号工作区打开 YY.DBF,在 3 号工作区打开 XSDB.DBF。 USE YY IN 2 USE XSDB IN 3 SELE C DISPLAY 学号,姓名,B.听力,YY.口语 3.6.4 建立表的关联 如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记录指针时,其他表的 记录指针是不会随之移动的。如果要想其他表的记录指针也随之移动,则要建立表间的关联。 关联就在两个或两个以上的表之间建立某种连接,使其表的记录指针同步移动。用来建
立关联的表称为父表,被关联的表称为子表。建立两表间的关联后,父表的记录指针将带动子 表的记录指针随之移动(关联表达式值相同)。
1.命令格式
SET RELATION TO [<关联表达式 1>] INTO <工作区>/<别名> [,<关联表达式 2> INTO < 工作区>/<别名>…]] [ADDITIVE] 2.命令功能 在两个表之间建立关联。 3.说明 (1)<关联表达式 1>是子表的索引表达式。 (2)<关联表达式 2>通常是两个表的公共字段。 (3)建立关联之前,子表必须建立索引或打开相应索引文件。 (4)ADDITIVE:建立关联时,如果命令中不使用 ADDITIVE 子句,则父表之前建立的 关联将自动解除;若使用了 ADDITIVE 子句,则父表之前建立的关联仍然保留。 4.举例 【例 39】将两个工作区中的表建立关联。 SELE B USE YY INDEX ON 学号 TO XHSY SELE C USE XSDB SET RELATION TO 学号 INTO B DISPLAY 学号,姓名,B.听力,YY.口语 3.6.5 解除关联 用 SET RELATION 命令建立关联之后,当父表的记录指针移动时,子表的记录指针也相 应要移动,并且将要引起读/写磁盘操作,这样会降低系统的性能。因此,当某些关联不再使 用或暂时不再使用时,应及时解除关联,以提高系统的运行速度。 1.命令格式
命令格式 1:SET RELATION TO
命令格式 2:SET RELATION OFF INTO <工作区号>/<别名> 2.命令功能 功能 1:解除当前工作区表与其他工作区表建立的关联。 功能 2:解除当前工作区与由<工作区号>/<别名>指定的工作区中表建立的关联。该命令 必须在父表所在的工作区执行。例如,要关闭当前工作区与 C 工作区建立的关联。可以通过 下述命令进行: SET RELATION OFF INTO C 说明: (1) 当用 USE 关闭某些表时, 系统将自动解除与它建立的关联。 如果关闭的是父表文件, 则它与子表的关联将全部被解除。 (2)当关闭子表时,将自动解除与父表建立的所有关联。
3.7 用命令对表进行操作
3.7.1 打开表命令 1.命令格式 USE <文件名> [INDEX <索引文件名表>][ALIAS<别名>][EXCLUSIVE] 2.命令功能 打开当前工作区内的表时, 可打开相应的索引文件。 如果表中含有备注型字段, 相应的.FPT 文件也同时打开。当打开另一个表时,当前工作区中先前使用的表将自动关闭。 ALIAS <别名>选择项用来给表文件指定一个别名。如果缺省此项,表文件名本身就是 别名。 EXCLUSIVE 表示以独占方式使用表,即不允许其他用户在同一时刻也使用该表。 3.举例 【例 310】打开 XSDB 表,并为其命名别名为 XS。 USE XSDB ALIAS XS 3.7.2 关闭表命令 1.USE 命令 命令格式:USE 功能:关闭当前工作区中打开的表和相应的索引。 2.CLEAR ALL 命令 命令格式:CLEAR ALL 功能:关闭所有已打开表、索引和格式文件,释放所有的内存变量,选择工作区 1 为当 前工作区。 3.CLOSE 命令 命令格式:CLOSE ALL / DATABASE 功能: CLOSE ALL 关闭所有类型的文件, 选择工作区 1 为当前工作区。 CLOSE DATABASE 关闭所有已打开的表文件、索引文件和格式文件,选择工作区 1 为当前工作区。CLOSE 命令不 释放内存变量。 4.QUIT 命令 命令格式:QUIT 功能:关闭所有打开的文件,结束 Visual FoxPro 并返回 Windows 操作系统。 3.7.3 显示表记录的命令 1.LIST 命令 命令格式:LIST [<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>] [TO PRINT][OFF] 功能:以列表的形式显示表的全体或部分记录及字段内容。 <范围>为 ALL、RECORD <n>、NEXT <n>、REST 中的一个参数。不指定时,默认范围为 ALL。 FIELDS <字段名表>用来指定显示的字段名、内存变量名和表达式,其中 FIELDS 可以省 略。对于备注型字段及通用字段不显示具体内容。若要显示备注型字段数据,则必须在<字段 名表>中明确指出该字段名。 例如:LIST 姓名,简历 其中“简历”为表文件结构中所定义的备注型字段名。 指定 FOR<条件>、WHILE<条件>时,将显示满足条件的记录。同时指定 WHILE<条件> 优先于 FOR<条件>。 指定 TO PRINT 时,将命令结果送到打印机上输出。 【例 311】带有选择项的 LIST 命令用法示例。 USE XSDB
LIST FIELDS 学号, 姓名, 性别, 生年月日, 院系 FOR 性别="男" LIST FOR 性别=[女] .AND. 院系=[文学院]
2.DISPLAY 命令
命令格式:DISPLAY [<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>] [TO PRINT] [OFF]
功能:以列表的形式显示表的全体和部分记录及字段内容。
DISPLAY 命令与 LIST 命令格式相同,功能也基本相同。它们的区别是 LIST 默认<范围> 时, 显示全体记录; DISPLAY 默认<范围>时, 只显示当前记录。 LIST 连续显示记录; 而 DISPLAY 分屏显示记录,当显示满屏后暂停,提示按任意键后继续显示。 3.7.4 利用已有的表建立新表 1.COPY STRUCTURE 命令 命令格式:COPY STRUCTURE TO <新文件名>[FIELDS<字段名表>] 功能:复制当前打开的表结构到新的表文件中,但不复制任何数据记录。 【例 312】复制“学生登记表”的结构,保存在“XSDB1.DBF”文件中。 USE XSDB
COPY STRUCTURE TO XSDB1 2.COPY TO 命令 命令格式:COPY TO <新文件名>[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条 件>] 功能:将打开表的全部或部分结构及数据复制到新表中。 若未指定<范围>、FOR<条件>、WHILE<条件>时,复制所有的记录。未选择 FIELDS<字 段名表>时,则复制所有的字段。选用 FIELDS<字段名表>时,便指定了新生成的表中所含有 的字段及字段之间的前后顺序。 如果同时存在 FOR 子句和 WHILE 子句,则 WHILE 子句优先。 【例 313】复制“XSDB”表中“学号” 、 “姓名” 、 “性别” 、 “出生年月日”4 个字段到新 表“XSDB2.DBF”中。 USE XSDB
3.7.5 修改表结构的命令 命令格式:MODIFY STRUCTURE 功能:打开表设计器窗口,显示当前表的结构,并可直接修改其结构。 修改表结构的表设计器窗口和建立表时完全一样。 3.7.6 记录定位命令 这里介绍两条专用的记录定位命令:GO/GOTO 命令和 SKIP 命令。 1.绝对定位 GO/GOTO 命令 命令格式 1:GO/GOTO TOP/BOTTOM 功能:记录指针定位到表的第一条记录或最后一条记录。 命令格式 2:GO/GOTO <数值表达式> 功能:记录指针定位到表的某一条记录,命令中<数值表达式>的值就是指针定位的指定 记录号。 【例 314】定位指针。 USE XSDB GO BOTTOM && 记录指针定位到表的最后一条记录 GO 3 && 记录指针定位到表的第三条记录 GO TOP && 记录指针定位到表的第一条记录 2.相对定位 SKIP 命令 命令格式:SKIP [<数值表达式>] 功能:将记录指针从当前记录位置向下或向上移动,移动的记录数等于<数值表达式>的 值。<数值表达式>值为正时向下移动,<数值表达式>值为负时向上移动。<数值表达式>默认 时,表示向下移动一条记录。 【例 315】用 SKIP 命令移动指针到指定的记录,其中 RECNO()函数的返回值是当前记 录指针的值。 USE XSDB ?RECNO() 1 SKIP 5 ?RECNO() 6 SKIP 3 ?RECNO() 3 3.7.7 记录的删除命令 1.逻辑删除 DELETE 命令
命令格式:DELETE [<范围>] [FOR<条件>] [WHILE<条件>] 功能:在当前表文件中对要删除的记录加上删除标记。
默认<范围>选择项,则仅对当前记录加上删除标记。 【例 316】在 XSDB 表中,为性别为“女”的记录加删除标记。 USE XSDB DELETE FOR 性别="女" 2.恢复逻辑删除 RECALL 命令 命令格式:RECALL [<范围>][FOR<条件>][WHILE<条件>] 功能:在当前表文件中去掉删除标记,恢复被删除的记录。 说明:RECALL 命令可以恢复所有被 DELETE 命令做过删除标记的记录,但不能恢复用 PACK 命令和 ZAP 命令删除的记录。若默认<范围>选择项,则仅恢复当前记录。 【例 317】删除所有非党员的记录,恢复所有被做过删除标记的男生记录。 USE XSDB DELE FOR .NOT. 党员否 RECALL FOR 性别= "男" 3.物理删除 PACK 命令 命令格式:PACK 功能:把当前表中带删除标记的记录真正删除。 说明: 使用 PACK 命令之后, 带有删除标记的记录从表中永久地删除, 不能再用 RECALL 和其他命令恢复,因此使用时要特别慎重。 【例 318】删除指定范围的记录并真正清除。 USE XSDB DELE FOR 计算机<60 PACK 4.清空表 ZAP 命令 命令格式:ZAP 功能:从打开的表中删除所有的记录,只保留表的结构。 说明:用该命令删除的记录将无法恢复,使用时要特别小心。 【例 319】永久删除表记录,只保留表结构。 USE XSDB1 ZAP 3.7.8 替换 REPLACE 命令
命令格式:REPLACE [<范围>]<字段名 1>WITH<表达式 1>[,<字段名 2>WITH<表达式 2>…][FOR<表达式>][WHILE<表达式>]
功能:用来替换打开表中指定字段的数据。
说明:当范围默认时,只替换当前记录。<字段名 n>与<表达式 n>的数据类型必须一致。 【例 320】为“XSDB”表计算所有学生的平均分和总分。
USE XSDB
REPLACE ALL 总分 WITH 计算机+英语, 平均分 WITH 总分/2
【例 321】平均成绩 80 分的奖学金为 60 元,两科成绩均为 90(含 90)分以上的增 加 30 元。
REPLACE 奖学金 WITH 60 FOR 平均分>=80
3.7.9 条件查询 LOCATE 命令 命令格式:LOCATE [<范围>] [FOR <条件>] [WHILE <条件>] CONTINUE 功能:按顺序搜索表,找到满足条件的第一个记录。 说明:(1)若 LOCATE 发现一个满足条件的记录,就将记录指针定位在该记录上。可以使 用 RECNO()返回该记录的记录号,同时使用 FOUND()函数返回“真” ,EOF()函数返回“假” 。 如果没有找到,则将记录指针指向范围的末尾,如果指定范围为 ALL,则 EOF()为.T.。
(2)CONTINUE 是用在 LOCATE 之后继续查找满足同一条件的记录的命令,CONTINUE 命令移动记录指针到下一个与<条件>逻辑表达式相匹配的记录上。 如果 CONTINUE 命令成功地 查找到一条记录, RECNO()函数将返回该记录的记录号, 并且 FOUND()函数返回逻辑 “真” 值, EOF()返回逻辑“假”值。
3.7.10 建立单索引文件的命令
命令格式:INDEX ON <索引关键字表达式> TO <索引文件名> [UNIQUE] FOR <条件 >[ADDITIVE] 功能:对当前表中满足条件的记录,按<索引关键字表达式>的值建立一个索引文件,并 打开此索引文件,其默认的文件扩展名为.idx。 说明:单索引文件总是按升序的顺序排列。对于一个表文件,允许建立多个索引文件。 【例 322】建立单索引文件。 USE XSDB INDEX ON 性别+DTOC(生年月日,1) TO SY 将生成一个名为 SY.IDX 的单索引文件。 3.7.11 建立复合索引文件的命令 命令格式:INDEX ON <索引关键字表达式> TAG <标记名> [OF<复合索引文件名>][FOR <条件>] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE][ADDITIVE] 功能:建立和修改复合索引文件,并打开此索引文件,其默认的文件扩展名为.cdx。 说明:(1)执行上述命令时,系统先检查指定的复合索引文件是否存在,若存在,在此 文件中增加一个索引标记,若不存在,则建立此索引文件。 (2)标记名的命名规则与变量名的命名规则相同。 (3) 单索引文件只能按升序排列, 而复合索引文件既可以按升序排列也可以按降序排列, 选择 DESCENDING 为降序,选择 ASCENDING 为升序,默认时为升序。 (4)此命令建立的索引与在表设计器中建立的索引相同。 【例 323】为数据表 XSDB.dbf 按计算机成绩从低到高建立单索引文件 xsjsj.idx,按英语 从高到低建立单索引文件 xsyy.idx。 USE XSDB
INDEX ON 计算机 TO xsjsj && 单索引文件总是按索引关键字升序排列
LIST && 记录已按计算机成绩升序排列
INDEX ON –英语 TO xsyy;
&&给英语成绩取负号后使索引关键字表达式按升序排列,以求英语成绩按降序排列
【例 324】为 xsdb.dbf 按下列要求建立结构复合索引文件,如图 322 所示。 图 322 结构复合索引的建立 (1)记录以姓名降序排列,索引标识为 xm,索引类型为普通索引。 (2)记录以出生年月日升序排列,索引标识为 snyr,索引类型为唯一索引。 (3)记录按院系降序排列,院系相同的按出生日期降序排列,索引标识为 yxsnyr,索引 类型为候选索引。 USE XSDB INDEX ON 姓名 TAG xm DESCENDING LIST INDEX ON 生年月日 TAG snyr UNIQUE LIST INDEX ON 院系+DTOC(生年月日) TAG yxsnyr DESCENDING CANDIDATE LIST 3.7.12 追加记录 APPEND 命令 命令格式:APPEND [BLANK] 功能:在当前表的末尾追加一些新记录或空记录。 说明:(1) 若选择 BLANK, 则追加一条空白记录, 以后可用 EDIT、 BROWSE、 REPLACE 等命令向空白记录填加数据。 (2)若表文件中原有 n 条数据记录,追加从第 n+1 条记录开始。 【例 325】在“XSDB”表的末尾追加一条空记录。 USE XSDB APPEND BLANK 3.7.13 插入记录 INSERT 命令 命令格式:INSERT [BLANK] [BEFORE] 功能:在打开表的任意位置插入新记录或空记录。 说明:(1)如果选择 BLANK 项,则插入一条空白记录,以后可用 BROWSE、EDIT、 向上箭头为升序索引, 向下箭头为降序索引 如果需要,可输入筛选 条件表达式 在“索引名”文本框 中输入索引标识名 在“类型”下拉列表 框中选定索引类型 在“表达式”文本框中输 入索引关键字表达式
REPLACE 等命令加入该记录的数据;若不选择 BLANK 项,则出现编辑界面,可以交互方式 输入新记录的值。 (2)如果选择 BEFORE 项,则在当前记录之前插入记录;若不选择 BEFORE 项,则在 当前记录之后插入记录。 【例 326】在“XSDB”表的第 6 条记录之前插入一条空记录。 USE XSDB GO 6
INSERT BEFORE BLANK 或: GO 5 INSERT BLANK 3.7.14 从其他表文件中追加数据 APPEND FROM 命令 命令格式:APPEND FROM <文件名> [FIELDS <字段名表>] [FOR <条件>] 功能:把指定表文件中的记录有条件或无条件地追加到当前表文件的末尾。 【例 327】在表文件 JSJ 中追加学号、计算机记录。 USE JSJ APPEND FROM XSDB FIELDS 学号,计算机 for 院系="文学院"
本章小结
本章首先介绍了在建立自由表之前应设计一张二维表,再根据二维表进行数据表的设计。 Visual FoxPro 提供了 3 种建立自由表的方法,即向导、设计器和命令,这里分别对这 3 种方法 作了详细说明。建立了自由表后,为了输入记录,可以采用浏览、编辑、追加及命令等多种方 式。表的操作与使用包括如何打开/关闭表、浏览表数据、修改表数据、过滤表数据、定位表 记录、删除表记录、恢复表记录以及对表结构的相关操作等内容。Visual FoxPro 提供了物理排 序和逻辑排序两种方法对表记录进行排序,其中逻辑排序方法(即索引方法)具有速度快、效 率高、大大减少数据冗余的优点,因而得到普遍采用。查询和统计是数据库应用的重要内容, 本章介绍了顺序查询和索引查询两种传统的查询方法, 以及对数据库中的数据进行统计计算的 相关命令。最后,对使用多个表涉及的工作区以及数据工作期的相关概念进行了阐述。本章是 全书的重点, 读者应认真掌握表的建立和操作方法以及索引的概念和操作, 这对后续数据库的 学习大有帮助。习题 3
一、选择题 1.在 Visual FoxPro 数据表中,记录是由字段值构成的数据序列,但数据长度要比各字段 宽度之和多一个字节,这个字节是用来存放( )的。 A.记录分隔标记 B.记录序号 C.记录指针定位标记 D.删除标记2.某表文件有姓名(C,6)、入学总分(N,6,2)和特长爱好(备注型)共 3 个字段,则该表文件 的记录长度为( ) 。 A.16 B.17 C.18 D.19 3.设表文件中共有 51 条记录,执行命令 GO BOTTOM 后,记录指针指向的记录号是 ( ) 。 A.51 B.1 C.52 D.EOF() 4.在 Visual FoxPro 中,关于自由表的叙述,正确的是( ) 。 A.自由表和数据库表是完全相同的 B.自由表不能建立字段级规则和约束 C.自由表不能建立候选索引 D.自由表不可以加入到数据库中 5.在 Visual FoxPro 中,下列关于表的叙述,正确的是( ) 。 A.在数据库表和自由表中,都能给字段定义有效性规则和默认值 B.在自由表中,能给表中的字段定义有效性规则和默认值 C.在数据库表中,能给表中的字段定义有效性规则和默认值 D.在数据库表和自由表中,都不能给字段定义有效性规则和默认值 6.以下字段中,无须用户在设计表结构时指定宽度的是( ) 。 A.字符型 B.浮点型 C.数值型 D.日期时间型 7.下列数据类型的字段中,在.DBF 文件中仅保存标记,其具体内容存放在.FPT 文件中 的是( ) 。 A.字符型 B.通用型 C.逻辑型 D.日期型 8.在下面的数据类型中,默认值为.F.的是( ) 。 A.数值型 B.字符型 C.逻辑型 D.日期型 9.在 Visual FoxPro 中,字段的数据类型不可以指定为( ) 。 A.日期型 B.时间型 C.通用型 D.备注型 10.不允许记录中出现重复索引值的索引是( ) 。 A.主索引 B.主索引、候选索引和普通索引 C.主索引和候选索引 D.主索引、候选索引和唯一索引 11.在 Visual FoxPro 中,通用型字段 G 和备注型字段 M 在表中的宽度都是( ) 。 A.2 个字节 B.4 个字节 C.8 个字节 D.10 个字节 12. 在 Visual FoxPro 中, 索引文件的扩展名有.IDX 和.CDX 两种, 下列描述正确的是 ( ) 。 A.两者无区别 B..IDX 是 FoxBASE 建立的索引文件,.CDX 是 Visual FoxPro 建立的索引文件 C..IDX 是单索引文件,.CDX 是复合索引文件 D..IDX 索引文件可以进行升序或降序排序 13.若对自由表的某字段值要求唯一,则应对该字段创建( ) 。 A.主索引 B.唯一索引 C.候选索引 D.普通索引 14.表文件 ST.DBF 中字段:姓名(C,6)、出生日期(D)、总分(N,5,1)等,要建立姓名、总 分、出生日期的复合索引,其索引关键字表达式应是( ) 。 A.姓名+总分+出生日期
B.姓名,总分,出生日期 C.姓名+STR(总分)+STR(出生日期) D.姓名+STR(总分)+DTOC(出生日期) 15. 工资表文件中有 10 条记录, 当前记录号为 5, 若用 SUM 命令计算工资而不给出范围, 那么该命令将( ) 。 A.只计算当前记录的工资值 B.计算全部记录的工资值之和 C.计算后 5 条记录的工资值之和 D.计算后 6 条记录的工资值之和 16.当前表中有基本工资、奖金、津贴、所得税和工资总额字段,都是 N 型。要将每个 职工的全部收入汇总后写入其工资总额字段中,应使用的命令是( ) 。
A.REPLACE ALL 工资总额 WITH 基本工资+奖金+津贴所得税 B.TOTAL ON 工资总额 FIELDS 基本工资,奖金,津贴,所得税 C.REPLACE 工资总额 WITH 基本工资+奖金+津贴所得税 D.SUM 基本工资+奖金+津贴所得税 TO 工资总额
17.学生表中“实验成绩”是逻辑型字段,该字段的值为.T.表示实验成绩为通过,否则
为没有通过。若想统计“实验成绩”没有通过的学生人数,应使用命令( ) 。
A.COUNT TO X FOR 实验成绩=.F. B.COUNT TO X FOR "实验成绩"=.F. C.COUNT TO X FOR 实验成绩="F" D.COUNT TO X FOR 实验成绩=".F. "
18.假设职称是某表文件中的一个字段,如果要计算所有正、副教授的平均工资,并将 结果赋予变量 PJ 中,应使用的命令是( ) 。
A.AVERAGE 工资 TO PJ FOR "教授"$职称
B.AVERAGE FIELDS 工资 TO PJ FOR "教授"$职称
C.AVERAGE 工资 TO PJ FOR 职称="副教授".AND.职称="教授" D.AVERAGE 工资 TO PJ FOR 职称="副教授".OR."教授"
19.不论索引是否生效,定位到相同记录上的命令是( ) 。 A.GO TOP B.GO BOTTOM C.GO 6 D.SKIP 20.刚打开一个空数据表时,用 EOF()和 BOF()测试,其结果一定是( ) 。 A..T.和.T. B..F.和.F. C..T.和.F. D..F..和 T. 21. 设当前数据表中包含 10 条记录, 当 EOF()为真时, 命令?RECNO()的显示结果是 ( ) 。 A.10 B.11 C.0 D.空 22.已知表中有字符型字段“职称”和“性别” ,要建立一个索引,要求首先按职称排序, 职称相同时再按性别排序,正确的命令是( ) 。
A.INDEX ON 职称+性别 TO ttt B.INDEX ON 性别+职称 TO ttt C.INDEX ON 职称,性别 TO ttt D.INDEX ON 性别,职称 TO ttt 23.有关 ZAP 命令的描述,正确的是( ) 。
A.ZAP 命令只能删除当前表的当前记录
B.ZAP 命令只能删除当前表的带有删除标记的记录 C.ZAP 命令能删除当前表的全部记录
D.ZAP 命令能删除表的结构和全部记录
24.有一学生表文件,且通过表设计器已经为该表建立了若干普通索引。其中一个索引 的索引表达式为姓名字段,索引名为 XM。现假设学生表已经打开,且处于当前工作区中,那
么可以将上述索引设置为当前索引的命令是( ) 。
A.SET INDEX TO 姓名 B.SET INDEX TO XM C.SET ORDER TO 姓名 D.SET ORDER TO XM
25.当前打开的图书表中有字符型字段“图书号” ,要求将图书号以字母 A 开头的图书记 录全部打上删除标记,通常可以使用命令( ) 。 A.DELETE FOR 图书号="A" B.DELETE WHILE 图书号="A" C.DELETE FOR SUBS(图书号,1,1)="A" D.DELETE FOR 图书号 LIKE "A%" 26.执行下面的命令后,函数 EOF()的值一定为.T.的是( ) 。 A.REPLACE 基本工资 WITH 基本工资+200 B.LIST NEXT 10 C.SUM 基本工资 TO SS WHILE 性别="女" D.DISPLAY FOR 基本工资>800 27.以下关于空值(NULL)的说法,正确的是( ) 。 A.空值等同于空字符串 B.空值表示字段或变量还没有确定值 C.VFP 不支持空值 D.空值等同于数值 0 28.命令 SELECT 0 的功能是( ) 。 A.选择编号最小的未使用工作区 B.选择 0 号工作区 C.关闭当前工作区的表 D.选择当前工作区 29.可以随着数据表文件的打开而自动打开的索引文件是( ) 。 A.单索引文件(.IDX) B.复合索引文件(.CDX) C.结构复合索引文件(.CDX) D.非结构复合索引文件(.CDX) 30.在 Visual FoxPro 系统中,.DBF 文件被称为( ) 。 A.数据库文件 B.表文件 C.程序文件 D.项目文件 31.Visual FoxPro 有两种类型的表:数据库中的表和( ) 。 A.自由表 B.独立表 C.表 D.关联表 32.自由表是独立于任何数据库的( ) 。 A.一维表 B.二维表 C.三维表 D.四维表 33.对于 TM_BMB 表,下面( )命令显示所有女同学记录。 A.LIST FOR !XB B.LIST FOR XB C.LIST FOR XB="女" D.LIST FOR XB=.F. 34.若 TM_BMB 表包含 50 条记录,在执行 GO TOP 命令后, ( )命令不能显示所有 记录。 A.LIST ALL B.LIST REST C.LIST NEXT 50 D.LIST RECORD 50
35.执行 USE TM_BMB(回车)SKIP 1 后,下列显示值一定是.F.的命令是( ) 。 A.?BOF() B.?EOF() C.?.T. D.?RECNO()=1 二、填空题 1.建立“学生情况”表结构时,如果最高奖学金不超过 120.58 元,奖学金字段的宽度和 小数位至少应为________。 2.在 Visual FoxPro 数据表管理系统中,备注型文件的扩展名是________。 3.假设考生表已经打开,表中有“年龄” (N 型)字段,要统计年龄小于 20 岁的考生人 数,并将结果存储于变量 M1 中,应该使用的完整命令是________。 4.在 Visual FoxPro 命令窗口中,要修改表的结构,应该输入命令________。 5.表 XS.DBF 中有日期型字段“出生日期” ,列出其中所有 12 月份出生的男同学记录: DISPLAY FOR ________.AND.性别="男"
6.某表有 50 个记录,其当前记录为 9 号记录,当执行了 SKIP 2*3 后,系统显示的记录 号为________。 7.一个有多条记录的表打开后,要在最后一条记录后增加一条空记录,应使用命令 ________。 8.已打开表文件,其中“出生日期”字段为日期型,年龄字段为数值型。要计算每人今 年的年龄并把其值填入“年龄”字段中,应使用命令________。 9. 要想在一个打开的表中物理地删除某些记录, 应先后使用的两个命令分别是________。 10.若能够正常执行命令 REPLACE ALL MYD WITH DATE(),说明字段 MYD 的类型是 ________。 11.当前数据库文件有 10 条记录,要在第 5 条记录后面插入 1 条新记录,应使用命令 ________。 12.把当前表当前记录的学号、姓名字段值复制到数组 A 的命令是: SCATTER FIELD 学号,姓名________ 三、上机操作题 1.练习建立表文件 在 E 盘根文件夹上建立 VFLX 文件夹,然后按下列步骤操作: (1)建立如表 34 所示的表结构。 表 34 表结构 字段名 字段类型 宽度 小数位数 学号 C 8 姓名 C 6 性别 C 2 入学日期 D 8 奖学金 N 4 1 团员否 L 1 爱好 M 4
(2)为该表建立以“学号”字段升序排序的候选索引。 (3)输入 3~4 条记录,内容自定。 (4)完成存盘,将此表命名为 XSH.DBF,存于 E 盘 VFLX 文件夹中。 2.表文件的基本操作 将 XSDB.DBF、YY.DBF、JSJ.DBF 复制到 VFLX 文件夹内,以备以下操作使用。以下除 最后一题均使用表文件 XSDB,假设 XSDB 已打开。 (1)使用 DISPLAY 命令显示当前记录。 (2)使用 DISPLAY 或 LIST 命令显示前 3 条记录。 (3)使用 DISPLAY 或 LIST 命令显示 6 号记录。 (4)使用 BROWSE 命令显示文学院所有男同学的记录。 (5)使用 BROWSE 命令显示 10 月 1 日出生的同学的姓名、性别和生日。 (6)使用 REPLACE 命令,对英语成绩在 90(包括 90)分以上的记录,将其奖学金增加 50 元。 (7)使用 COPY 命令,复制一个与 XSDB 表文件的结构完全相同的空表 KB.DBF。 (8)使用 COPY 命令,将表文件 XSDB 中所有党员的记录组成表文件 DY.DBF。 (9)使用 COUNT 命令统计女同学人数,并将结果存入变量 R 中。 (10)使用 AVERAGE 命令求文学院学生的英语平均成绩,并将结果存入变量 X 中。 (11)使用 SUM 命令求男生的奖学金总额,并将结果存入变量 Y 中。 (12)在数据工作期窗口中分别打开 XSDB.DBF、YY.DBF、JSJ.DBF 共 3 个表文件。