• 沒有找到結果。

多表的操作 .1 工作区的概念

1.工作区号与别名

Visual FoxPro6.0提供了 32767 个工作区,每个工作区都有一个工 作区号,分别用 1~32767 表示,其工作区 1~10 还分别对应有别名 A

~J。系统还规定,可以用工作区的别名作为工作区的标识符,A~J 这 10个字母是工作区的别名。

每个工作区只能打开一个表,在一个工作区中打开其他的表时,原 来在该工作区中打开的表将自动关闭。

如果在打开表时,需用 USE 命令,格式如下:

USE <表文件名> [ALIAS <别名>] [IN <工作区号/工作区别名/表别名

>]

2.在“数据工作期”窗口查看工作区 3.6.2 选择工作区的命令

1.命令格式

SELECT <工作区号>/<别名>/0 2.命令功能

选择或切换一个工作区作为当前工作区。

0——表示未被打开的最小工作区区号。

3.6.3 使用 USE 命令指定工作区打开表 1.命令格式

USE <表名> IN <工作区号>/<别名>

2.命令功能

使用区号或别名在指定工作区中打开表文件。

学 进 程 与 设 计

如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记 录指针时,其它表的记录指针是不会随之移动。如果要想其它表的记录 指针也随之移动,则要建立表间的关联。

关联就在两个或两个以上的表之间建立某种连接,使其表的记录指针 同步移动。用来建立关联的表称为父表,被关联的表称为子表。建立两 表间的关联后,父表的记录指针将带动子表的记录指针随之移动(按关 联表达式值相同)。

1.命令格式

SET RELATION TO [<关联表达式 1>] INTO <工作区>/<别名>

[,<关联表达式 2> INTO <工作区>/<别名>…]] [INTO <工作区>/<

别名>][ADDITIVE]

2.命令功能

在两个表之间建立关联。

【例 3-9】创建 xsdb 与 yy 两表之间的关联。

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

3.7 用命令对表进行操作简介

3.7.1 打开表命令 1.命令格式

USE <文 件 名 > [INDEX < 索 引 文 件 名 表 >][ALIAS< 别 名 >]

[EXCLUSIVE]

2.命令功能

打开当前工作区内的表,并且可打开相应的索引文件。如果表中含有 备注字段,相应的.FPT 文件也同时打开。当打开另一个表时,当前工作 区中先前使用的表将自动关闭。

ALIAS <别名>选择项用来给表文件指定一个别名。如果缺省此项,

表文件名本身就是别名。

EXCLUSIVE表示以独占方式使用表,即不允许其他用户在同一时刻 也使用该表。

【例 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 为当前工作 区。

学 进 程 与 设 计

件,选择工作区 1 为当前工作区。CLOSE 命令不释放内存变量。

4.QUIT 命令 命令格式:QUIT

功能:关闭所有打开的文件,结束 VF 并返回 Windows 操作系统。

3.7.3 显示表记录的命令 1.LIST 命令

命令格式:LIST [<范围>][FIELDS<字段名表>][FOR<条件>]

[WHILE<条件>][TO PRINT][OFF]

功能:以列表的形式显示表的全体或部分记录及字段内容。

<范围>为 ALL、RECORD <n>、NEXT <n>、REST 中的一个参 数。不指定时,默认范围为 ALL。

FIELDS <字段名表>用来指定显示的字段名、内存变量名和表达 式,其中 FIELDS 可以省略。对于备注字段及通用字段不显示具体内 容。若要显示备注字段数据,则必须在<表达式表>中明确指出该字段 名。

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<条件>]

功能:将打开表的全部或部分结构及数据复制到新表。

3.7.5 修改表结构的命令

命令格式:MODIFY STRUCTURE

功能:打开表设计器窗口,显示当前表的结构,并可直接修改其结 构。

3.7.6 记录定位命令

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

学 进 程 与 设 计

1.逻辑删除 DELETE 命令

命令格式:DELETE [<范围>] [FOR<条件>] [WHILE<条件>]

功能:在当前表文件中对要删除的记录加上删除标记。

【例 3-16】在 XSDB 表中,性别为“女”的记录加删除标记。

USE XSDB

DELETE FOR 性别="女"

2.恢复逻辑删除 RECALL 命令

命令格式:RECALL [<范围>][FOR<条件>][WHILE<条件>]

功能:在当前表文件中,去掉删除标记,恢复被删除的记录。

【例 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<表达式>]

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

【例 3-20】为“XSDB”表计算所有学生的平均分和总分。

USE XSDB

REPLACE ALL 总分 WITH 计算机+英语, 平均分 WITH 总分/2 3.7.9 条件查询 LOCATE 命令

命令格式:LOCATE [<范围>] [FOR <条件>] [WHILE <条件>]

CONTINUE

功能:按顺序搜索表,从而找到满足指定逻辑表达式的第一个记录。

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。

【例 3-23】为数据表 XSDB.dbf 按计算机从小到大建立单索引文件 xsjsj.idx,按英语从高到低建立单索引文件 xsyy.idx。

学 进 程 与 设 计

USE XSDB

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

LIST && 记录已按基本工资升序排列 INDEX ON –英语 TO xsyy;

&&给实发工资取负号后使索引关键字表达式按升序排列,以求实发 工资按降序排列

LIST && 记录已按实发工资降序排列

【例 3-24】为 XSDB.dbf 按下列要求建立结构复合索引文件,如图 所示。

(1)记录以姓名降序排列,索引标识 xm,索引类型为普通索引;

(2)记录以生年月日升序排列,索引标识 snyr,索引类型为唯一索 引;

(3)记录以院系降序排列,院系相同的按出生日期降序排列,索引 标识 yxsnyr,索引类型为候选索引;

USE XSDB

INDEX ON 姓名 TAG xm DESCENDING LIST

INDEX ON 生年月日 TAG snyr UNIQUE LIST

INDEX ON 院系+DTOS(生年月日) TAG yxsnyr DESCENDING CANDIDATE

LIST

3.7.12 追加记录 APPEND 命令 命令格式:APPEND [BLANK]

功能:在当前表的末尾追加一些新记录或空记录。

【例 3-23】在“XSDB”表的末尾追加一条空记录。

USE XSDB APPEND BLANK

3.7.13 插入记录 INSERT 命令

命令格式:INSERT [BLANK] [BEFORE]

功能:在打开表的任意位置插入新记录或空记录。

【例 3-24】在“XSDB”表的第 6 条记录之前插入一条空记录。

USE XSDB 备注

学 进 程 与 设 计

GO 6

INSERT BEFORE BLANK 或:GO 5

INSERT BLANK

3.7.14 从其表文件中追加数据 APPEND FROM 命令

命令格式: APPEND FROM < 文件名 > [FIELDS < 字段名表 >]

[FOR <条件>]

功能:把指定表文件中的记录有条件或无条件地追加到当前表文件的 末尾。

【例 3-25】

USE JSJ

APPEND FROM XSDB FIELDS 学号,计算机 for 院系="会计系"

教学讲授小结:(5 分钟)

对使用多个表涉及到的工作区以及数据工作期的相关概念进行了阐 述。本章是全书的重点,读者应认真掌握表的建立和操作方法以及索引

对使用多个表涉及到的工作区以及数据工作期的相关概念进行了阐 述。本章是全书的重点,读者应认真掌握表的建立和操作方法以及索引