• 沒有找到結果。

Visual FoxPro数据库程序设计教程(第三版) - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "Visual FoxPro数据库程序设计教程(第三版) - 万水书苑-出版资源网"

Copied!
30
0
0

加載中.... (立即查看全文)

全文

(1)

数据表概述;数据类型、表结构的创建、修改与显示;表记录的显示、追加、 修改与删除等基本操作;表的索引与排序、数据计算、多表的操作等。 数据表是组成关系型数据库的基本单元,也是程序操作的数据对象。在编写程序之前需 创建表,设计表的结构和录入数据,以便为应用程序提供数据处理的对象。在数据表创建之后 也有大量的维护工作,如记录的增加、删除和修改等。 

3.1 数据表概述 

3.1.1 表的相关概念 表以记录和字段的形式存储数据,是关系型数据库管理系统的基本结构,是处理数据和 建立关系型数据库及应用程序的基本单元。 在日常的工作和生活中,遇到的数据中有很多都是以表格形式出现的,如表 3­1 所示就是 学生登记表中的一部分。 表 3­1  学生登记表 学号 姓名 院系 性别 出生年月日 英语 计算机 奖学金 党员否 备注  98402017  陈超群 文学院 男  1979­12­18  49.0  52.0  48.5  F  98404062  曲歌 西语学院 男  1980­10­1  61.0  67.0  55.5  F  97410025  刘铁男 法学院 男  1978­12­10  64.0  67.0  60.5  F  98402019  王艳 文学院 女  1980­1­19  52.0  78.0  53.5  F  98410012  李侠 法学院 女  1980­7­7  63.0  78.0  58.5  F  98402021  赵勇 文学院 男  1979­11­11  70.0  75.0  55.5  T  98402006  彭德强 文学院 男  1979­9­1  70.0  78.0  63.5  F  98410101  毕红霞 法学院 女  1979­11­16  79.0  67.0  58.5  F  98401012  王维国 哲学院 男  1979­10­26  63.0  86.0  55.5  F  98404006  刘向阳 西语学院 男  1980­2­4  67.0  84.0  56.5  F  这是一个简单的二维表格。实际上,这个二维表格就是 Visual FoxPro 中的“表” 。表存储 有关某个主题(如学生的基本情况)的信息。如表 3­1 所示,表中按列存放该主题不同种类的

(2)

信息(如学生学号、姓名等),按行描述该主题“某一实例”的全部信息(特定学生的数据)。 表中的每一行称为一条记录,每一列称为一个字段。 表的第一行称为表头,表头中每列的值是这个字段的名称,称为字段名。 表有以下特征: (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)

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 值)大或小、相等或不等。 例如,将表 3­1 所示的学生登记表中的字段属性定义为如表 3­2 所示。 表 3­2    XSDB 字段属性 字段名 字段类型 字段宽度 小数位数 学号  C  8  姓名  C  6  院系  C  10  性别  C  2  出生年月日  D  8  英语  N  5  1  计算机  N  5  1  奖学金  N  4  1  党员否  L  1  备注  M  4

(4)

3.2.2 通过表设计器创建新表 使用表设计器可以方便、直接地创建表,既可以通过项目管理器的“数据”选项卡中的 表设计器创建,也可以通过“文件”菜单中的表设计器命令创建。 创建表结构的操作步骤如下: (1)选择菜单“文件”→“新建”命令,打开“新建”对话框,如图 3­1 所示。选择“表” 单选按钮。 (2)单击“新建文件”按钮,打开“创建”对话框,如图 3­2 所示。 图 3­1  “新建”对话框 图 3­2  “创建”对话框 (3)在“创建”对话框中,可以确定表的类型、名称和保存位置,其中表的类型为“表  /DBF” 。在“输入表名”文本框中输入要建的表名,如“xsdb” ,单击“保存”按钮,即出现 “表设计器”对话框,如图 3­3 所示。 (4)定义“xsdb”表的字段。选择“表设计器”的“字段”选项卡,将光标放在“字段 名”下,输入第一个字段名“学号” ,这时,旁边的“类型” 、 “宽度” 、 “小数位数” 、 “索引” 等对应栏均有显示。单击“类型”列的下拉列表(当前的类型是“字符型” ),打开可选的数据 类型列表,在其中选择所需的数据类型。其他各字段如表 3­2 所示进行定义。 (5)创建完新表的表结构后,单击“确定”按钮,打开如图 3­4 所示的对话框。此时, 如果单击“否”按钮,则表示现在不想立即输入数据记录,只想创建一个空表的表结构,留待 以后再追加记录;如果单击“是”按钮,便会打开编辑窗口,开始输入每个学生的数据。 图 3­3  “表设计器”对话框 图 3­4  询问是否现在输入记录 “表设计器”对话框用来定义字段的属性,主要选项如下:

(5)

(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”表,然后再在表设 计器中定义其他字段,如图 3­5 所示。  1.打开“表向导”的步骤 (1)在“项目管理器”中选择“数据”选项卡,然后选择“自由表” ,单击“新建”按 钮,打开“新建表”对话框。 (2)在“新建表”对话框中选择“表向导” ,打开“表向导”对话框,如图 3­5 所示。  Visual FoxPro 6.0 中的各种向导有统一的界面: 显示 “步骤” 的下拉列表框和 “帮助” 、 “取 消” 、 “上一步” 、 “下一步”及“完成”共 5 个命令按钮在各种向导中都有。在对话框上部的下 拉列表框中有该向导的所有步骤,从中选择任一步骤可以立即转到所选步骤上;单击“帮助” 按钮,可看到该向导步骤的有关帮助信息;单击“取消”按钮,可使所有设置无效并取消该向 导的执行过程;单击“上一步”按钮,返回到该向导的前一步骤中,以便查看或修改前一步骤 中的设置;单击“下一步”按钮,进行该向导的下一步操作;单击“完成”按钮,将跳过该向 导当前步骤之后的所有步骤,完成向导的设置过程。这些步骤中的设置将取向导的默认值。  2.选择样表 在如图 3­5 所示的“表向导”的“步骤 1­字段选取”对话框中,先从“样表”列表框中选

(6)

择样表,如图 3­6 所示。若没有所需的样表,则可通过单击“加入”按钮,在“打开”对话框 中选择所需的“学生登记表” ,将其加入到样表中,然后再选择它。 图 3­5  “表向导”对话框 图 3­6  选择样表和字段  3.选择字段 选择了样表以后,就可以通过“可用字段”列表框选择字段。 “字段选取”对话框中的  4  个字段选择按钮的意义如下:  ►:将某一选定字段从“可用字段”列表框移入“选定字段”列表框。  ►►:将“可用字段”列表框中的全部字段移入“选定字段”列表框。  ◄:将某一选定字段从“选定字段”列表框移回“可用字段”列表框。  ◄◄:将“选定字段”列表框中的全部字段移回“可用字段”列表框。 如果希望使用其中的部分字段,只要单击要使用的字段名,然后单击►按钮,则此字段 被放入“选定字段”列表框中,重复此操作可以选出所有需要的字段;如果要使用所有字段, 则单击►►按钮即可。 相反,如果不需要已经选择的字段,可以单击“选定字段”列表框中不要的字段名,并 单击◄按钮,则此字段被从“选定字段”列表框中清除。 可通过选择不同的样表以便将这些表中的可选字段选入新的表中。这样可以很快建立一 个新表,并保持各表在相同字段上结构的一致性,有利于相关表之间的数据交换及建立联系。 现在,在“可用字段”列表框中选中“学号”字段,单击►按钮;再选中“姓名”字段, 单击►按钮。这样就将“学号”和“姓名”两个字段移入了“选定字段”列表框,如图  3­6  所示。 4.是否加入数据库 单击“下一步”按钮,进入向导的“步骤 1a­选择数据库” ,如图 3­7 所示。如果建立的是 数据库表,则选择“将表添加到下列数据库”单选按钮,然后在下面的数据库下拉列表框中选 择一个需要的数据库;如果是基于数据库的表,可以使用数据库表中的样式、字段映射或主关 键字,也可以建立或使用数据库表中的关系。 因为现在建立的是自由表,所以选择“创建独立的自由表”单选按钮。 说明:表分为自由表和数据库表。有关数据库表的内容将在后面讲解。  5.修改字段 单击“下一步”按钮,进入向导的“步骤 2­修改字段设置”对话框,如图 3­8 所示。这一 步可以对选定的字段进行所需的修改。可修改的内容如下:

(7)

图 3­7  选择是否加入数据库 图 3­8  修改字段设置 l 字段名称。 l 字段标题:在自由表中用字段名称作为字段标题。在数据库表中,字段标题可以不同 于字段名称。 l 字段类型、字段宽度、字段是否为 NULL,小数位数。 这里不需要修改“学号”和“姓名”字段,直接单击“下一步”按钮即可。  6.设置表索引和表间关系 在如图 3­9 所示的“步骤 3­为表建索引”对话框中可以为表建立所需的索引。有关表索引 的问题在后面的章节再介绍。 如果创建的是数据库表,单击“下一步”按钮,将进入“步骤 3a­建立关系”对话框;如 果创建的是自由表,则直接进入“步骤 4­完成”对话框,如图 3­10 所示。 图 3­9  设置表索引 图 3­10  “步骤 4­完成”对话框  7.完成表结构的创建 如果认为所建立的表不合适,可以单击“上一步” 按钮,回到以前的步骤并重复上述过程。如果不想建新 表,单击“取消”按钮。 选择“保存表以备将来使用” 、 “保存表,然后浏览 该表”或“保存表,然后在表设计器中修改该表”中任 一个单选按钮,然后单击“完成”按钮,都可打开“另 存为”对话框,如图 3­11 所示。在“另存为”对话框中 输入表名 jsj,单击“保存”按钮即建立起了“jsj”表, 图 3­11  “另存为”对话框

(8)

只是此时的“jsj”表中只有两个字段: “学号”和“姓名” 。 保存完毕后,若选择的是“保存表以备将来使用”单选按钮,则返回 Visual  FoxPro  6.0 的主 界面;若选择的是“保存表,然后浏览该表”单选按钮,则打开“浏览”对话框,用户可在其中 输入记录;若选择的是“保存表,然后在表设计器中修改该表”单选按钮,则打开“表设计器” 对话框,可在其中对表的结构作进一步的修改。在这里选择“保存表,然后在表设计器中修改该 表”单选按钮,然后在弹出的“另存为”对话框中输入表名“jsj” ,单击“保存”按钮,然后在“表 设计器”对话框中按照前面的介绍定义其他各字段(如计算机、笔试、上机)即可。  3.2.4 输入记录与浏览表中的信息 创建好表结构以后,还需输入表中的数据。Visual  FoxPro  6.0 中有以下两种输入数据的 方法。 1.在创建表时输入 每次创建完一个新表的表结构后,当单击“确定”按扭,就会出现一个如图 3­4 所示的询 问对话框。单击“是”按钮,便会出现一个编辑窗口,这时可以在编辑窗口中输入每个学生的 数据。在输入每条记录的字段值时,只能输入对字段的数据类型有效的值。如果输入了无效数 据,则会在屏幕的右上角弹出一个信息框显示出错信息,在更正错误之前,无法将输入记录数 据的光标移动到其他的字段上。 输入完所有的记录后,可以单击编辑窗口右上角的“关闭”按钮,关闭编辑窗口,则输 入的数据就被保存到表中。  2.在表创建好以后输入 (1)打开浏览或编辑窗口。 如果在创建表时没有输入记录,可以在表创建好以后的任何时候输入记录。但在向已存在 的表中输入记录之前,应先打开该表。然后选择“显示”→“浏览”命令,进入浏览窗口,再 选择“显示”→“追加方式”命令,便可依次输入各学生信息,如图 3­12 所示。 图 3­12  “浏览”窗口 输入记录或浏览表中的记录都可以使用浏览窗口。当在浏览窗口中浏览一个表时,可以 用两种方式查看记录:浏览和编辑。可以选择“显示”→“浏览”/“编辑”命令切换显示 方式。 (2)输入备注型和通用型字段。 ① 输入备注型字段的数据。 如果要输入备注型字段的内容,可在浏览窗口中双击该字段,打开一个文本编辑窗口, 即可在其中输入备注型字段的内容。输入完毕后关闭该窗口即可。

(9)

② 输入通用型字段的数据。 通用型字段包括一个嵌入或链接的 OLE 对象。插入 OLE 对象的步骤如下(首先修改表结 构在 xsdb 中加入“照片”字段,类型为“通用型” )。 l 双击浏览窗口中的通用型字段,打开通用型字段输入窗口。 l 选择“编辑”→“插入对象”命令,打开“插入对象”对话框。插入的对象可以是多 种生成器形成的图片格式文件。 l 如果图片文件不存在,则选择“新建”选项,并在“对象类型”列表框中选择对象类 型,然后单击“确定”按钮,Visual FoxPro 6.0 就启动相应的应用程序,用户可以使 用这些应用程序创建新的 OLE 对象。 l 如果图片文件已经存在,选择“由文件创建”选项,在“插入对象”对话框中单击“浏 览”按钮,进入“浏览”对话框,选择所需文件后单击“插入”按钮,回到文件选择 对话框,这时“文件”框中将显示选中的图片文件的路径及文件名,单击“确定”按 钮,又回到输入窗口。 当选择从文件建立时,如果不是将文件实际插入到表中,而是建立链接,应选择“链接” 复选框,链接文件以后,如果源文件发生变化,这种变化将自动反映到表中。 

3.3 浏览和编辑表中信息 

3.3.1 修改已有表的结构  1.打开表及“表设计器” (1)选择“文件”→“打开”命令,将文件类型切换至表,找到要打开的表并将其打开。 (2)选择“显示”→“表设计器”命令,和创建表结构时一样,表设计器中显示了表的 结构。 2.表设计器中的“表”选项卡 打开表设计器后,先看一下“表”选项卡,如图 3­13 所示。 它显示了当前表设计器所设计表的有关信息。这个表有 100 条记录,共 12 个字段,每条 记录长 64 个字节。需要注意的是,在表设计器中输入表结构的各字段总长度为 63,而这里是  64,其中多出的一个字节是留做存放“删除”标志用的。 下面选择“字段”选项卡,看一下如何对表结构进行修改,如图 3­14 所示。 图 3­13  “表”选项卡 图 3­14  “字段”选项卡

(10)

3.在表中增加字段 (1)如果要在最后增加字段,在表设计器的“字段”选项卡中最后一行直接输入即可。 如果想使增加的字段插入到某字段的前面, 可以在表设计器中将光标移到某字段, 单击 “插入” 按钮,就会在该字段前面插入一个名为“新字段”的字段,编辑该字段即可。 (2)在“字段名” 、 “类型” 、 “宽度” 、 “小数位数” 、 “索引” 、 “NULL”等列中,输入或 选择相应内容,然后单击“确定”按钮,最后单击“是”按钮,将改变的表结构保存即可。  4.删除表中的字段 选定该字段后,单击“删除”按钮即可。  5.改变字段顺序 在表设计器中,被选中的字段左边有一个上下方向的双向箭头,将鼠标指针移到该处, 指针也变成了双向箭头的形状,此时拖动鼠标上下移动即可改变这个字段在表中的位置。  3.3.2 添加新记录 若想在表中快速加入新记录,可以将浏览/编辑窗口设置为“追加方式”状态。在“追加 方式”中,文件底部显示了一组空字段,用户可以在其中输入新记录。  3.3.3 删除记录 在  Visual FoxPro 中,删除表中的记录共有两个步骤。首先是单击每个要删除记录左边的 小方框,标记要删除的记录,如图 3­15 所示。 图 3­15  标记要删除的记录 标记记录并不等于删除记录。要想真正地删除记录,还应选择“表”→“彻底删除”命 令。当出现提示,询问是否想从表中移去已删除的记录时,单击“是”按钮即可。 除了单击鼠标做删除标记外,还可以通过在“删除”对话框中设置条件,有选择地删除 一组记录。步骤如下: (1)选择“表”→“删除记录”命令,出现“删 除”对话框,如图 3­16 所示。 (2)在其中输入删除的范围或条件(如删除所有 英语成绩低于 60 分的记录),单击“删除”按钮,符合 条件的记录将打上删除标记。 (3)选择“表”→“彻底删除”命令即可。 图 3­16  “删除”对话框

(11)

3.3.4 在表中移动记录指针 表的内部有一个记录指针,当打开表文件时,指针将指向首条记录。当对记录进行操作 时,记录指针将会移动,指向当前记录。 下面看一下怎样查看不同的记录。 当打开浏览/编辑窗口时, Visual FoxPro 的菜单会发生变化, 增加了 “表” 菜单。 这是 Visual  FoxPro 的特点,菜单不是固定不变的,它会随着打开项目的不同而有所变化。 选择“表”→“转到记录”命令,可以看到 6 个子命令,如图 3­17 所示。 如果选择“第一个” 、 “最后一个” 、 “下一个” 、 “上一个”选项,会自动转到相应的记录。 如果选择“记录号”子命令,会弹出一个对话框,输入记录号后,单击“确定”按钮就 可以转到相应记录。 如果选择“定位”子命令,会弹出“定位记录”对话框,如图 3­18 所示。 图 3­17  “表”菜单 图 3­18  “定位记录”对话框 打开“作用范围”下拉列表框,可以看到有 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 定制浏览窗口 可以按照不同的需求定制浏览窗口,可以重新安排列的位置、改变列的宽度、显示或隐 藏表格线或把浏览窗口分为两个窗格。

(12)

1.改变列宽和行高 当鼠标位于行标头或列标头区的两行或两列的中间时,鼠标将变成上下方向或左右方向 的双向箭头,这时拖动鼠标就可以改变浏览窗口中记录的行高或字段的列宽。  2.调整字段顺序 在浏览窗口中可以使用鼠标把某一列移动到窗口中新的位置上,从而改变字段在浏览窗 口中的排列顺序。将鼠标指向列标头区要移动的那一列上,鼠标指针变为向下的箭头,将列标 头拖到新的位置上即可。 注意:在浏览窗口改变列宽和列的排列顺序不会影响字段的实际结构。  3.打开或关闭网格线 选择“显示”→“网格线”命令,可以显示或隐藏浏览窗口中的网格线。  4.拆分浏览窗口 利用拆分条拆分浏览窗口可以查看同一表中的不同区域的数据,拆分条位置如图 3­19  所示。 将鼠标指向窗口左下角的拆分条,这时鼠标指针变为左右箭头对接的形状,将拆分条拖 到所需的位置上即可,如图 3­20 所示。 图 3­19  拆分条的位置 图 3­20  拆分窗口 若要调整拆分窗口的大小,只需向左或向右拖动拆分条即可改变窗口的相对大小。 默认情况下,两个窗口是链接的,即在一个窗口中选择了不同的记录,这种选择也会反 映到另一个窗口中。 取消“表”菜单中“链接分区”的选中状态,可以中断两个窗口之间的联系,使它们的 功能相对独立。这时滚动某一个窗口,不会影响到另一个窗口的显示内容。 

3.4 表的索引与排序 

Visual  FoxPro  中的索引和书中的索引类似。书中的索引是一份页码的列表,指向书中的 页号。表索引是一个记录号的列表,它存储了一组记录指针指向待处理的记录,并确定了记录 的处理顺序。索引并不改变表中所存储数据的顺序,它只改变了  Visual FoxPro  读取每条记录 的顺序。 对于已经建好的表,索引可以帮助用户对其中的数据进行排序,以便加速检索数据的速 度;可以快速显示、查询或者打印记录;还可以选择记录、控制重复字段值的输入并支持表间 的关系操作。  3.4.1 索引的类型 索引有以下 4 种类型。

(13)

主索引:可确保字段中输入值的唯一性并决定处理记录的顺序。可以为数据库中的每一 个表建立一个主索引。如果某个表已经有了一个主索引,可以继续添加候选索引。 候选索引:像主索引一样要求字段值的唯一性,并决定了处理记录的顺序。在数据库表 和自由表中均可为每个表建立多个候选索引。 普通索引:也可以决定记录的处理顺序,但是允许字段中出现重复值。在一个表中可以 加入多个普通索引。 唯一索引:为了保持同早期版本的兼容性,还可以建立一个唯一索引,以指定字段的首 次出现值为基础,选定一组记录,并对记录进行排序。  3.4.2 各种类型索引的使用 通过建立和使用索引,可以提高完成某些重复性任务的工作效率,如对表中的记录排序及建 立表间关系等。根据所建索引类型的不同,可以完成不同的任务,如表 3­3 所示。 表 3­3  各类型索引的使用 使用的索引 完成的任务 使用普通索引、候选索引或主索引 排序记录,以便提高显示、查询或打印的速度 对数据库表使用主索引或候选索引,对自由表使用 候选索引 在字段中控制重复值的输入并对记录排序 下面以控制字段中重复值的输入为例介绍建立索引的方法。 在 xsdb 表中,每个学生的“学号”字段值必须保证唯一,那么以学号建立“主索引”或 “候选索引”即可保证其值唯一。 注意:对自由表只能建立候选索引。对数据库表可以建立主索引或候选索引,并且对于 一个数据库表,主索引只能建一个,候选索引可以建多个。 建立索引的步骤如下: (1)在“表设计器”中选择“索引”选项卡。 (2)在“索引名”文本框中输入索引名。如果在“字段”选项卡中设置了索引,则索引 名将自动出现。 (3)在“类型”列表中选定索引类型,如选择“候选索引”选项。 (4)在“表达式“文本框中输入作为记录排序依据的字段名,或者通过单击表达式框后 面的按钮,显示表达式生成器来建立表达式。 (5)若想有选择地输出记录,可在“筛选”文本框中输入筛选表达式,或者单击该框后 面的按钮来建立表达式。如想显示英语低于 60 分的记录,则在“筛选”文本框中选择或输入 “英语<60” 。 (6)索引名左侧的箭头按钮表示升序或降序,箭头方向向上时按升序排序,向下时则按 降序排序。 (7)单击“确定”按钮。 建好表的索引后,便可以用它来为记录排序。下面是查看索引后的逻辑排序步骤: (1)打开已建好索引的表。 (2)单击“浏览”按钮。 (3)选择“表”→“属性”命令。

(14)

(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 提供了对表中数值型字段进行统计和计算的几个命令,下面分别介绍。

(15)

3.5.1 纵向求和 SUM  1.命令格式  SUM [<数字型字段名> [TO <内存变量名表>][<范围>][FOR <条件>]]  2.命令功能 在当前表中,凡是在指定范围内指定条件的记录,可计算指定的数值型字段的代数和, 并分别将计算结果依次存入指定的内存变量中。  3.说明 如果不选择[TO <内存变量名表>],则计算结果不被保存,后面不能引用其计算结果;如果 任何参数都不选择,则当前表的所有数值型字段都能分别计算代数和,且计算结果不被保存。  4.举例 【例 3­1】计算奖学金总和。  USE XSDB  SUM  奖学金  TO X  ?X  &&显示计算结果 【例 3­2】计算特定条件的奖学金总和。  SUM  奖学金  TO Y FOR  院系="文学院"  3.5.2 纵向求平均值 AVERAGE  1.命令格式  AVERAGE [<数字型字段名> [TO <内存变量名表>][<范围>][FOR <条件>]]  2.命令功能 在当前表中,凡是在指定范围内指定条件的记录,可计算指定的数值型字段的平均值, 并将计算结果依次存入指定的内存变量中。  3.说明 如果不选择[TO  <内存变量名表>],则计算结果不被保存,后面不能引用其计算结果; 如果任何参数都不选择,则当前表的所有数值型字段都能分别计算平均值,且计算结果不被 保存。 4.举例 【例 3­3】计算英语平均成绩。  USE XSDB  AVERAGE  英语  TO X  ?X  &&显示计算结果 【例 3­4】计算特定条件的平均成绩。  AVERAGE  英语,计算机  TO X,Y FOR  院系= "文学院"  &&计算文学院学生的英语和计算机平均成绩  ?X,Y  3.5.3 统计记录数 COUNT  1.命令格式  COUNT [TO <内存变量名>[<范围>][FOR <条件>]]

(16)

2.命令功能 统计当前表中指定范围内,符合指定条件的记录个数。  3.说明 如果不选择[TO  <内存变量名>],则计算结果不被保存,后面不能引用其计算结果。如果 任何参数都不选择,则统计当前表中所有记录数,且计算结果不被保存。  4.举例 【例 3­5】统计 XSDB 中记录个数(即总人数)。  USE XSDB  COUNT TO X  ?X  【例 3­6】统计表中所有男生的人数。  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  打开“数据工作期”窗口,如图  3­21  示,并显示在当前数据工作期中的工作区中打 开的表的别名。 (2)在工作区中打开/关闭表。在“数据工作 期”窗口中打开表的步骤如下:  1)在“数据工作期”窗口中单击“打开”按钮, 弹出“打开”对话框。  2)在“打开”对话框中选择要打开的表,单击“确定”按钮。 图 3­21  “数据工作期”窗口

(17)

在“数据工作期”窗口中关闭表的步骤:在“数据工作期”窗口中选定要关闭的表别名, 然后单击“关闭”按钮。 当在同一工作区中打开其他表时,会自动关闭已打开的表。  3.6.2 选择工作区的命令  1.命令格式  SELECT <工作区号>/<别名>/0  2.命令功能 选择或切换一个工作区作为当前工作区。  3.说明 (1)选择一个工作区作为当前工作区,在其中打开表或使该工作区已打开的表成为当前表。 (2)要选择的工作区,可使用工作区号、工作区的别名或表的别名。 (3)若选择 0(零),则系统自动选取当前未使用的区号最小的工作区作为当前工作区。  4.举例 【例 3­7】选择工作区。  SELECT 2  USE JSJ  SELECT C  USE XSDB  3.6.3 使用 USE 命令指定工作区打开表  1.命令格式  USE <表名> IN <工作区号>/<别名>  2.命令功能 使用区号或别名在指定工作区中打开表文件。  3.说明 (1)别名可以是工作区的别名,也可以是表的别名。 (2)在当前工作区调用其他工作区的数据时,非当前工作区中的表文件的字段名前要加 上该表文件的<别名>和“­>”符号,或者是<别名>和符号“.” 。格式如下:  <别名> ­><字段名>  或<别名>.<字段名>  4.举例 【例 3­8】在 2 号工作区打开 YY.DBF,在 3 号工作区打开 XSDB.DBF。  USE YY IN 2  USE XSDB IN 3  SELE C  DISPLAY  学号,姓名,B.听力,YY.口语  3.6.4 建立表的关联 如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记录指针时,其他表的 记录指针是不会随之移动的。如果要想其他表的记录指针也随之移动,则要建立表间的关联。 关联就在两个或两个以上的表之间建立某种连接,使其表的记录指针同步移动。用来建

(18)

立关联的表称为父表,被关联的表称为子表。建立两表间的关联后,父表的记录指针将带动子 表的记录指针随之移动(关联表达式值相同)。 

1.命令格式 

SET  RELATION  TO  [<关联表达式 1>]  INTO  <工作区>/<别名>  [,<关联表达式 2>  INTO  <  工作区>/<别名>…]] [ADDITIVE]  2.命令功能 在两个表之间建立关联。  3.说明 (1)<关联表达式 1>是子表的索引表达式。 (2)<关联表达式 2>通常是两个表的公共字段。 (3)建立关联之前,子表必须建立索引或打开相应索引文件。 (4)ADDITIVE:建立关联时,如果命令中不使用 ADDITIVE 子句,则父表之前建立的 关联将自动解除;若使用了 ADDITIVE 子句,则父表之前建立的关联仍然保留。  4.举例 【例 3­9】将两个工作区中的表建立关联。  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)当关闭子表时,将自动解除与父表建立的所有关联。

(19)

3.7 用命令对表进行操作 

3.7.1 打开表命令  1.命令格式  USE <文件名> [INDEX <索引文件名表>][ALIAS<别名>][EXCLUSIVE]  2.命令功能 打开当前工作区内的表时, 可打开相应的索引文件。 如果表中含有备注型字段, 相应的.FPT  文件也同时打开。当打开另一个表时,当前工作区中先前使用的表将自动关闭。  ALIAS  <别名>选择项用来给表文件指定一个别名。如果缺省此项,表文件名本身就是 别名。 EXCLUSIVE 表示以独占方式使用表,即不允许其他用户在同一时刻也使用该表。  3.举例 【例 3­10】打开 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 中的一个参数。不指定时,默认范围

(20)

为 ALL。  FIELDS <字段名表>用来指定显示的字段名、内存变量名和表达式,其中 FIELDS 可以省 略。对于备注型字段及通用字段不显示具体内容。若要显示备注型字段数据,则必须在<字段 名表>中明确指出该字段名。 例如:LIST  姓名,简历 其中“简历”为表文件结构中所定义的备注型字段名。 指定 FOR<条件>、WHILE<条件>时,将显示满足条件的记录。同时指定 WHILE<条件>  优先于 FOR<条件>。 指定 TO PRINT 时,将命令结果送到打印机上输出。 【例 3­11】带有选择项的 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<字段名表>]  功能:复制当前打开的表结构到新的表文件中,但不复制任何数据记录。 【例 3­12】复制“学生登记表”的结构,保存在“XSDB1.DBF”文件中。  USE XSDB 

COPY  STRUCTURE  TO  XSDB1  2.COPY TO 命令 命令格式:COPY TO <新文件名>[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条 件>]  功能:将打开表的全部或部分结构及数据复制到新表中。 若未指定<范围>、FOR<条件>、WHILE<条件>时,复制所有的记录。未选择 FIELDS<字 段名表>时,则复制所有的字段。选用  FIELDS<字段名表>时,便指定了新生成的表中所含有 的字段及字段之间的前后顺序。 如果同时存在 FOR 子句和 WHILE 子句,则 WHILE 子句优先。 【例 3­13】复制“XSDB”表中“学号” 、 “姓名” 、 “性别” 、 “出生年月日”4 个字段到新 表“XSDB2.DBF”中。  USE  XSDB 

(21)

3.7.5 修改表结构的命令 命令格式:MODIFY STRUCTURE  功能:打开表设计器窗口,显示当前表的结构,并可直接修改其结构。 修改表结构的表设计器窗口和建立表时完全一样。  3.7.6 记录定位命令 这里介绍两条专用的记录定位命令:GO/GOTO 命令和 SKIP 命令。  1.绝对定位 GO/GOTO 命令 命令格式 1:GO/GOTO TOP/BOTTOM  功能:记录指针定位到表的第一条记录或最后一条记录。 命令格式 2:GO/GOTO <数值表达式>  功能:记录指针定位到表的某一条记录,命令中<数值表达式>的值就是指针定位的指定 记录号。 【例 3­14】定位指针。  USE XSDB  GO BOTTOM  &&  记录指针定位到表的最后一条记录  GO 3  &&  记录指针定位到表的第三条记录  GO TOP  &&  记录指针定位到表的第一条记录  2.相对定位 SKIP 命令 命令格式:SKIP [<数值表达式>]  功能:将记录指针从当前记录位置向下或向上移动,移动的记录数等于<数值表达式>的 值。<数值表达式>值为正时向下移动,<数值表达式>值为负时向上移动。<数值表达式>默认 时,表示向下移动一条记录。 【例  3­15】用  SKIP  命令移动指针到指定的记录,其中  RECNO()函数的返回值是当前记 录指针的值。  USE XSDB  ?RECNO()  1  SKIP 5  ?RECNO()  6  SKIP ­3  ?RECNO()  3  3.7.7 记录的删除命令  1.逻辑删除 DELETE 命令

命令格式:DELETE [<范围>] [FOR<条件>] [WHILE<条件>]  功能:在当前表文件中对要删除的记录加上删除标记。

(22)

默认<范围>选择项,则仅对当前记录加上删除标记。 【例 3­16】在 XSDB 表中,为性别为“女”的记录加删除标记。  USE  XSDB  DELETE  FOR  性别="女"  2.恢复逻辑删除 RECALL 命令 命令格式:RECALL [<范围>][FOR<条件>][WHILE<条件>]  功能:在当前表文件中去掉删除标记,恢复被删除的记录。 说明:RECALL 命令可以恢复所有被 DELETE 命令做过删除标记的记录,但不能恢复用  PACK 命令和 ZAP 命令删除的记录。若默认<范围>选择项,则仅恢复当前记录。 【例 3­17】删除所有非党员的记录,恢复所有被做过删除标记的男生记录。  USE XSDB  DELE FOR .NOT.  党员否  RECALL FOR  性别= "男"  3.物理删除 PACK 命令 命令格式:PACK  功能:把当前表中带删除标记的记录真正删除。 说明: 使用 PACK 命令之后, 带有删除标记的记录从表中永久地删除, 不能再用 RECALL  和其他命令恢复,因此使用时要特别慎重。 【例 3­18】删除指定范围的记录并真正清除。  USE XSDB  DELE FOR  计算机<60  PACK  4.清空表 ZAP 命令 命令格式:ZAP  功能:从打开的表中删除所有的记录,只保留表的结构。 说明:用该命令删除的记录将无法恢复,使用时要特别小心。 【例 3­19】永久删除表记录,只保留表结构。  USE XSDB1  ZAP  3.7.8 替换 REPLACE 命令

命令格式:REPLACE  [<范围>]<字段名  1>WITH<表达式  1>[,<字段名  2>WITH<表达式  2>…][FOR<表达式>][WHILE<表达式>] 

功能:用来替换打开表中指定字段的数据。

说明:当范围默认时,只替换当前记录。<字段名 n>与<表达式 n>的数据类型必须一致。 【例 3­20】为“XSDB”表计算所有学生的平均分和总分。 

USE XSDB 

REPLACE  ALL  总分  WITH  计算机+英语,  平均分  WITH  总分/2 

【例  3­21】平均成绩  80 分的奖学金为  60 元,两科成绩均为  90(含 90)分以上的增 加 30 元。 

REPLACE  奖学金  WITH    60    FOR  平均分>=80 

(23)

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。 说明:单索引文件总是按升序的顺序排列。对于一个表文件,允许建立多个索引文件。 【例 3­22】建立单索引文件。  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)此命令建立的索引与在表设计器中建立的索引相同。 【例 3­23】为数据表 XSDB.dbf 按计算机成绩从低到高建立单索引文件 xsjsj.idx,按英语 从高到低建立单索引文件 xsyy.idx。  USE XSDB 

INDEX ON  计算机  TO xsjsj  &&  单索引文件总是按索引关键字升序排列 

LIST  &&  记录已按计算机成绩升序排列 

INDEX ON –英语  TO xsyy; 

&&给英语成绩取负号后使索引关键字表达式按升序排列,以求英语成绩按降序排列 

(24)

【例 3­24】为 xsdb.dbf 按下列要求建立结构复合索引文件,如图 3­22 所示。 图 3­22  结构复合索引的建立 (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 条记录开始。 【例 3­25】在“XSDB”表的末尾追加一条空记录。  USE XSDB  APPEND BLANK  3.7.13 插入记录 INSERT 命令 命令格式:INSERT [BLANK] [BEFORE]  功能:在打开表的任意位置插入新记录或空记录。 说明:(1)如果选择  BLANK  项,则插入一条空白记录,以后可用  BROWSE、EDIT、 向上箭头为升序索引, 向下箭头为降序索引 如果需要,可输入筛选 条件表达式 在“索引名”文本框 中输入索引标识名 在“类型”下拉列表 框中选定索引类型 在“表达式”文本框中输 入索引关键字表达式

(25)

REPLACE 等命令加入该记录的数据;若不选择 BLANK 项,则出现编辑界面,可以交互方式 输入新记录的值。 (2)如果选择 BEFORE 项,则在当前记录之前插入记录;若不选择 BEFORE 项,则在 当前记录之后插入记录。 【例 3­26】在“XSDB”表的第 6 条记录之前插入一条空记录。  USE XSDB  GO 6 

INSERT  BEFORE  BLANK  或:  GO 5  INSERT  BLANK  3.7.14 从其他表文件中追加数据 APPEND FROM 命令 命令格式:APPEND FROM <文件名> [FIELDS <字段名表>] [FOR <条件>]  功能:把指定表文件中的记录有条件或无条件地追加到当前表文件的末尾。 【例 3­27】在表文件 JSJ 中追加学号、计算机记录。  USE JSJ  APPEND FROM XSDB FIELDS  学号,计算机  for  院系="文学院" 

本章小结

本章首先介绍了在建立自由表之前应设计一张二维表,再根据二维表进行数据表的设计。  Visual FoxPro 提供了 3 种建立自由表的方法,即向导、设计器和命令,这里分别对这 3 种方法 作了详细说明。建立了自由表后,为了输入记录,可以采用浏览、编辑、追加及命令等多种方 式。表的操作与使用包括如何打开/关闭表、浏览表数据、修改表数据、过滤表数据、定位表 记录、删除表记录、恢复表记录以及对表结构的相关操作等内容。Visual FoxPro 提供了物理排 序和逻辑排序两种方法对表记录进行排序,其中逻辑排序方法(即索引方法)具有速度快、效 率高、大大减少数据冗余的优点,因而得到普遍采用。查询和统计是数据库应用的重要内容, 本章介绍了顺序查询和索引查询两种传统的查询方法, 以及对数据库中的数据进行统计计算的 相关命令。最后,对使用多个表涉及的工作区以及数据工作期的相关概念进行了阐述。本章是 全书的重点, 读者应认真掌握表的建立和操作方法以及索引的概念和操作, 这对后续数据库的 学习大有帮助。

习题 3

一、选择题  1.在 Visual FoxPro 数据表中,记录是由字段值构成的数据序列,但数据长度要比各字段 宽度之和多一个字节,这个字节是用来存放( )的。  A.记录分隔标记  B.记录序号  C.记录指针定位标记  D.删除标记

(26)

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.姓名+总分+出生日期

(27)

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 命令能删除当前表的全部记录

(28)

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

(29)

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)建立如表 3­4 所示的表结构。 表 3­4  表结构 字段名 字段类型 宽度 小数位数 学号  C  8  姓名  C  6  性别  C  2  入学日期  D  8  奖学金  N  4  1  团员否  L  1  爱好  M  4

(30)

(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 个表文件。

參考文獻

相關文件

,並於後方括號&lt; &gt;內標示『須經藥事會:是/否;品項清單備考欄位

在撰寫網頁應用程式 HTML 的語法當中,以下何者錯誤?(A)&lt;a&gt;是用來製作超連結的標記(Tag) (B)HREF 是一個在&lt;a&gt;與&lt;/a&gt;中指定其他

操作流程: 系統選單-&gt;財產管理系統-&gt;點選報廢申請單-&gt;填寫報廢申請單資料(主 單、明細)-&gt;點選確認

教育局網頁 www.edb.gov.hk &gt; 課程發展 &gt; 課程範疇 &gt; 全方位學習. 與津貼有關的重要資訊 會通過聯遞系統 Communication and Delivery

(網站主頁 &gt; 課程發展 &gt; 學習領域 &gt; 藝術教育 &gt; 教學資源 &gt;視覺藝術

 for…迴圈自初值開始判斷 &lt;條件判斷&gt; 是否為 true,若為 true 則執行 for 迴圈內的敘述,並依 &lt;增量值&gt;,每次增 加 (或減少) 指定的增量值,直至 &lt;條件判斷&gt;

主頁 &gt;課程發展 &gt;學習領域

主頁 &gt; 課程發展 &gt; 學習領域 &gt; 中國語文教育 &gt; 中國語文教育- 教學 資源 &gt; 中國語文(中學)-教學資源