当前位置:首页 >> 工学 >>

ch3 表的创建和使用 江苏省二级 vfp 课件


第三章

表的创建和使用
3.1 表结构 表结构的创建和修改 3.2 表 的 打开与关闭 3.3 记 录 的 处 理

3.4 表 的 索 引
3.5 有关表操作的常用函数

结束放映?
YES(是) NO(否)

? ?

表的概念 字段的基本属性
1. 字段名(Field Name) 2. 字段的数据类型(Type) 3. 字段宽度(Width) 4. 小数位数(Decimal) 5. 空值支持(NULL)

表结构的创建和修改
引言 ?表结构的创建
? 使用表向导创建表结构 使用表设计器创建表结构 使用CREATE TABLE命令创建表结构 ?

表结构的修改
在表设计器中修改表结构
用ALTER TABLE命令修改表结构

记录的处理
?

记录的输入
记录的浏览 记录的定位 记录的修改

?记录的删除与恢复
?筛选记录与字段 ?记录的复制 ?

? ? ?

数据的统计

表的使用
? 工作区与表的别名 ? 在工作区中打开和关闭表

打开和关闭表的操作方法
选择工作区打开和关闭表 表的独占与共享使用

使用表的其他问题

表的索引
?

索引的相关概念
记录的顺序与索引 索引的类型 索引文件的类型

?索引的使用与维护
设置主控索引

?

创建索引文件
创建结构复合索引

建立“多字段”索引

?利用索引快速定位记

?

索引的修改与删除 录









VFP中的表(Table)是指存放在磁盘文件中的一张 二维表。一张表保存为一个表文件(.DBF), 表有时也 叫数据表。 表中的一列称为字段(Field)。字段规定了数据的 特征。例如,学生表中学号、姓名、性别和系名就是 字段。 表的一行叫做一个记录(Record)。记录是多个字 段的集合。同一个表的每一个记录都有相同的字段。 表的记录必须用一个公共的结构来存储,这个公 共的结构就是表结构。 建立表的步骤是:先设计表的结构,再在VFP中使 用命令或表设计器建立表的结构并保存为表文件,然后 再输入记录。

字段的基本属性(1)
字段名(Field Name)
每一个字段必须取一个名字,称为"字段名"。用以标识该 字段。字段名一般要与其对应的实体的属性名相同或相近。例 如,学生表的"姓名"列的字段名可以取为"姓名"或"xingming" 或"XM"或"name"等。字段名的命名规则与内存变量的命名规 则一样。在中文版的VFP 中,允许使用汉字作为字段名。

字段的数据类型(Type)
表中的每个字段都有特定的数据类型。不同的数据类型的 表示和运算的方法不一样。指定数据类型是为了方便VFP处理 这些数据。VFP提供了13种字段的数据类型。

字段的基本属性(2)
字段宽度(Width)
字段宽度是指该字段所能容纳数据的最大字节数,字段 宽度必须能足够容纳可能的最长的数据信息。其中备注型和通 用型字段宽度为4字节,包含的是引用信息,指向真正的备注 内容。备注字段的数据保存在单独文件中,文件名与表文件名 相同,并且扩展名为.FPT。另外一些数据类型的宽度是固定 的。如货币型、日期型、日期时间型和双精度型为8字节;整 型、备注型、备注型(二进制)和通用型为4字节;逻辑型为1 字节。

小数位数(Decimal)
对于数值型、浮点型和双精度型的字段还可以指定其小 数的位数。这些数据类型字段的宽度,实际上是整数部分的宽 度+小数点1位+小数位数宽度。如果小数位数不为0,则小数 位数必须比整个字段宽度至少小2。

字段的基本属性(3)
空值支持(Null)
空值是用来指示记录中的一个字段“有或没有”数据的标 识。在VFP出现之前,字段中“有没有”包含数据是难以区分 的。例如,如果要添加一个空白的记录但又不想在这些字段中 插入数据,那么,对于数值型字段而言,将把它当作包含一个 零值对待。然而,由于0是一个值(正如1或3.14一样),如果这 个字段正好有一个为0的值而被当作没有值对待是不正确的。对 于字符和逻辑数据类型而言,类似的情形也会发生:不包含数 据的逻辑型字段被指定为一个逻辑“假”值,即在不知道是 “真”是“假”的情况下,被说成是“假”。 VFP通过提供能够指定一个字段是包含NULL(空)还是包含 一个值的功能,使这个问题得以解决。这种指定是作为字段定 义的一个部分,如象定义名称和类型一样。 NULL不是一种数据 类型或一个值,确切地讲,它是用来指示数据存在或不存在的 一种属性。通过使用NULL ,就有了一个判定某个字段是否具有 一个值的办法。

VFP 中 字 段 的 数 据 类 型
数据类型 字符型 货币型 数值型 浮点型 字母表示 C Y N F D T B I L M G 货币单位 整数或小数 (同数值型) 说明 字母、汉字符号和数字型文本 示例 学生的学号或姓名 教师的工资 学生考试成绩

日期型
日期时间型 双精度型

年,月,日
年,月,日,时,分,秒 双精度数值

生日
员工的上班时间 实验要求的高精度数据

整型
逻辑型 备注型 通用型

不带小数点的数值
真与假 不定长的一段文字 OLE

学生的数量
课程是否为必修课 学生简历 图片或声音



言(1)

在VFP中,如何来收集和存储数据呢?VFP 把数据存储在表文件里。表文件可以属于某个数据 库(与数据库相关联的表),叫数据库表(简称“库表”) , 表文件也可以与数据库无关联,叫自由表。自由表具 有的特性数据库表都有,但数据库表还可以具有其他 功能。 本节首先介绍自由表的创建过程与功能。 在创建表结构时应当注意以下几点: 1. 字段的数据类型必须与字段的存储内容相匹配。 每一个字段都有特定的数据类型。 2. 为字段设置足够的宽度来容纳信息。字符型字 段的长度最大为254,数值型、浮点型字段的长度最大 为20,其他类型字段的长度由系统给定。



言(2)

3. 为数值型、浮点型字段选择适当的小数位数。 4. 若想让字段接受.NULL.值,则在表设计器对 话框中选中NULL,或在CREATE TABLE-SQL命令中使 用NULL关键字。 5. 自由表的字段名本身最多只能取10个字符,且 必须以字母、下划线或汉字开头。 6. 表中允许的字段个数最大为255;若表中有字 段使用了NULL值则允许的字段个数最大为254。 7.若表结构中定义了备注型字段,则会产生一个主 名与表名相同、扩展名为.FPT的备注文件。此文件不能 被删除。否则,表文件将无法打开。 8. 创建自由表和数据库表结构的方法和步骤相似。

使用表设计器创建表结构(1)
具体步骤:
1. (1) 在VFP的主 窗口中,选择“文件”菜 单中的“新建”或点击“ 常 用”工具栏上的“新建” 按 钮,均可打开如右图所 示的“新建”对话框。 在“新建”对话框的 文 件类型选择框中点击“表

使用表设计器创建表结构(2)
(2) 若要直接在某个 项目文件中创建自由表, 可先打开此文件,在“项 目管理器”中选择“数据 ”选项卡,然后再选择“ 自由表”,点击“项目管 理 器”中的“新建”按钮, 打开如右图所示的“新建 表” 对话框。 在“新建表”对话框

使用表设计器创建表结构(3)
2. 经过步骤1,屏幕上会出现“创建”对话框 ,如下图所示。在其中指定表的保存位置、表的名 称并选定保存类型之后,单击“保存”按钮。

使用表设计器创建表结构(4)
3. 经过步骤2,VFP将激活表设计器,在屏幕上 弹出表设计器的对话框(如图所示),其中共有3个选项 卡,即<字段>、<索引>和<表>选项卡,分别用于不同 设置。

使用表设计器创建表结构(5)
4. 经过步骤3,再单击<字段>标签,激活<字段> 选项卡,输入相应的字段名、字段类型、字段宽度和 小数位数;若允许字段使用.NULL.值,点击NULL。

使用表设计器创建表结构(6)
5. 经过步骤4,单击“确定”按钮,此时会出 现下面对话框,单击“是(Y)‖,则在完成表结构创 建的 同时,打开表的“浏览”窗口,进入记录的输入状态 ;若单击“否(N)‖,则仅完成表结构的创建,产生 一个只有结构而无记录的空表。

使用CREATE TABLE-SQL命令 创建自由表(1)
一、命令格式如下:
CREATE TABLE 语法:CERATE TABLE|DBF<表名>[FREE] (字段名1 字段类型(字段长度[,小数位数]) [NULL|NOT NULL] [,字段名2 字段类型(字段长度[,小数位数] [NULL|NOT NULL]],……) 功能:创建表(自由表)的结构 说明:(1)FREE 子句表示创建的表是自由表,不被添加 到数据库中。创建自由表时,若没打开任何数 据库,则该关键字可省略。 (2)用本命令创建的表,将自动处于打开状态。

使用CREATE TABLE-SQL命令 创建自由表(2)
二、例题分析:
用CREATE TABLE-SQL命令创建职工情况表(ZGQK.DBF)。

解:
CREATE TABLE ZGQK FREE (GH C(6),XM C(8) NOT NULL,; XB C(2), HF L,CSRQ D NULL,JBGZ N(7,2),JL M)

命令中各字段的含义如下:
GH-工号、字符型、长度为6;XM-姓名、字符型、长度为8; XB-性别、字符型、长度为2;HF-婚否、逻辑型; CSRQ-出生日期、日期型;JBGZ-基本工资、数值型、长度为7、 小数位数为2;JL-简历、备注型。 其中,XM字段不允许NULL值,CSRQ字段允许NULL值。

在表设计器中修改表结构(1)
1.如果表已存在于一个项目中,则可在项目管 理器中先选定要修改的表,然后再单击其中的“修改” 按钮便会打开表设计器进行表结构的修改。 2.使用MODIFY STRUCTURE命令打开表设计器并 修改一个表的结构。在使用该命令前,首先应以独占 方式(EXCLUSIVE)打开要修改的表。例如,可以在命 令窗口中使用以下命令修改XS表的结构: USE XS EXCLUSIVE && 以独占方式打开XS表 MODIFY STRUCTURE && 打开表设计器,修改表 结构

在表设计器中修改表结构(2)
3.打开表后,点击“显示”菜单,在下拉菜单 中选择<表设计器>,也可打开表设计器并修改表结构 。

在表设计器中修改表结构(3)
4.在“表设计器”中,用户可对表结构作下述修改 : (1)添加字段 将光标移到已有字段之后,输入新的字段名、字 段类型、字段长度及小数位数。 (2)插入字段 将光标移到要插入字段位置的后一个字段,单击 “插入”按钮即插入一个“新字段”,再修改字段名 、 字段类型、字段长度及小数位数等。 (3)删除字段 将光标移到要删除的字段,单击“删除”按钮,

在表设计器中修改表结构(4)
(4)调整字段次序 在“字段名”左边有一个 按钮,点住这个按钮上 下拖动,可以调整各个字段之间的次序。 (5)修改字段 将光标移到要修改的字段上,直接修改相关内容。 对表结构修改后,单击“确定”按钮,在出现的消 息框(如图)中单击“是”按钮,即可完成表结构的修改 。

用ALTER TABLE-SQL命令修改表结构(1)
一、命令格式如下:
ALTER TABLE 语法:1.ALTER TABLE <表名> ADD|ALTER[COLUMN] 字段名 字段类型 [(字段长度[,小数位数])] [NULL|NOT NULL] 或 2.ALTER TABLE <表名> DROP [COLUMN] 字段名 或 3.ALTER TABLE <表名> RENAME [COLUMN] 旧字段名 TO 新字段名 功能:修改表(自由表)的结构 说明:格式1的作用是为表添加字段(用ADD子句)或修改 表中字段的类型、长度、小数位数与是否允许NULL值等 属性(用ALTER子句)。 格式2的作用是删除表中的字段。 格式3的作用是修改表中的字段名。

用ALTER TABLE-SQL命令修改表结构(2)
二、例题分析:
(1)向ZGQK表中添加一个名为JJ的长度为7、小数位数为2 的数值型字段,并允许NULL值。 解:ALTER TABLE ZGQK ADD COLUMN JJ N(7,2) NULL (2)删除ZGQK表中的名为JL的字段。 解:ALTER TABLE ZGQK DROP COLUMN JL (3)将ZGQK表中名为CSRQ的字段改名为CSNY。 解:ALTER TABLE ZGQK RENAME COLUMN CSRQ TO CSNY (4)先创建一个名为XXS的表,表中两个字段XM和GZ均为字 符型。然后,分别将XM字段的长度由8修改为15;GZ字段的类 型由字符型改为数值型,长度不变。 解:CREATE TABLE XXS(XM C(8),GZ C(10)) ALTER TABLE XXS ALTER XM C(15) ALTER TABLE XXS ALTER GZ N

记 录 的 输 入(1)
VFP提供了向表中输入记录的多种方法: 1. 表结构创建后立即输入记录 2. 通过浏览窗口输入记录
(1) 单击“显示”菜单,选择下拉菜单中的<追加方式>

浏览 窗口

记 录 的 输 入(2)
(2)单击“表”菜单,选择下拉菜单中的<追加新记录>。 注: 方法(1)可一次输入多条记录;而方法(2)一次只能输 入一条记录,需重复方法(2)的步骤才能再输入新记录。

浏览窗口

记 录 的 输 入(3)
3. 通过命令输入记录:
(1) APPEND 命令 语法:APPEND [BLANK] 功能:在表的末尾添加一空记录。 说明:该命令将打开表的浏览窗口并添加一个空记录。 若使用BLANK子句,则不打开浏览窗口自动在表的末尾添加 一个空记录。 (2)INSERT-SQL命令 语法:INSERT INTO 表名(字段1[,字段2…]); VALUES(表达式1[,表达式2…]) 功能:在表的末尾添加一个包含指定字段值的记录。 说明:i) [(字段1 [,字段2,……])]——指定新记录 的字段名列表,可以是部分或全部字段。如果省略,则是指 全部字段。

记 录 的 输 入(4)
ii) VALUES(表达式1[,表达式2,……])——新插入记录的 字段值。如果指定的字段名是记录的部分字段,则括号中的字段 值必须与指定的字段名的位置相一致;如果省略了字段名,那么 必须按照表结构定义字段的顺序来指定字段值。

4. 例题分析:
(1) 打开“学生成绩”表,添加一个空记录并用REPLACE命令 将该记录的“姓名”字段的值设置为“李四”。 解: USE 学生成绩 APPEND BLANK REPLACE 姓名 WITH ―李四” (2) 向“学生成绩”表中添加一条记录并分别设置该记录的 “学号”,“姓名”,“性别”,“出生日期”等字段的值。 解: INSERT INTO 学生成绩(学号,姓名,性别,出生日期); VALUES(―960102‖,―张扬”,―男”,{^1968/12/23})

记 录 的 输 入(5)
5. 从其他文件中为表添加记录:
打开表的浏览窗口,单击“表”菜单,选择下拉菜单 中的<追加记录>。 APPEND FROM FileName [Delimited|xls]

浏览 窗口

记 录 的 输 入(6)
此时,屏幕上会弹出“追加来源”对话框,如图所示 。在该对话框中,用户可以指定源文件的类型和存储路径 。通过“追加来源”对话框,用户可以方便地从文本文件 、电子表格文件及其他表文件中读取内容,为当前表或视 图添加记录。

记 录 的 输 入(7)
6. 备注型字段与通用型字段的数据的输入
1)备注型字段

在浏览窗口中,备注型字段显示“memo”(表示无内容)或 “Memo”(表示有内容)。步骤:把光标移动到备注型字段 后,按下“CTRL+HOME”组合键或双击备注型字段;在出现 编辑窗口中输入备注内容,结束时关闭编辑窗口。
2)通用型字段 在浏览窗口中,通用型字段显示“gen”(表示无内容)或 “Gen”(表示有内容)。步骤:把光标移动到通用型字段后, 按下“CTRL+HOME”组合键或双击通用型字段;在出现编辑 窗口后利用菜单命令“编辑/插入对象”插入其内容,结束时 关闭编辑窗口。

工作区与表的别名
对于大多数应用程序而言,都需要一次使用多个表文 件。为此VFP引入了工作区和表的别名两个概念。 所谓工作区是指用以标识一个打开的表的区域。每个 工作区有一个编号。在工作区中打开的表都有一个别名。 一个工作区在某一时刻只能打开一个表。如果在一个 工作区中已经打开了一个表,再在此工作区中打开另一个表 时,前一个表将自动被关闭。但可以同时在多个工作区中打 开多个表。一个表也可在多个工作区中多次被打开。 表的别名是对工作区中打开的表的一个临时标识。通 常用来缩短在代码中连续引用的名称,或者在查询输出中提 供一个说明性的名称。 VFP最多可提供32767个工作区,在前10个工作区中系 统指定的默认别名是字母A~J,在工作区11到32767中指定 的默认别名是W11到W32767。另外,还可以使用自定义别 名。若打开表时没有自定义别名,则系统默认以表文件名作 为别名。

打 开 和 关 闭 表(1)
一、打开表(自由表)的操作方法 1.通过系统菜单打开表。在VFP主窗口中单击“ 文件”菜单,选择其下拉菜单中的<打开>,在弹出 的“打开文件”对话框的<文件类型>选择框中选<表 >,然后选中要打开的表,再单击“确定”按钮即可 。 2.通过“数据工作期”窗口打开表。在VFP主窗 口中单击“窗口”菜单,选择其下拉菜单中的<数据 工作期>,或点击“常用”工具栏上的“数据工作期 窗口”按钮,即可弹出“数据工作期”窗口。 单击 窗口中的“打开”按钮,在弹出的“打开”对话框 中选中要打开的表,再单击“确定”按钮即可。

打 开 和 关 闭 表(2)
3.通过命令窗口打开表。即在命令窗口中使用 USE命令打开表: 语法: USE [<盘符><路径>]<表文件名> 即可将用户指定的表打开。 二、关闭表(自由表)的操作方法 1.通过“数据工作期”窗口关闭表。在VFP主窗 口中单击“窗口”菜单,选择其下拉菜单中的<数据 工 作期>,或点击“常用”工具栏上的“数据工作期窗 口” 按钮,即可弹出“数据工作期”窗口。先选择窗口中 “别名”下的列表框中的表(别名),再单击窗口中的 “关闭”按钮即可关闭用户指定的表。 2.通过命令窗口关闭表。即在命令窗口中输入 命令: USE

―数据工作期”窗 口

命令窗口

选择工作区打开和关闭表(1)
1.使用“数据工作期”窗口
在“数据工作期”窗口中打开表时,系统将自动选择一 个 未被使用的编号最小的工作区打开该表。在“数据工作 期”窗 口中的“别名”列表中,可以看到所有打开的表的别名,单 击一个别名,则其所在的工作区成为当前工作区。 2. 使用命令 (1) 选择当前工作区的命令: 语法:SELECT 工作区标号|别名 功能:选择工作区标号或别名所指定的工作区为当前工 作区。 说明:工作区标号从 0~32767,若命令中使用了工作 区标号0,则选用一个未被使用的编号最小的工作区为当前工 作区。

选择工作区打开和关闭表(2)
(2) 在USE命令中指定工作区打开或关闭表 语法:USE 表名 IN 工作区标号|别名 功能:选择由工作区标号或别名指定的工作区打开表。 说明: (i) 若使用的工作区标号为0,则选用一个未被使用的 编号最小的工作区打开表并为当前表。 (ii) 若命令中省略了“表名”,则关闭工作区标号或别 名所指定的工作区中的表。这也是关闭非当前工作区中的表 的命令方式。 (iii)若命令中省略了“IN 工作区标号|别名”,则在当 前工作区中打开表。 (iv) 若只使用USE,则关闭当前工作区中已打开的表。

选择工作区打开和关闭表(3)
3. 使用表的自定义别名打开表
正如前述,表别名是 VFP 用来指定在一个工作区 中 打开的表的名称。在打开表时,系统自动使用该表名作 为默认的表别名。但用户在打开一个表时,还可以自己定义 表的别名: 语法: USE 表名 ALIAS 自定义别名 功能:使用自定义别名打开指定的表。

4.例题分析:
(1) 在第十二工作区中以别名XSCJ打开表学生成绩.DBF 的命令是: SELECT 12 USE 学生成绩 ALIAS XSCJ 或者 USE 学生成绩 ALIAS XSCJ IN 12

选择工作区打开和关闭表(4)
(2) 在第八工作区中打开表XS.DBF,浏览其记录并关闭 该表的命令是: SELECT 8 或 SELECT H USE XS BROWSE USE 或者 USE XS IN 8 或 USE XS IN H SELECT XS 或 SELECT H 或 SELECT 8 BROWSE USE

注:对1~10工作区可以使用系统默认的别名A~J

选择工作区打开和关闭表(5)
(3) 已知在前10个工作区中打开了7个表,其中第5、 第7和第8工作区未被占用,若使用以下命令: SELECT 0 USE XS 或者 USE XS IN 0 则将在第 D 工作区中打开XS表。 A. 1 B. 7 C. 8 D. 5 (4) 现执行下列命令: USE JS IN 3 SELECT 1 USE XS 则使用以下 C 命令可关闭JS表。 A. USE B. USE IN 0 C. USE IN JS D. USE IN XS

表的独占与共享使用(1)
VFP是一个多用户的编程环境。在网络上的多个用户可 以在同一时刻访问一个表。同样,这也意味着一个单一的用 户可以通过一个多任务的操作系统,在多个会话下多次地打 开一个表。这种一个表可以同时被多个用户访问的情况,就 是表的共享使用,即表以共享方式打开。反之当一个表只能 被一个用户打开时,称为表的独占使用,即表以独占方式打 开。 当表以共享方式打开时,不能修改表结构和物理删除表 中的记录。若要对表进行上述操作,必须以独占方式打开表。

1.设置独占与共享打开表的默认状态
VFP在默认状态下是以独占方式加载的。当打开一个 表时,如果没有指定用何方式打开,即用系统默认的方式打 开。

表的独占与共享使用(2)
系统的默认打开方式可以通过“工具”菜单中的“选 项…‖来设置(如下图)。 或使用SET EXCLUSIVE命令来设置: SET EXCLUSIVE OFF &&设置“共享”为默认打开方 式 SET EXCLUSIVE ON &&设置“独占”为默认打开方 式

―选项”对话框

表的独占与共享使用(3)
2.强行用一种方式 打开表
在打开表时,亦可以用 显式指定的独占或共享方式 打开。 在“打开”窗口的右下 角有一“独占”复选框,若 打“√”表示独占;否则, 表示共享。在“打开”对话 框或 “使用”窗口中也有同样的 选择。

―打开”窗口

表的独占与共享使用(4)
使用命令打开表时,可以加子句“SHARED‖(共享)或 “EXCLUSIVE‖(独占)来指定打开方式。例如: USE XS SHARED && 以共享方式打开XS表 USE JS EXCLUSIVE && 以独占方式打开JS表 说明: 改变SET EXCLUSIVE的设置并不改变已经打开 表的状态。另外,一个表同时被多次打开时,只以第一次的

打开方式为准。例如,第一次是以独占方式打开一个表,则 在另一个工作区中再次打开该表时,即使已指定SHARED方 式,系统仍将以独占方式打开。

使 用 表 的 其 他 问 题(1)
1. 在不同工作区中打开同一个表
(1)在“数据工作期”窗口中,可用前述打开表的方法

在 多个工作区中打开同一个表,但不同工作区中表的别名有所 不同,默认第一次打开时的表别名与表名相同,其后打开的 表别名由表名加下划线和一个小写字母构成,依次为 a,b,c…。(如下图)

使 用 表 的 其 他 问 题(2)
(2)在“命令”窗口中使用带AGAIN子句的USE命令也可 以在多个工作区中打开同一个表(如下图)。与(1)不同的是 ,不同工作区中表的别名使用系统指定的默认别名。

表中数据的统计
(1)统计表中记录数的COUNT命令: 语法:COUNT [范围][FOR 条件表达式][TO 内存变量] (2)对表中数值型字段的值求平均值的AVERAGE命令: 语法:AVERAGE [数值字段名表|表达式列表][范围] [FOR 条件表达式][TO 内存变量表|数组名] (3)对表中数值型字段的值求和的SUM命令: 语法:SUM [数值字段名表|表达式列表][范围] [FOR 条件表达式] [TO 内存变量表|数组名] (4)对字段或字段表达式进行金融统计的CALCULATE命令: 语法:CALCULATE <表达式列表>[范围] [FOR 条件表达式][TO 内存变量表|数组名] 说明:该命令中<表达式列表>表示包括如下函数任意的 组合:AVG()、SUN()、MAX()、MIN()等;但这些函数不同于 VFP中的独立函数,如CALCULATE MIN()不同于MIN()。

使 用 表 的 其 他 问 题(3)
2. 工作区的引用(命令代码方式)
在VFP中,允许用户访问(引用)非当前工作区中的表的字 段。具体方法是:在其它工作区中打开的表的别名后加上点号 “.‖或“->‖操作符,然后再接字段名(如下图)。

记 录 的 顺 序
表中记录被输入时的先后顺序叫做记录的存储顺序,又称 之为记录的物理顺序。记录号表示的就是记录的物理顺序。 表打开并被使用时,表中记录的处理顺序则称为记录的逻 辑顺序。逻辑顺序可以与物理顺序相同,也可以不同。 当要查找表中的记录,而表中记录数目很大时,若按其物 理顺序逐条搜索,则费时较多且效率较低。 为了实现对表记录的快速查询,可以对表文件中的记录按 某个字段值或某些字段值排序, 即按其逻辑顺序搜索记录。 排序的方法有两种,一是把原表记录按某个逻辑顺序重新 写到一个新的表文件中,新表与原表大小相同,记录数相同, 不同的仅是它们的物理顺序;二是建立一个逻辑顺序号与原表 物理顺序的记录号的对照表,并把对照表保存到一个文件中。 上述第二种方法,就是索引技术。若要按特定的顺序定位、查 看或操作表中记录,可以使用索引。

索 引 的 概 念(1)
索引(Index)是由一系列记录号组成的一个列表。记录号 在列表中的顺序,是按照各个记录的索引关键字的值,从小 到大或从大到小进行排列的。索引提供对数据的快速访问, 可对表的各行强制实现唯一性。索引由索引序号和对应于索 引序号的表的记录号(亦称为指针)组成。 1. 索引关键字(Index Key) 索引关键字是用来作为建立索引的依据。它通常是一个 字段或字段表达式,有时也叫索引表达式。VFP使用索引关 键字来显示和访问表中的记录。 2. 索引表达式的构成 索引表达式的构成与一般表达式的构成一样,只是索引 表达式一般与表的字段有关。索引表达式可以由单个字段构 成,也可以是多个字段的组合(多字段索引)。

索 引 的 概 念(2)
3. 建立“多字段索引”需注意三点 (1) 索引表达式中字段“相加”的前后顺序将影响索引 的结果。 (2) 用多个“数值型”字段相加建立一个索引表达式, 索引将按照这些字段的值的总和的大小,而不是字段本身对 记录进行排序。 (3) 不同类型字段“相加”构成一个索引表达式时,必 须用相关的系统函数将它们转换为同一类型(字符型)。

4. 索引标识(Tag) 索引标识是索引关键字的名称。可以任意指定,若索引 表达式为单字段,则索引标识名也可以与该字段名重名,但 必须以下划线、字母或汉字开头,并且不能超过10个字节。

索 引 的 类 型(1)
从VFP索引的内容来划分,索引有4种类型:主索引、 候选索引、唯一索引和普通索引。这些索引控制着在表字段 和记录中是否允许或禁止重复值。 1.主索引(Primary Indexes) 在数据库表中,每张表只能创建一个主索引。组成主索 引关键字的字段或表达式,在表的所有记录中不能有重复的 值。例如,学生表中的学号可以创建主索引,因为在每一张 表中每一个学生记录的学号值是唯一的。而学生姓名则不能 建立主索引,可能有同名的学生,若建立了主索引,一旦出 现同名的学生数据输入,则系统拒绝接收其数据输入。另外, 自由表不能建立主索引。主索引只适用于数据库表的结构复 合索引中。

索 引 的 类 型(2)
2.候选索引(Candidate Indexes) 在指定的索引关键字段或索引表达式中不允许有重复值 的索引。一张表中可以建立多个候选索引。候选索引可用于 数据库表和自由表。 3.普通索引(Regular Indexes) 可以决定记录的处理顺序,但是允许索引关键字段或索 引表达式的值出现重复。对一个表可以创建多个普通 索引。在普通索引上查找的记录不具有唯一性。例如,对教 师表按工龄创建普通索引,则在工龄索引中同一个工龄值可 能出现若干次(因为不能排除工龄相同的可能性)。 4.唯一索引(Unique Indexes) 参加索引的关键字段或表达式在表中可以有重复值,但 在索引对照表中,重复的值仅存储一次。例如,对教师表建 立以系名作为关键字段的唯一索引,在此索引上浏览教师表 时,仅显示每个系的第一个教师。

索引文件的类型
索引本身并不改变表中记录的物理顺序,只是把 索引保存到另一个文件中,这个文件就是索引文件。 VFP支持三种不同类型的索引文件:结构复合索 引文件、非结构复合索引文件和独立索引文件。前两 种文件的扩展名为CDX,独立索引文件的扩展名为IDX 。结构复合索引是最普通、最重要的索引。其他两种 索引文件则较少用到。 复合索引文件的含义是:可以把表的一个或多个 索引存储在同一个索引文件中;而独立索引文件中只 能存放一个索引。 创建索引文件的方法有两种:一是使用“表设计 器”;二是使用INDEX命令。

创建结构复合索引文件(1)

创建结构复合索引文件的方法有两种: 1. 使用“表设计器” 先打开所要处理的表,再单击“显示”菜单,从其下拉菜单 中选择“表设计器” ,在打开的“表设计器”对话框中: (1)选择<字段>选项卡,选择表中的某字段,再单击其右边 的“索引”项,从弹出的下拉列表中选择“升序”或“降序”(如

创建结构复合索引文件(2)
(2)选择<索引>选项卡,输入索引名,选择索引类型, 输入索引表达式(如图)。索引表达式的输入也可使用“表 达 式生成器”来完成。点击“表达式生成器”按钮,打开“ 表达 式生成器”对话框,输入相应的表达式即可。

表达式生成器按钮

创建结构复合索引文件(3)
2. 使用INDEX命令 语法:INDEX ON <索引表达式> TAG <索引标识名>; [FOR 条件表达式][ASCENDING|DESCENDING]; [UNIQUE|CANDIDATE] 功能:建立以<索引表达式>的值为排序依据的结构复合 索引(文件)。 说明: (1)ASCENDING、DESCENDING:表示所建索引是升 序还是降序。(2) UNIQUE、CANDIDATE:表示创建唯一索引 还是候选索引。(3)若当前表尚未建立结构复合索引文件, 则使用该命令将自动创建结构复合索引文件。 3. 例题分析: 分别以JS表中的ZC和GZ字段为索引关键字,按ZC的升序和 GZ的降序建立结构复合索引(索引标识名分别为JSZC和JSGZ)。 解:USE JS INDEX ON ZC TAG JSZC ASCE INDEX ON GZ TAG JSGZ DESC

―表达式生成器”对话框

设 置 主 控 索 引(1)
一个打开的表可以同时打开多个索引文件(独立的或复 合的),但要决定显示或访问表中记录的顺序,还要设置一 个索引作为主控索引(MASTER CONTROLLING INDEX)。主控索 引可以是复合索引(.CDX)文件中的一个标识(主控标识),或 者是一个独立索引(.IDX)文件(主控索引文件)。 在复合索引文件所包含的多个索引中,在某一时刻只有 一个索引对表起作用,则这个索引标识称为主控索引标识 (MASTER CONTROLLING TAG)。虽然结构复合索引文件是随表 的打开而自动打开的,但结构复合索引文件中的任何一个索 引却不会被自动设置为主控标识,此时,表中的记录仍按记 录的物理顺序显示和访问。除非在打开表时指定某一索引标 识为主控标识,或在表打开后,再用其他命令设置主控索引。

设 置 主 控 索 引(2)
设置主控索引的方法有下列几种: 1.在“工作区属性”窗口中设置 先打开要操作的表及表的相关索引文件,然后在“数据 工作期”窗口中点击其中的“属性”按钮;或打开表的“浏 览” 窗口,点击“表”菜单,选择其下拉菜单中的“属性”,均 可打 开“工作区属性”窗口。

设 置 主 控 索 引(3)
点击“索引顺序”下的下拉列表框右侧的按钮,即可列 示出当前已打开的索引文件中的多个索引,从中选择一个, 即将选中的索引设置为主控索引。 2.使用命令设置 (1)打开表的同时指定主控索引 语法:

USE <表文件名>

ORDER <标识名>

例如:Close tables all
Use xs order xh

Use xs in 0 alias xs2 again order xb

设 置 主 控 索 引(4)
(2)先打开表再设置主控索引 先用USE命令打开表,再使用如下命令设置主控索引: 语法:SET ORDER TO [Tag名 [IN 工作区|别名] ; [ASCENDING|DESCENDING]] 如果发出 SET ORDER TO 0 命令,则所有已打开的索引文件 仍保持打开状态。但是,表中所有记录的显示和访问顺序是 记录的物理顺序而不是索引所要求的逻辑顺序,即该命令的 功能为取消主控索引的设置。SET ORDER TO 命令与 SET ORDER TO 0 命令的功能完全一样。 说明: 若在命令中使用IN 工作区|别名子句,则可以为指定 工作区中已打开的表(非当前表)设置主控索引。

索引的修改与删除
1.索引的修改 (1)用表设计器修改索引 对于已建的结构复合索引文件,可以在表设计器中,利 用“索引”选项卡来修改一个索引的标识名、类型以及表达 式 等。 (2)用命令修改索引 如果不修改索引标识,可以再用INDEX命令建立同标识 名的索引,当系统提示“标识已存在,改写吗?”时,选 择“是”,就把原索引覆盖了。 2.索引的删除 删除的方法有两种: ① 在表设计器中,利用“索引”选项卡来选择并删除 索 引标识; ② 用DELETE TAG命令删除索引标识。命令格式如下:

利用索引快速查找记录(1)

表建立了索引后,可以使用SEEK命令或SEEK()函数进行表 中记录的快速查找。 1.SEEK命令 在一个表中搜索首次出现的一个记录,这个记录的索引关 键字必须与指定的表达式匹配。 语法:SEEK 表达式 [ORDER Tag名; [ASCENDING|DESCENDING]][IN 工作区|别名] 参数:表达式——指定SEEK搜索的索引关键字

利用索引快速查找记录(2)
说明:SEEK命令只能在索引过的表中使用,并且只能搜 索索引关键字。 如果SEEK找到了与索引关键字相匹配的记录,则RECNO() 函数返回匹配记录的记录号;FOUND()函数返回“真”(.T.) ;EOF()函数返回“假”(.F.)。 如果找不到相匹配的关键字,则RECNO()将返回表中记录 的 个 数 加 1 ; FOUND() 返 回 “ 假 ” (.F.) ; EOF() 返 回 “ 真 ”(.T.)。 例如,在XS表中要定位到学号为960102的记录上,则当前主 控索引的索引关键字必须是XH或是以XH开头。 USE xs ORDER TAG xh SEEK "960102"

利用索引快速查找记录(3)
2. SEEK()函数 SEEK()函数同先执行SEEK命令然后执行FOUND()函数的结 果一样。 语法:SEEK (表达式 [,工作区|别名] [, Tag名]) 3.索引的其他用法 索引除了可以指定表记录的访问顺序和进行快速定位以

外,还可以利用索引建立表之间的永久关系和临时关系。有
关内容将在下一章中介绍。

有关表操作的几个函数(1)
(1)SELECT() 语法:SELECT([0|1|别名]) SELECT()函数用来测试工作区号。 其中:0用于返回当前工作区号;1表示返回当前未被 使用的最大工作区号;别名用于返回该表所在的工作区号 。使用别名必须加引号。 (2)USE() 语法:USE([工作区 | 别名]) USE()函数用于测试一张表的别名是否已被使用,或在 指定的工作区中是否有表打开。 (3)ALIAS() ALIAS( [工作区]) ALIAS函数用于返回当前或指定工作区中表的别名。

有关表操作的几个函数(2)
(4)FIELD() 语法:FIELD(字段序号[,工作区 |别名]) 本函数用于返回已打开表的指定序号的字段名。 (5)FCOUNT() 语法:FCOUNT( [工作区 |别名]) 本函数用于返回已打开表的字段个数。 (6)DELETE() 语法:DELETE() 本函数用于测试表的当前记录是否带有删除标记。 如果带有则返回.T.,否则返回.f.。

建 立 “多 字 段” 索 引(1)
索引表达式可以由单字段构成,也可以是两个以上字段 的组合。现举例说明建立“多字段索引”的方法。 例题分析: 已知XSCJ表的结构如下: 字段名 字段类型 字段长度 小数位数 XH C 8 XM C 8 XB L 1 CSRQ D 8 XIMING C 18 YWCJ N 5 1 SXCJ N 5 1 WYCJ N 5 1 JL M 4

建 立 “多 字 段” 索 引(2)
各字段名的含义如下: XH---学号;XM---姓名;XB---性别;CSRQ---出生日期; XIMING---系名;YWCJ---语文成绩;SXCJ---数学成绩; WYCJ---外语成绩;JL---简历。 试按以下要求用命令方式建立结构复合索引: (1)将XS表中的记录先以XIMING排序,XIMING相同的 再以XM排序,XM相同的再以XH排序,索引标识名为XXX1。 (2)将XS表中的记录先以XM排序,XM相同的再以ZPCJ 排序;SXCJ相同的再以CSRQ排序,索引标识名为XXX2。 (3)将XS表中的记录以学生的总成绩的降序排序,索 引标识名为XXX3。 解: (1) INDEX ON XIMING+XM+XH TAG XXX1 (2) INDEX ON XM+STR(SXCJ,5,1)+DTOC(CSRQ); TAG XXX2 (3) INDEX ON YWCJ+SXCJ+WYCJ TAG XXX3 DESC

记 录 的 浏 览(1)
查看表中记录内容的方法有以下几种: 一、使用“浏览”窗口 先将要查看的表打开并选定为当前表,然后从“显示” 菜单中选择<浏览>或在“数据工作期”窗口中点击“浏览” 按钮,均可打开“浏览”窗口。

记 录 的 浏 览(2)
―浏览”窗口显示活动表中的记录。在“浏览”窗口中 浏览一个表时,可以用两种方式查看记录:浏览和编辑。可 以在“显示”菜单中选择<浏览>或<编辑>切换查看方式(必 须先打开表的“浏览”窗口)。

记 录 的 浏 览(3)
二、使用BROWSE命令 BROWSE命令用来打开表的浏览窗口。BROWSE命令可以简单 到只有BROWSE一个词,也可以复杂到具有几十个选项,用以定 制浏览窗口的外观、控制记录的编辑和筛选浏览的记录、字段 等。对此,不必一一究其用法,掌握几个常用的选项即可。 语法:BROWSE [FIELDS <字段名表>][FOR <逻辑表达式>] 三、在VFP主窗口中显示记录 除了以上两种方法外,还可以用LIST和DISPLAY命令将表 中记录显示在系统主窗口中。 语法:LIST [FIELDS <字段名表>][范围] [FOR <逻辑表达式>][OFF] DISPLAY [FIELDS <字段名表>][范围] [FOR <逻辑表达式>][OFF] 说明:二者的区别是:前者的范围选项的默认值为所有记录 (ALL),后者为下一条记录(NEXT 1);前者在窗口显示满后,将 不停顿的连续显示,后者会做一停顿,等待用户按任意键继续 显示。

记 录 的 浏 览(4)
四、例题分析 (1)用BROWSE命令显示JS表中所有男教师的GH、XM、XB、 ZC等字段的内容(如图所示)。

记 录 的 浏 览(5)
(2)在VFP主窗口中显示JS表中所有男教师的GH、XM、 XB、ZC等字段的内容(如图所示)。

记 录 的 定 位(1)
1.记录指针标志 当一个表文件被打开后,系统中自动生成三个控制标志: 记录的开始标志、记录指针标志、记录的结束标志。当向表 中输入数据时,VFP为每个记录按输入顺序指定了“记录号 ”。第一个输入的记录的记录号是1,依次类推。(如图)
文件头 (包含表结构等信息) 第 1 号记录

记录开始标志 记录指针

第 2 号记录
…… 第 n 号记录

记录结束标志

记 录 的 定 位(2)
记录指针是一个非常重要的概念。它是VFP系统内部的一 个指示器,指向表中的记录,每当打开一个表文件时,记录指 针总是指向第一个记录。记录指针指向的那个记录称为当前记 录。可以将记录指针理解为保存当前记录号的变量。在进行数 据处理时,经常要移动记录指针,使记录指针指向用户所需要 操作的那个记录,这个过程即是记录的定位。测试当前记录指 针的值可用函数RECNO()进行测试。 记录的开始标志介于表结构和记录之间,前面是表结构, 后面是记录。 记录的结束标志是整个表记录结束的标志。记录的开始标 志可用函数BOF()进行测试。当记录指针指向记录的开始标志 时,其值为.T.,否则为.F.。记录结束标志可用函数EOF()进 行测试。当记录指针指向记录结束标志时,其值为.T.,否则 为.F.。

记 录 的 定 位(3)
下表列示的是刚打开一个VFP数据表时记录指针的情况:
表中记录情况 无记录 有记录 BOF()的值 .T. .F. RECNO()的值 1 1 EOF()的值 .T. .F.

记录指针的初始值总是1,不可能为0或负数,最大值是 表中记录总数+1。 2. 记录的定位方式 记录指针的定位方式可分为:记录指针的绝对定位、记录 指针的相对定位和条件定位。 指针的绝对定位 是指把指针移动到指定的位置。如指定记 录号的记录、第一个记录或最后一个记录。

记 录 的 定 位(4)
指针的相对定位是指把指针从当前位置开始,相对于当前
记录向前或向后移动若干个记录位置。指针的相对定位与定位 前指针的位置相关。 条件定位是指按照一定的条件自动地在整个表或表的某个 指定范围中查找符合该条件的记录,如果找到符合条件的记录 ,则把指针定位到该记录上,否则,指针将定位到整个表或表 的指定范围的末尾。 3. 记录定位的实现 (1)通过界面操作方式定位 在“表”菜单中的“转到记录”子菜单项中可以实现不同方 式的 定位: “记录号(R)…‖:实现绝对定位。 “定位(L)…‖:实现条件定位。需要在“定位记录”对话框 中输入查找范围、定位条件。按“定位”按钮实现定位。

记 录 的 定 位(5)
在“作用范围” 下拉列表中选择范围。其中有四个选项: “All‖:表中的全部记录; “Next‖:从当前记录开始的n个记录,个数在其右边的文 本框中输入; “Record‖:指定的记录,记录号在其右边的文本框中输入 ; ―Rest‖:当前记录后的所有记录。 在“For‖文本框中输入条件表达式。 例如,在“作用范围” 下拉列表中选择“All‖,在“For‖ 文本框中输入条件表达式:XM="高山",单击“定位”按钮,将 在所有记录中查找姓名为“高山”的记录。如果找到,则把指 针定位在第一个符合条件的记录上,否则,指针定位在记录结 束标志上。 (2)使用命令定位

记 录 的 定 位(6)
命令语法 GO [RECORD] n 或 GOTO [RECORD] n 或 n GO TOP 或 GOTO TOP GO BOTTOM 或 GOTO BOTTOM
?记录指针的相对定位命令SKIP 语法:SKIP [nRecords] 参数:[nRecords]:指定记录指针需要移动的记录数。如 果nRecords>0,记录指针将向文件尾移动nRecords个记录;如 果nRecords<0,记录指针将向文件头移动nRecords个记录;如 果NRecords省略,则命令等价于SKIP 1。

功能说明 定位到记录号为 n 的记录上 定位到第一个记录上 定位到最后一个记录上

记 录 的 定 位(7)
说明: ?如果从第一个记录向上移动一个记录,指针将指向 记录起始标志,BOF()函数将返回.T.,RECNO()函数返回值 为1。如果再执行SKIP –1命令,系统将显示出错信息:已 到文件头。此时,记录指针仍然指向记录起始标志。 ?如果从最后一个记录向下移动一个记录,指针将指 向记录结束标志,EOF()函数将返回.T.,RECNO()函数返回 值为记录总数+1,如果再执行SKIP命令,系统将显示出错 信息:已到文件尾。此时,记录指针仍然指向记录结束标 志。 ?如果表有一个主控索引或索引文件,SKIP命令将使 记录指针移动到索引顺序决定的记录上。

记 录 的 定 位(8)
4.例题分析 (1) 在当前已打开的XS表中有10条记录,执行以下命令: GO TOP SKIP 3 ?RECNO() 则输出结果是 C 。 A.1 B.3 C.4 D.2 (2) 在JS表中有15条记录,现执行以下命令: USE JS LIST ?RECNO() 则输出结果是 B 。 A.1 B.16 C.15 D.出错

―定位记录” 对话框

―转到记录” 子菜单

记 录 的 删 除 与 恢 复(1)
从表中删除记录应非常谨慎,以免造成不可挽回的数据 丢失。为此VFP系统将删除记录分为两步并由不同的命令来 执行:第一步只作删除标记,也称为逻辑删除;第二步才将 作了删除标记的记录彻底从表中删除,也称为物理删除。逻 辑删除可以用恢复删除命令恢复,而物理删除不能恢复。 1. 逻辑删除 (1)界面方式 如果要删除个别记录,只要在表的浏览窗口中单击每个 要删除记录左边的小方框,小方框变为黑色,表明该记录已 做上删除标记。如XS表中,“高山”和“柳宝”两名学生的 记录已打上了删除标记。 如果要在某一范围内删除一组符合指定条件的记录,可 从“表”菜单中选择“删除记录”,在出现的“删除”对话 框中,选择范围,建立删除条件的表达式,点击“删除”按 钮即可删除XS表中所有“信息管理系”的学生。

记 录 的 删 除 与 恢 复(2)
(2)命令方式 用DELETE-SQL命令标记要删除的记录。 语法:DELETE FROM 表名 [WHERE 过滤条件表达式 ] 参数: FROM 表名——指定要删除记录的表。 [WHERE 过滤条件表达式]——指定只给满足条件的记录 做删除标记。 2.物理删除 (1)界面方式 已被设置了删除标记(即已被逻辑删除)的记录,可以被 彻底删除——物理删除。 如果表的浏览窗口处于打开状态,可从“表”菜单中选 择“彻底删除”,这个过程将删除所有标记过的记录,并重 新构造表中余下的记录。经过这一步后,被删除的记录不能 再被恢复。

记 录 的 删 除 与 恢 复(3)
(2)命令方式 PACK命令具有与菜单同样的功能。 如果要删除一个表的所有记录,只留下表结构,可使用 ZAP命令。ZAP 不管记录是否带删除标记,一概彻底删除。所 以在实际使用中应慎用此命令。PACK 命令与ZAP命令都需要 以独占方式使用表。 3. 恢复删除 如果表的浏览窗口处于打开状态,可以在浏览窗口中单 击一下带删除标记记录的小方框,小方框将由黑变白,这样 就恢复了这个记录。同样也可以有选择地恢复一组记录。从 “表”菜单中选择“恢复记录”,然后输入恢复条件。 也可以使用RECALL命令恢复带删除标记的记录。 语法:RECALL [范围] [FOR 条件表达式1] ; [WHILE 条件表达式2]

记 录 的 删 除 与 恢 复(4)
4. 对带删除标记记录的访问 (1) 测试记录的删除标记 可以使用DELETE()函数测试当前表的当前记录是否带有 删除标记,如果函数返回.T.,说明记录带有删除标记。否则不 带删除标记。 (2) 控制对带有删除标记记录的访问 可以使用SET DELETED来指定VFP是否处理标有删除标记 的记录,以及其他命令是否可以操作它们。 语法: SET DELETED ON | OFF 参数: ON —— 忽略标有删除标记的记录。 OFF —— (默认值)允许访问标有删除标记的记录。

记 录 的 删 除 与 恢 复(5)
5.例题分析 (1) 执行DELETE ALL和ZAP命令都可删除表文件的记录, 它们的区别是 C 。 A. DELETE ALL只删除当前记录,而ZAP删除所有记录 B. ZAP只删除当前记录,而DELETE ALL删除所有记录 C. 用DELETE ALL删除的记录可用命令RECALL恢复,而用 ZAP删除的记录则不能恢复 D. DELETE ALL只删除记录,而ZAP连同表文件一起删除 (2) SET DELETED OFF命令的作用是①,函数DELETED() 的值为.T.说明②。 答案:① 使删除标记对任何命令无影响; ② 当前记录已被打上删除标记(逻辑删除)。

浏览窗口中记录的删除标记

删 除 标 记

输入删除 条件表达式

―删除”对话框

筛 选 记 录 与 字 段(1)
一、筛选记录 筛选记录是指从表中选出部分满足指定条件的记录来进行 浏览或其他操作,不满足条件的记录则被“隐含”起来。 1.通过界面操作筛选记录 先打开表的浏览窗口,然后在“表”菜单中选择“属性” 项,打开“工作区属性”对话框。 在“工作区属性”对话框中,在“数据过滤器”文本框中 输入筛选条件表达式。或者单击“数据过滤器”文本框右边的 “…‖按钮,打开“表达式生成器”对话框来构造一个表达式 。单击“确定”按钮。 则再浏览表时,在表的浏览窗口中就只显示经筛选表达式 筛选过的记录了。

筛 选 记 录 与 字 段(2)
2. 使用命令筛选记录 可以使用如下命令实现与界面操作相同的功能: SET FILTER TO 条件表达式 例如,用以下命令筛选出所有男学生: SET FILTER TO XB = ―男” 如果要把记录筛选条件去掉,只要执行以下命令即可: SET FILTER TO 另外在许多命令的用法中,可以包含FOR子句,使命令 在执行时进行临时性记录筛选。 应 当 注 意 的 是 : 对 SELECT--SQL 、 DELETE--SQL 和 UPDATE—SQL命令所作用的表使用SET FILTER TO命令设置 的过滤器不会限制这三个命令对表中记录的访问。

筛 选 记 录 与 字 段(3)
例如: USE js SET FILTER TO js.gl>=20 UPDATE js SET jbgz = jbgz+30 这组命令的本意是想把JS表中工龄在20年的教师的基本 工资加30,而结果是把所有教师的基本工资都加了30。 正确 的命令应该是: UPDATE js SET jbgz = jbgz+30 WHERE js.gl>=20 二、筛选字段 筛选字段是选取表的部分列。 在“工作区属性”对话框中,在“允许访问”框内选中 “字段筛选指定的字段”单选钮,单击“字段筛选”按钮, 在打开的“字段选择器”对话框中选定所需字段。

―工作区属性”对话框
表达式生成器

―字段选择器”对话框

记 录 的 修 改(1)
一个表只要不是以只读方式打开,就可对其记录进行编 辑和修改。可以通过界面操作进行或使用命令进行修改。 1. 在浏览窗口中编辑修改记录 个别记录的修改可在编辑窗口或浏览窗口中进行 。用 EDIT命令或CHANGE命令打开编辑窗口;用BROWSE命令或项目管 理器打开浏览窗口,在浏览窗口中可以进行修改。 例如,要用EDIT命令来编辑修改XS表,可以在命令窗口 中输入如下命令: EDIT 2. 批量记录的修改 例如,当跨入新的一年时,所有在职教工(假设“工龄 <60‖为在职)的工龄必须加1,就要进行批量记录的修改(当然 可以手工地逐个去修改,但这种方法不可取!)。只要指定了字 段以及替换后的值,批量修改将会自动地进行。下面以教师表 为例来批量修改工龄。

记 录 的 修 改(2)
(1) 界面方式的批量修改 使用“表”菜单中的“替换字段……‖项,打开“替换 字段”对话框(如下图)。在“字段”下拉列表中指定当前表 的哪个字段的值要替换。在“With:”右边的文本框中输入 一个表达式或常量,用来替换上述所选字段,然后点击“替 换”按钮。

记 录 的 修 改(3)
(2) 使用命令批量修改记录 修改记录字段值的的命令有两个: UPDATE-SQL命令和 REPLACE命令。 这两个命令都能对表中多个字段,多个记录进行批量地 自动修改,都是适用于编程方式。UPDATE-SQL命令更简练和 快捷。 语法:UPDATE 表名; SET 字段1 =表达式1 [,字段2 = 表达式2 ...]; WHERE 条件表达式 参数: 表名——指定要更新记录的表。 字段1=表达式1 [,字段2=表达式2 ...]——指定要更新的列 以及这些列的新值。 WHERE条件表达式——指定要更新的记录所符合的条件; 如果省略WHERE子句,在列中的每一行都用相同的值更新。

记 录 的 修 改(4)
REPLACE FieldName1 WITH eExpression1[ADDITIVE]

[ ,FieldName2 WITH eExpression2[additive]…
[scope][FOR lExpression]

用此命令时,被更新的表必须事先打开,且在执行 命令后,记录指针位于指定范围的结尾。
Close tables all Use js Replace jbgz with jbgz+100 for year(date())-year(gzrq)>29

记 录 的 修 改(5)
3. 例题分析 设当前表为JS.DBF,其结构为:职工号(C,6)、姓名(C,8)、 性别(C,2)、年龄(N,2)、职称(C,10)和基本工资(N,4),其中 有若干条记录。请用单条命令实现以下功能: (1)对所有职称为“讲师”且基本工资大于500的教师,将他 们的职称晋升为“副教授”,基本工资上调10% ; (2)将所有具有高级职称(只含“副教授”或“教授”)的女 教师的基本工资上调10%。 解: (1) UPDATE JS SET 职称=―副教授”,; 基本工资=基本工资*1.1; WHERE 职称=―讲师” AND 基本工资>500 (2) UPDATE JS SET 基本工资=基本工资*1.1; WHERE ―教授”$职称 AND 性别=―女”

使 用 NULL 值
在建立新表时,可以指定表字段是否接受 null 值。在“表设计器”的“字段”选项卡中选定或清 除字段的 Null 列。当 Null 列被选定时,该字段接 受 null 值。 或者,在 CREATE TABLE 命令中使用 NULL 和 NOT NULL 子句。 例如,以下命令可以创建ZG表,其中的gh(工 号)和xm(姓名)字段不允许为null值,而csrq(出生日 期)字段则允许为null值: CREATE TABLE zg(gh C(6) NOT NULL, ; xm C(8) NOT NULL, csrq D NULL) 也可以用 SET NULL ON 命令控制表字段中是否 允许 null 值。

记 录 的 复 制(1)

当前表中的记录也可以复制到其它表文件中。方法是: 1.界面方式 打开“文件”菜单,点击其中的“导出”,在打开的“导出” 话框中选择类型为“Visual FoxPro 3.0(DBF)‖,并输入目标表 文件名,单击“确定”按钮即可将当前表的所有记录复制到指定 文件名的表中。或通过单击“选项”按钮,在“导出选项”对话框 中指定作用范围、条件和字段,以进行部分记录或部分字段的 复制操作。 2.使用COPY命令 语法:COPY TO <新文件名> [FIELDS<字段名表>] [范围][FOR<条件>] 功能:将已打开的当前表中的全部或部分记录复制到指定 的新文件中,如存在.FPT文件则自动复制。

记 录 的 复 制(2)
3.例题分析 (1) 将XS表中所有“信息管理系”的学生的记录复制到 新表XSA中的命令如下: USE XS COPY TO XSA FOR XIMING = ―信息管理系” (2) 生成一个新表文件XSB.DBF,使其结构仅包含XS表 中的XH、XM、XB、CJ等四个字段,记录为XS表中的第4至第8 条记录的命令是: USE XS COPY TO XSB FIELDS XH,XM,XB,CJ; FOR RECNO()>=4 AND RECNO()<=8 (3) 仅将XS表的结构复制生成一个新表XSC.DBF的命令 如下: USE XS COPY STRUCTURE TO XSC

―导出”对话框

―导出选项”对话框


相关文章:
VFP二级考试应试策略
搜 试试 7 帮助 全部 DOC PPT TXT PDF XLS ...VFP 二级考试应试策略年开设以来, 江苏省非计算机...VFP 基础 CH3 表的基本操作 CH4 数据库管理 CH5 ...
更多相关标签: