1
第四章
Visual FoxPro 数据库及操作目录上页下页退出
2
本 章 目录第一节 Visual FoxPro 数据库及其建立第二节 数据库表的建立和操作第三节 表的排序与索引第四节 数据完整性第五节 自由表第六节 多表操作目录上页下页退出
3
第一节 Visual FoxPro 数据库及其建立数据库是表的集合 。 从 Visual FoxPro 3.0开始引入了真正意义上的数据库概念 。 把一个二维表定义为表,
把若干个关系比较固定的表集中起来放在一个数据库中管理,在表间建立关系,设置属性和数据有效性规则使相关联的表协同工作 。 数据库文件具有,dbc扩展名,其中可以包含一个或多个表,关系,视图等 。
一个 Visual FoxPro表或,dbf文件,能够存在以下两种状态之一:与数据库相关联的数据库表,与数据库不关联的自由表 。 二者的绝大多数操作相同且可以相互转换 。
相比之下,数据库表的优点要多一些 。 当一个表是数据库的一部分时,它就可以具有以下内容:
● 长表名和表中的长字段名
● 表中字段的标题和注释
● 默认值,输入掩码和表中字段格式化
● 表字段的默认控件类目录上页下页退出
4
● 字段级规则和记录级规则
● 支持参照完整性的主关键字索引和表间关系
● INSERT,UPDATE或 DELETE事件的触发器一、建立数据库
1,命令方式
【 格式 】 CREATE DATABASE [<数据库文件名 >|? ]
【 功能 】 建立一个新的扩展名为,DBC的数据库文件并打开此数据库 。
【说明】 <数据库文件名 >指定生成的数据库文件,若省略扩展名,则默认为,DBC,同时也自动建立相关联的数据库备注文件扩展名为,DCT,关联的索引文件扩展名为,DCX。 如果未指定数据库文件名或用“?”代替数据库名,Visual FoxPro系统会弹出创建对话框,以便用户选择数据库建立的路径和输入数据库名。保存后该数据库文件被建立,并且自动以独占方式打开该数据库。
目录上页下页退出
5
2.菜单方式用菜单方式建立数据库的具体步骤如下,
( 1) 选择 【 文件 】 ∣ 【 新建 】 出现新建对话框 。
( 2) 选择,数据库,单选按钮,再单击,新建文件,
按钮,出现,创建,对话框 。
( 3) 在,创建,对话框中输入文件名 。 选择,保存,
按钮,系统自动打开数据库文件,并且将数据库设计器 也自动打开 。
3,利用项目管理器建立数据库打开已建立的项目文件,出现项目管理器窗口 。 在
,数据,选项卡中选择,数据库,,然后单击,新建数据库,按钮,再通过,创建,对话框提示用户输入数据库名,即扩展名为,DBC的文件名,单击
,保存,,出现数据库设计器 。
目录上页下页退出
6
1,打开数据库
1),命令方式
【 格式 】 OPEN DATABASE [<数据库文件名 > |?]
[ EXCLUSIVE|SHARED]
【 功能 】 将磁盘上一个扩展名为,DBC的指定数据库文件打开 。
【说明】 打开一个数据库文件,同名的,DCT相关的数据库备份文件与,DCX相关的索引文件也一起被打开。
数据库打开后,在常用工具栏中可以看见当前正在使用的数据库名,同时当数据库设计器为当前窗口时,系统菜单上出现 【 数据库 】 菜单项 。
<数据库文件名 >:指定要打开的数据库名。如果用户省略 <数据库文件名 >或用“?”代替数据库名。系统会显示打开对话框。
二、数据库的打开与关闭目录上页下页退出
7
在数据库被打开的情况下,它所包含的所有表可以使用。但是,表并没有被真正打开,用户要打开它,仍要用 USE命令。
2),菜单方式
( 1) 选择 【 文件 】 |【 打开 】,出现打开对话框 。
( 2) 选择数据库文件所在的文件夹,将文件类型选择为,数据库 (,dbc),。
( 3) 选择所要打开的数据库文件名,单击“确定”
按钮。
3),利用项目管理器打开数据库打开已建立的项目文件,出现项目管理器窗口,
选择“数据”标签,选择要打开的数据库名,然后单击“打开”按钮。
目录上页下页退出
8
数据库文件操作完成后,或暂时不用时,必须将其关闭,保存在外部存贮器中以确保数据的安全性 。 关闭数据库文件有以下几种方式:
1,命令方式
【 格式 】 CLOSE [ALL|DATABASE ]
【 功能 】 关闭当前打开的数据库 。
【 说明 】 ALL用于关闭所有对象 。 如数据库,表,索引,项目管理器等 。
DATABASE关闭当前数据库和数据库表;如果当前没有打开的数据库,则关闭所有打开的自由表、所有工作区内所有索引和格式文件。
三、数据库的关闭目录上页下页退出
9
2,利用项目管理器关闭数据库打开已建立的项目文件,出现项目管理器窗口,
选择,数据,标签,选择,数据库,下面需要关闭的数据库名,然后单击,关闭,按钮 。 在常用工具栏上的当前数据库下拉列表框中该数据库名消失,
同时在项目管理器中,关闭,按钮变成,打开,按钮 。
四,数据库的修改在 VFP中,修改数据库实际是打开数据库设计器,
用户可以在数据库设计器中完成各种数据对象的建立、修改、删除等操作。
目录上页下页退出
10
数据库设计器打开的方法:
( 1) 从项目管理器中打开数据库设计器 。
( 2)从,打开,对话框中打开数据库设计器。
( 3) 用命令方式打开数据库设计器 。
命令格式:
MODIFY DATABASE [数据库文件名 |? ][NOWAIT][NOEDIT]
说明:
( 1) 数据库文件名,是指定要修改的数据库文件名,选用
,?,,则弹出,打开,对话框,选定要打开的数据库文件 。
( 2) NOWAIT选项:只用于程序中,交互方式下无效。
( 3) NOEDIT,指打开数据库设计器,但禁止对数据库进行修改。
目录上页下页退出
11
1,命令方式
【 格式 】 DELETE DATABASE <数据库文件名 |? >
【 功能 】 从磁盘上删除一个扩展名为,DBC的数据库文件 。
【 说明 】 被删除的数据库不能处于打开状态 。 被删除的数据库中的表成为自由表 。
数据库文件名可以包括数据库的路径和数据库名字 。 如果用,?,代替数据库文件名,将显示打开对话框,用户从打开对话框中选择要从磁盘上删除的数据库的名字 。
2,使用项目管理器打开已建立的项目文件,出现项目管理器窗口,单击,数据,标签,选择要删除的,数据库,,然后单击
,移去,按钮 。 若选择,移去,仅将数据库从项目中移去,被删除的数据库中的表成为自由表 。 若选择,删除,
将从磁盘上删除数据库 。
五、删除数据库目录上页下页退出
12
前面我们已经知道表有二种,一种是数据库表,
另一种是自由表 。 如果建表时数据库是打开的,则建立的表为当前数据库表,否则,建立自由表 。
无论建立那种表,其方法都相同 。 一个表由表结构和表记录两部分组成 。 表结构描述了数据存放形式以及存贮的顺序,确定了表的字段,就完成了对表结构的定义;表记录是表所要保存的数据主体,
数据由记录组成,字段是构成记录的基本单元 。
建立一个表文件首先第一步就是建立表结构,
然后再输入表记录 。
建立表结构的方法有很多,在这里主要讲述三种方法:命令方式,菜单方式和使用项目管理器的方式 。
第二节 数据库表的建立 和操作目录上页下页退出
13
一,数据库表的建立
1,命令方式
【 格式 】 CREATE [<表文件名 > |?]
【 功能 】 建立一个新的,扩展名为,DBF的表文件 。
【 说明 】 <表文件名 >指定生成的表文件名,若缺省扩展名,则默认为,DBF。 如果使用,?,或末指定表文件名,Visual FoxPro系统会弹出创建对话框,
以便用户输入表名 。
目录上页下页退出
14
现在用命令方式来建立 stud.dbf表 。 表内容如下:
学号 姓名 性别 班级名 系别代号 地址 出生日期 是否团员 照片 备注
011110 李建国 男 计 0121 01 湖北武汉 09/28/84 T
011103 李宁 女 电 0134 02 江西九江 05/06/85 F
011202 赵娜 女 英 0112 03 广西南宁 02/21/84 F
021204 孙亮 男 电 0134 02 湖南长沙 09/08/86 T
011111 赵琳 女 计 0121 01 江苏南京 11/18/85 T
021405 罗宇波 男 英 0112 03 江苏南通 12/12/85 F
目录上页下页退出
15
用命令方式建立表的具体步骤为:
( 1) 如果没有建立 STUDENT数据库,则先建立数据库再打开它 。 如果创建自由表,该步可略去 。
( 2) 在命令窗口中输入 CREATE STUD回车,系统打开
,表设计器,对话框,如图 3-1和图 3-2所示 。
( 3) 在,字段名,文本框中输入第一个字段名:,学号,,在,类型,下拉列表框中,选择字段的类型为字符型,在宽度输入框中输入 10或单击右边的微调按钮至 10。
( 4) 将输入光标定位在第二个字段的字段名上,用同样的方法依次输入各个字段的字段名,类型,宽度和小数位数 。
( 5)将所有字段的参数确定好之后,单击,确定,或按快捷键 CTRL+W存盘。系统会打开提示窗口,询问用户是否立即输入记录,选择,是,立即开始输入记录,
选择,否,不输入记录,光标返回命令窗口,只建立表结构。
目录上页下页退出
16
图 3-1 自由表设计器图 3-2 数据库表设计器目录上页下页退出
17
表设计器对话框中包含,字段,,,索引,,,表,三个选项卡 。
1),字段,选项卡,适用于建立表结构,确定表中每个字段的字段名,字段类型,字段宽度和小数位数等 。
● 字段名:是某字段的名字 。 在表中必须是唯一的,字段名必须以汉字,字母和下划线开头,由汉字,字母,
数字和下划线组成,对于数据库表支持长字段名,字段名最多为 128个字符,自由表不支持长字段名,字段名最多为 10个字符 。 当数据库表转化为自由表时截去超长部分的字符 。 字段名不能使用系统的保留字 。
● 字段类型:表示该字段中存放数据的类型。一个字段即二维表中的一列,其中的数据应具有共同的属性。
若存放的是一些符号,不进行数值运算,则定义为字符型;若需要进行数值运算,则根据数值表示的实际意义,选择数值型、货币型、浮点型、双精度型、整型中的一种。对描述日期的字段,可根据需要定义为日期型或日期时间型。对取值只有两种情况,为,真,
或为,假,的数据定义为逻辑型。
目录上页下页退出
18
若存储的字符超过 254,为节省存储空间可定义为备注型。若要保存图片或 OLE对象,可定义为通用型。
备注型和通用型字段的信息都没有直接存放在表文件中,而是存放在一个与表文件同名的,FPT文件中。
● 字段宽度:表示该字段所允许存放数据的最大宽度 。
由数据的最大宽度决定 。 过大浪费存储空间,过小数据溢出 。 字符型字段的最大宽度 254个字符,数值型字段和浮点型字段的宽度为 20位,逻辑型字段的宽度固定为 1,日期型字段的宽度固定为 8,通用型字段和备注型字段的宽度固定为 4。
● 小数位数:只对数值型字段和浮点型字符等数值类型有效,允许最大宽度 20。在计算数值型字段和浮点型字段的宽度时,小数点本身也算作一个字符。
数值型字段的小数位数由数据的精度决定位数。
若建立的是数据库表,则下面还有显示、字段有效性等框。
目录上页下页退出
19
① 字段的显示属性
● 格式:控制字段在浏览窗口,表单,报表等显示时的样式 。 格式字符及功能如表 3-1所示 。
字符 功 能 字符 功 能
A 字母字符,不允许空格和标点符号 R 显示文本框的格式掩码,但不保存到字段中
D 使用当前的 SET DATA格式 T 删除前导空格和结尾空格
E 英国日期格式 ! 字母字符转换成大写
K 光标移至该字段选择所有内容 ^ 用科学计数法表示数值数据
L 数值字段显示前导 0 $ 显示货币符号表 3-1 字段的格式字符目录上页下页退出
20
表 3-2 字段的显示掩码字符
● 标题:若表结构中字段名用的是英文,则可以在标题中输入汉字,这样显示该字段值时就比较直观了。没有设置标题,则将表结构中的字段名作为字段的标题。
字符 功 能 字符 功 能
X 任意字符 * 左侧显示 *
9 数字字符和 +-号,指定小数点位置
# 数字字符,+-号和空格,用逗号分隔整数部分
$ 指定位置显示货币符号 $$ 货币符号与数字不分开显示
● 输入掩码:控制输入该字段的数据的格式。掩码字符及功能如表 3-2所示。
目录上页下页退出
21
② 字段有效性
● 规则:限制该字段的数据的有效范围 。 在规则中输入:
性别 ="男 ".OR.性别 ="女 "。 这样当给,性别,字段输入记录值时就只能输入,男,或,女,。
● 信息:当向设置了规则的字段输入不符合规则的数据时,就会将所设置的信息显示出 。
● 默认值:当往表中添加记录时,系统向该字段预置的值。在,性别,字段中输入默认值为,男,。输入记录时只有女生才需要改变默认值,可以减少输入。
字段有效性的设置可在图 3-2中进行 。
2) 表选项卡,字段选项卡上主要介绍的是字段属性,
它控制了字段值的输入,表选项卡则对表的记录属性进行描述,控制记录数据 。
在这里主要介绍记录有效性和触发器。如图 3-3所示。
目录上页下页退出
22
图 3-3 记录有效性和触发器目录上页下页退出
23
① 记录有效性
● 规则:指定记录的有效条件,满足该条件,数据才能输入到表中,它确定的是该记录各字段值之间的总体数据关系是否有错 。
● 信息:当记录的数据不符合规则时,由系统显示给用户的提示信息 。
② 触发器当对记录进行操作时,若设置了触发器,则对触发器设置的条件表达式进行验证,若其值为真,T.,则允许进行相关操作,否则,则拒绝操作 。
● 插入触发器:当向表中插入或追加记录时,判断其表达式的值,为,真,允许插入或追加,为
,假,不允许插入或追加 。
● 更新触发器:当要修改记录时,判断其表达式的值,为,真,允许修改,为,假,不允许修改 。
目录上页下页退出
24
● 删除触发器:当要删除表中记录时,判断其表达式的值,为,真,允许删除,为,假,不允许删除 。
以上三类触发器也可以用相应的命令实现:
CREATE TRIGGER ON 表名 FOR INSERT AS触发条件表达式
CREATE TRIGGER ON 表名 FOR UPDATE AS触发条件表达式
CREATE TRIGGER ON 表名 FOR DELETE AS触发条件表达式
2,菜单方式选择 【 文件 】 |【 新建 】 打开新建对话框,选择
,表,,单击,新建文件,出现创建对话框,确定需要建立表的路径和表名,按,保存,按钮后,
出现,表设计器,对话框 。 以下步骤同命令方式 。
目录上页下页退出
25
3,用项目管理器新建表打开已建立的项目文件,出现项目管理器窗口,选择,数据,选项卡中的,数据库,下的表,然后单击
,新建,按钮。出现新建表对话框,选择,新建表,出现创建对话框,确定需要建立表的路径和表名,按,保存,按钮后,出现图 3-1所示的,表设计器,对话框。
以下步骤同命令方式。
二,数据库表记录的输入如果在刚建好表结构时,在系统提示是否立即输入记录的对话框中选择,是,可直接进入输入记录窗口 。 如果选择了,否,,再想输入表记录就要以追加方式输入记录 。
输入表记录的方法又分为命令方式和菜单方式两种方法 。
1,命令方式
【 格式 】 APPEND [BLANK]
【 功能 】 在当前已打开表的末尾追加一条或多条记录 。
目录上页下页退出
26
【说明】 BLANK,表示在表末尾追加一条空记录,并自动返回命令窗口,此时系统并不弹出编辑窗口。
【 例 4-1】 在学生表末尾追加记录 。
USE STUD &&打开表
APPE &&或 EDIT
注意,输入逻辑值时只输入 T或 F,定界符系统自动生成输入日期值时只输入 数码,分隔符系统自动生成输入备注值时,光标位于 MEMO上时,按
CTRL+PgDn进入编辑窗口,完成后按 CTRL+W
返回下一个字段继续输入。
2.菜单方式
( 1) 首先打开表 STUD.DBF。
( 2) 选择 【 显示 】 |【 浏览 】 命令 。
( 3) 选择 【 表 】 |【 追加新记录 】 命令,用户可以输入追加记录的各个字段 。
目录上页下页退出
27
1,表的打开表文件建好后,以文件的形式保存在磁盘上,在进行各种操作之前,首先必须打开表 。 打开表的过程实质上就是将表从磁盘调入内存,这样就可以对表中的数据进行各种操作 。 系统在任何时刻都只能对内存中的表进行访问 。
( 1) 命令方式
【 格式 】 USE [[<盘符 >][<路径 >]<[数据库名 ! ]表文件名 |?>
【 功能 】 打开指定磁盘的指定路径下的表和相关的索引文件 。
【 说明 】 <盘符 >和 <路径 >:指定表文件所在的驱动器及路径,若 省 略 盘 符 和 路 径 参 数,则 打 开 当前盘,当前路径下的表文件 。
三、表的打开与关闭目录上页下页退出
28
[数据库名 ! ]表文件名:指定打开指定数据库中的表文件 。 若末指定数据库名,则在当前数据库中查找,没有则在自由表中查找 。 两者同名,则打开数据库中的表 。
如果表文件中含有通用型,备注型字段,同名的,FPT文件也同时打开 。
若不指定表文件名而使用,?”,系统会弹出
,使用,对话框,以便用户指定打开表的文件名 。
【 例 4-2】 打开在 E盘 VFP子目录中 STUD.DBF表 。
USE E:\VFP\STUD
( 2) 用项目管理器打开表在项目管理器中选中需要打开的表,选择,浏览,
或,修改,都能直接打开表且进行浏览或修改,
关闭浏览或修改窗口后,该表仍处于打开状态 。
目录上页下页退出
29
2,表的关闭表文件操作完成后,或暂时不用时,必须将其关闭,保存到外存中以确保数据的安全性 。 关闭表就是将表文件从内存中调出,保存在磁盘上 。 关闭表文件有以下几种方式:
( 1) 打开另一个表文件如果工作区中已打开有表文件,打开另一表文件时,
系统将自动将先前打开的表文件关闭 。
( 2) 使用不带任何选项的 USE命令
【 格式 】 USE
【 功能 】 关闭当前已打开的表文件 。
( 3) 使用 CLEAR命令
【 格式 】 CLEAR ALL
【 功能 】 关闭所有工作区中已打开的表文件,索引文件,格 式 文 件 及 备 注 文 件 等,同 时 释 放 所 有的内存变量 。 并选择工作区 1为当前工作区 。
目录上页下页退出
30
( 4) 使用 CLOSE命令
【 格式 1】 CLOSE ALL
【 功能 】 关闭各种类型文件,并选择工作区 1为当前工作区 。
【 格式 2】 CLOSE DATABASES
【 功能 】 关闭所有已打开的数据库文件,表文件,索引文件,格 式 文 件 及 备 注 文 件 等,并 选 择 工 作区 1为当前工作区 。
( 5) 退出 Visual FoxPro系统
【 格式 1】 QUIT
【 功能 】 退出 Visual FoxPro系统,并关闭所有打开的文件,返回操作系统 。
( 6) 在数据工作窗口中关闭在数据工作窗口中选择要关闭的表文件,然后选择,关闭,按钮,系统将关闭所选择的表文件 。
目录上页下页退出
31
1,删除自由表
【 格式 】 DELETE FILE [表文件名 |? ]
【 功能 】 将指定的表文件从磁盘上删除 。
【 说明 】 如果删除的表文件存在有与之相关的,fpt备注文件和 (,cdx或,idx) 索引文件,则同时删除这些文件 。 删除一个表文件,应保证该表文件是处于关闭状态的 。 要删除的表文件如果不是在默认的路径下,则文件名应指明路径 。 表文件名不能包含通配符 。
若不指定文件名或使用,?”,系统会弹出
“删除” 对话框,选择要删除的表文件路径、
文件类型 及文件名后,单击,删除”按钮。
四、表的删除目录上页下页退出
32
2,删除数据库表先将数据库表从数据库中移去,然后再用删除自由表的方法进行删除 。
移去数据库表的命令是:
【 格式 】 REMOVE TABLE [表文件名 |? ]
[DELETE][RECYCLE]
【 功能 】 从当前数据库中移去一个表 。
【说明】 表文件名:准备从数据库中移去的表文件名。
选择?将出现移去对话框,从中选择一个要从当前数据库中移去的表。
选择 DELETE在移去数据库表的同时,从磁盘上删除。选择 RECYCLE在移去数据库表的同时,不会立即从磁盘上删除,而是放入回收站中。
目录上页下页退出
33
3,在项目管理器中删除表在项目管理器中选中需要删除的表,选择“移去”
按钮或选择主菜单中【项目】 |【移去文件】命令,出现一个选择对话框,若选择“移去”按钮,则将表文件移出项目文件,若选择“删除”按钮,则将表文件从磁盘上删除。
五、表的显示
1,表结构的显示在表的使用过程,要经常查看表的结构和记录,以随时了解表的变化情况 。
【 格式 】 LIST | DISPLAY STRUCTURE [TO PRINT
[PROMPT] | TO [FILE] [<文件名 >]]
【 功能 】 显示或打印当前表文件的结构。
目录上页下页退出
34
在执行以上命令时,如果系统中没有已打开的表文件,
系统提示输入文件名 。 用 LIST命令,所有信息连续显示,
信息较多时,屏幕停止在最后一屏;用 DISPLAY命令,如果信息较多则分屏显示,敲任意键继续显示下一屏 。
【例 4-3】显示表 STUD.DBF的结构。
USE STUD
LIST STRUCTURE
需要指出的是,最后一行显示出的记录字节数是所有字段宽度之和再加 1。这额外的一个字节是用来存放记录的删除标记( *)的。
2,表记录的显示
1),命令方式
【 格式 】 LIST | DISPLAY [FIELDS <字段名表 >][<范围 >]
[ FOR< 条件表达式 >] [ WHILE < 条件表达式
>][OFF][NOCONSOLE] [TO PRINTER [PROMPT] | TO
FILE<文件名 >]
【 功能 】 将当前表文件的记录按照指定的选项进行显示。
目录上页下页退出
35
【 说明 】 DISPLAY命令与 LIST命令的功能相似,当表文件的数据记录较多时,用 DISPLAY命令较为方便 。
还有一点不同之处就是,如果同时缺省 <范围 >和 <条件 >子句,DISPLAY命令只显示当前的一条记录,而
LIST命令则是取默认值 ALL而显示全部记录 。
FIELDS <字段名表 >:用来指定显示的字段 。
<范围 >:用来指定显示哪些记录 。
,范围,有以下四种表示方法:
● ALL,所有记录 。
● NEXT N,从当前记录开始,后面的 N条记录 ( 包括当前记录 )
● RECORD N,第 N条记录。
● REST,当前记录后的全部记录(包括当前记录)。
目录上页下页退出
36
FOR<条件表达式 >:指定对表文件中指定范围内满足条件的记录进行操作 。
WHILE<条件表达式 >:也是指定对表文件中指定范围内满足条件的记录进行操作,但是,当第一次遇到不满足条件的记录时,停止继续往后搜索 。
WHILE<条件表达式 >若与 FOR<条件表达式 >同时使用,则 WHILE项优先;若两者都不选用,则显示 <范围 >中指定的全部记录 。
OFF,表示不显示记录号;若不选此项,则在各记录前显示记录号。
【 例 4-4】 显示表 STUD.DBF的全部记录 。
USE STUD
LIST
目录上页下页退出
37
【 例 4-5】 显示男生的记录 。
USE STUD
DISPLAY FOR 性别 =’ 男 ’ FIELDS 学号,
姓 ;名,性别,班级名,系别代号
【 例 4-6】 显示表中所有记录的学号,姓名和性别 。
USE STUD
LIST FIELDS 学号,姓名,性别
【 例 4-7】 显示 表 中 1985年出生的同学的学号,姓名,
性别及出生日期 。
USE STUD
LIST FIELDS 学号,姓名,性别,出生日期 ;
FOR YEAR(出生日期 )=1985
目录上页下页退出
38
2),菜单方式
( 1) 打开表 。
( 2) 选择 【 显示 】 |【 浏览 】 命令,系统弹出记录浏览窗口,显示当前表中的记录 。 这时还可以选择 【 显示 】
|【 浏览 】 或 【 编辑 】 来改变显示方式 。
3),利用项目管理器在项目管理器中,选择需要显示的表文件,单击
,浏览,按钮或选择主菜单中 【 项目 】 |【 浏览 】 命令,
系统弹出记录浏览窗口,显示当前表中的记录 。
目录上页下页退出
39
六、表的修改
1,表结构的修改表结构的改变有时会引起表记录的变化,所以在一般情况下不轻易进行修改 。 但在确实需要时也可以进行修改 。 无论进行何种修改,使用的命令都是一个
1),命令方式
【 格式 】 MODIFY STRUCTURE
【 功能 】 将当前已打开的表文件的表设计器打开进行修改 。
【 说明 】 要修改表结构必须要先打开需要修改结构的表文件 。 如果当前工作区中没有已打开的数据库,执行此命令时系统会弹出,打开,对话框,以便用户选择需要修改表结构的文件名及路径等信息,用户选择完成后,系统将弹出表设计器对话框 。
主要有增加,修改,删除和移动几种操作 。
目录上页下页退出
40
( 1) 增加字段:将光标移至需插入位置上的字段上,选择,插入,按钮或按快捷键 ALT+I,在该位置上出现一个新字段,原位置以下的各字段均下移一行 。 确定增加字段的字段名,字段类型,字段宽度等参数,选择,确定,按钮即可 。
( 2) 修改字段:将光标定位在需要修改处,编辑修改,
完成后选择,确定,按钮即可 。
( 3) 删除字段:将光标移至需删除的字段上,选择,删除,按钮或按快捷键 ALT+D,在该位置上的字段被删除,原位置以下各字段均上移一行 。 选择,确定,按钮 。
( 4) 移动字段:将光标移至需移动位置的字段上,用鼠标拖动字段名前的,” 按钮,出现一个虚框,当虚框出现在目标位置上时松开鼠标,移动完成,选择,确定,按钮即可 。
无论是何种修改,选择,确定,按钮后,由于表结构的变化要影响表记录数据,所以都要出现对话框由用户确认修改是否有效 。
目录上页下页退出
41
使用 MODIFY STRUCTURE命令要注意以下几点:
① 在 MODIFY STRUCTURE命令的执行期间,如果强行退出,有可能丢失数据 。
② 不能同时修改字段名和它的类型,否则系统将不能正确地送回原来的数据而造成数据的丢失 。
③ 如果在修改字段名的同时插入或删除了字段,会引起字段位置发生变化,有可能造成数据丢失 。 但是,在插入或删除字段的同时却可以修改字段的宽度或字段的类型,MODIFY STRUCTURE将根据字段名正确地从备份文件中传送数据 。
④ 如果修改表结构完成后出现了数据丢失现象,或者对其不满意,可利用备份文件将表恢复到修改前的状态,方法是先将新的表文件删除掉,再将备份文件的扩展名,BAK改为表文件扩展名,DBF,将备注备份文件扩展名,TBK改为备注文件的扩展名,FPT。
目录上页下页退出
42
2),利用数据库设计器在数据库设计器中选中需要修改的表文件,再选择主菜单中 【 数据库 】 |【 修改 】 命令,具体的修改方法同命令方式 。
3),利用项目管理器在项目管理器中选中需要修改的表文件,再选择主菜单中 【 项目 】 |【 修改 】 命令或单击项目管理器中的,修改,按钮 。
2,修改记录在表的使用维护过程中,有大量的工作是对数据记录的修改,编辑与更新,通常可以采用编辑修改,
浏览修改和替换修改三种方式 。
目录上页下页退出
43
1),编辑修改
【 格式 】 EDIT / CHANGE [FIELDS <字段名表 >]
[<范围 >] [FOR <逻辑表达式 1>] [WHILE <逻辑表达式 2>]
【 功能 】 按照给定条件编辑修改当前打开的表文件记录 。
【 说明 】 [FIELDS <字段名表 >]:若选择此选项,则只列出字段 名表中 的字 段,且 显示顺 序同字 段名表中的顺 序;若 未选 择此选 项,将 显示表 中的所有字段,显示顺序同表中的字段顺序 。
[<范围 >]:若未选择此选项,则 EDIT/CHANGE命令的范围为全部记录 。
[FOR <逻辑表达式 1>]和 [WHILE <逻辑表达式 2>]:
同前面其他命令所述,在此不再重复叙述 。
目录上页下页退出
44
【 例 4-8】 修改 STUD.DBF中计 0121班学生的学号,
姓名和性别等信息 。
USE STUD
EDIT FIELDS 学号,姓名,性别 FOR 班级名
=” 计 0121”
全部修改完毕,使用 Ctrl+End 或 Ctrl+W 键保存所有修改的结果。
目录上页下页退出
45
2),浏览修改
( 1) 命令方式
【 格式 】 BROWSE [FIELDS <字段名表 >] [FOR <逻辑表达式 1>]
【 功能 】 显示当前表的记录内容,以供编辑修改 。
【 说明 】 编辑结束后,按 Ctrl+W或 Ctrl+End存盘退出
BROWSE 编辑窗口,或者按 Ctrl+Q 或 Esc 键放弃存盘退出 BROWSE窗口 。
( 2) 菜单方式利用菜单方式进行浏览修改的操作步骤如下:
① 打开表 。
② 选择 【 显示 】 |【 浏览 】 命令,系统弹出记录浏览窗口 。
③ 在编辑修改窗口中编辑修改数据内容,完成后按
Ctrl+W键存盘退出 Browse窗口 。
目录上页下页退出
46
3),替换修改
( 1) 命令方式
【 格式 】 REPLACE <字段名 1> WITH <表达式 1>
[ ADDITIVE][,< 字 段 名 2 > WITH < 表达式 2 >
[ADDITIVE]],.,[<范围 >][ FOR <逻辑表达式 1>]
[WHILE <逻辑表达式 2>] [NOOPTIMIZE]
【 功能 】 用指定表达式的值替换当前表中满足条件记录的指定字段的值 。
【 说明 】
该命令适合对当前库进行成批地,有规律地修改 。
缺省范围,条件时,仅替换当前记录 。
该命令回车后,数据修改自动完成。适用于程序设计。
ADDITIVE,只对备注型字段修改有效。
选择:表示添加内容,不选择:表示替换内容。
表达式的类型必须与字段类型一致 。
表达式的值不能超出字段宽度,否则,数据无效。
目录上页下页退出
47
【 例 4-9】 修改 STUD.DBF中的,学号,字段数据,。
USE STUD
REPLACE 学号 WITH,20”+学号 ALL
( 2) 菜单方式
① 打开表文件 。 选择 【 显示 】 |【 浏览 】 命令 。
② 选择 【 表 】 |【 替换字段 】 命令,弹出图 3-4
所示的,替换字段,对话框 。
③ 单击字段下拉按钮选择要进行替换操作的字段名,在,替换为,显示栏中输入替换表达式,
再选择,替换条件,显示框中的范围,条件 。
④ 单击,替换,按钮,系统将自动完成替换操作 。
目录上页下页退出
48
表 3-4 替换字段对话框目录上页下页退出
49
七、记录指针的定位记录号用于标识数据记录在表文件中的物理顺序 。
记录指针是一个指示器,它始终指向当前表中正在操作处理的那条记录,此记录被称为当前记录 。 如果要对某条记录进行处理,
必须移动记录指针,使其指向该记录 。 在任意时刻指针只能指向唯一的一条记录 。
记录指针定位有绝对定位,相对定位和查询定位三种 。 在这里暂时只讲前二种,查询定位在讲到查询时再详细介绍 。
目录上页下页退出
50
1,绝对定位
【 格式 】 [GO | GOTO] <[RECORD] <数值表达式 1> [IN
<数值表达式 2> | IN <字符表达式 >]
【 功能 】 将记录指针绝对定位到 <数值表达式 1>指定的记录上 。
<数值表达式 1>:记录的物理记录号 。
IN <数值表达式 2> | IN <字符表达式 >:指定操作表所在的工作区;若缺省,则对当前工作区表操作 。 工作区的概念在后面再详细介绍 。
绝对定位与是否打开索引文件没有关系。
目录上页下页退出
51
2,相对定位
【 格式 1】 SKIP [<数值表达式 1>] [IN <数值表达式 2> | <字符表达式 >]
【 功能 】 记录指针从当前记录向前 ( 或向后 ) 移动若干个记录 。
【 说明 】 <数值表达式 1>:表示移动的记录个数 。 若数值表达式的值为负值,表示向前移动记录;否则,表示向后移动记录 。 如果缺省此项,则表示向后移动 1个记录 。
如果记录指针已经移过文件的最后一个记录,则
RECNO( )函数返回的值等于文件中的记录总数加 1,
EOF( )函数返回逻辑真 (,T.) 值 。
【 格式 2】 GO|GOTO <|TOP | BOTTOM>
【 功能 】 将记录指针移动到表文件的首记录或尾记录 。
TOP,将记录指针移动到表文件的首记录 。
BOTTOM,将记录指针动到表文件的最后一条记录 。
目录上页下页退出
52
相对定位与是否打开索引文件有关。如果打开了索引文件,记录指针按索引文件中顺序移动。
否则按表文件中物理顺序移动。
【 例 4-10】 绝对定位命令的用法 。
USE STUD
GOTO 2
GO 3
【 例 4-11】 相对定位的用法 。
USE STUD
SKIP 4 && 系统主窗口显示为 5
SKIP –3 && 系统主窗口显示为 2
SKIP 8 && 超出了记录总数 6
go top && 系统主窗口显示为 1
目录上页下页退出
53
表记录的删除也是表维护的一项经常性的工作,因为删除意味着数据的消失,所以对记录的删除操作比较慎重,删除可分为逻辑删除和物理删除两种操作 。 逻辑删除还可以恢复,而物理删除则不可恢复 。
1,逻辑删除记录逻辑删除就是给指定的记录作删除标记,*,。
( 1) 命令方式
【 格式 】 DELETE [<范围 >] [FOR <条件 >] [WHILE <条件 >]
【 功能 】 对 当前表中指定范围内满足条件的记录作删除标记,*”。
【说明】 DELETE命令仅仅是在要删除的记录前加上一个删除标记,*”,并不是真正地从表文件中将该记录删除掉。可以用 LIST或 DISP命令显示带删除标记的记录。
八、表记录的删除目录上页下页退出
54
<范围 >,FOR<条件 >,WHILE<条件 >等各项选项意义同前;如果同时缺省 <范围 >和 <条件 >子句,则仅仅删除当前的记录 。
【 例 4-12】 删除 STUD.DBF中所有男同学的记录 。
USE STUD
DELETE FOR 性别 ="男 "
LIST FIELDS 学号,姓名,性别,班级名,系别 ;
代号,地址,出生日期,是否团员
( 2) 菜单方式利用菜单方式逻辑删除记录的具体操作步骤如下:
① 首先打开表文件
② 选择 【 显示 】 |【 浏览 】 命令,系统弹出记录浏览窗口,显示当前表中的记录 。 主菜单上增加 【 表 】
菜单项 。
目录上页下页退出
55
③ 选择 【 表 】 |【 删除记录 】 命令,出现图 3-5所示的,删除,对话框 。
④ 单击删除对话框中的 For… 按钮或 While… 按钮,
系统弹出表达式生成器,用户可以在表达式框中输入一个逻辑表达式,如性别 =” 男,,单击
【 确定 】 按钮完成条件表达式的输入 。
⑤ 在,作用范围,下拉列表框中选择范围,如 ALL。
⑥ 单击,删除”对话框中的“删除”按钮,系统将完成对指定范例内满足指定条件的记录的逻辑删除。
2,隐藏逻辑删除记录
【 格式 】 SET DELETED ON | OFF
【 功能】 将表文件中已逻辑删除的记录隐藏,仿佛真正删除一样。
目录上页下页退出
56
图 3-5 记录删除对话框目录上页下页退出
57
【 说明 】 表文件中被逻辑删除的记录只是在该记录上加一个删除标记,当 SET DELETED设置为 OFF时,对该表文件的各种操作,对被删除的记录同样有效 。 当
SET DELETED ON时,可使对表文件中数据的各种操作,一般均不包括有删除标记的记录,但下列情况例外:命令的记录范围是当前记录或 RECORD(n) 时;
INDEX或 REINDEX命令不受 SET DELETED的影响,
始终处理带删除标记的记录 。
SET DELETED的缺省状态是 OFF。
【 例 4-13】 隐藏上题中 STUD.DBF的标记删除记录 。
USE STUD
SET DELETED ON
3,恢复逻辑删除记录恢复逻辑删除是将被逻辑删除的记录恢复为正常记录 。 即去掉,*” 号 。
目录上页下页退出
58
( 1) 命令方式
【 格式 】 RECALL [<范围 >] [FOR <条件 >]
[WHILE <条件 >][NOOPTIMIZE]
【 功能 】 将当前表文件中指定范围内满足条件的已作删除标记,*” 的记录恢复,即去掉这些删除记录的删除标记,使之成为正常记录 。
【 说明 】 RECALL命令与 DELETE命令相对应,它可以去掉被逻辑删除记录的删除标记,*” 。
<范围 >,FOR<条件 >,WHILE<条件 >等各项选项意义同前;如果同时缺省 <范围 >和 <条件 >子句,
则仅仅恢复当前记录 。
【 例 4-14】 恢复 STUD.DBF中删除的所有记录 。
USE STUD
RECALL ALL
( 2) 菜单方式
① 首先打开表文件目录上页下页退出
59
② 选择 【 显示 】 |【 浏览 】 命令 。
③ 选择 【 表 】 |【 恢复记录 】 命令,出现类似图 3-5所示对话框 。 余下操作与,删除,对话框的操作相同 。
4,物理删除记录物理删除是将当前表文件中被逻辑删除的记录全部清除 。
( 1) 命令方式
【 格式 】 PACK [MEMO][DBF]
【 功能 】 将当前表文件中所有带删除标记 ( *) 的记录全部真正地删除掉 。
【 说明 】 若选用 MEMO选项,PACK MEMO将压缩与表文 件 同 名 的 备 注 文 件 中 的 无 用 空 间,但 并 不 删除表文件中作了删除标记的记录 。
若选用 DBF选项,而不用 MEMO选项,则只删除表文件中作了删除标记的记录,而不压缩相应的备注文件 。
目录上页下页退出
60
若不带任何选项,PACK命令将删除数据库文件中作了删除标记的记录,同时压缩相应的备注文件 。
注意,执行该命令后被删除的记录将不能被恢复,因此使用时应特别小心 。
【 例 4-15】 将 STUD.DBF中的学号为,021405” 的记录进行物理删除 。
USE STUD
DELETE FOR 学号 =” 021405”
PACK
( 2) 菜单方式利用菜单方式物理删除表记录的具体步骤如下:
① 首先打开表文件
② 选择 【 显示 】 |【 浏览 】 命令,系统弹出记录浏览 窗口,显示当前表中的记录 。 主菜单上增加 【 表 】 菜单 。
③ 选择 【 表 】 |【 彻底删除 】 命令,出现,确 认,对话框 。
目录上页下页退出
61
④ 单击,是,按钮,完成物理删除过程 。
注意,用户也可以在 EDIT,CHANGE,BROWSE窗口中,
按 Ctrl+T键对当前记录作(或取消)删除标记,也可以用鼠标单击记录最左边的删除标记栏作删除(或取消)标记。
5,删除全部记录
【 格式 】 ZAP
【 功能 】 将当前打开的表文件中的所有记录完全删除掉 。
【 说明 】 执行该命令之后,将只保留表文件的结构,而不再有任 何数据 存在 。 这种 删除无 法恢复,因此,为防 止用户 发生 错误操 作而删 除有用 的表文件记录,执行 该命 令时,系统会 弹出提 示窗口,以确认是否删除全部记录,单击,是,按钮清除所有记录,单击,否,按钮放弃 ZAP操作 。
目录上页下页退出
62
1,表结构的复制
【 格式 】 COPY STRUCTURE TO <文件名 > [FIELDS
<字段名表 >][[WITH] CDX | [WITH] PRODUCTION]
【 功能 】 复制当前表文件的结构作为新表文件的结构 。
【 说明 】 命令执行前,需复制的表文件必须是打开的 。
执行后,生成的新表文件只有结构 。
<字段名表 >,确定新表结构的字段名,<字段名表 >中的字段必须是原表文件中具有的字段名 。 若省略该选项,则原样复制当前表文件的结构 。
【 例 4-16】 用复制命令将 STUD.DBF中的学号,姓名,
性别,出生日期等四个字段,构成一个新表结构 。
九、表的复制目录上页下页退出
63
USE STUD
COPY STRUCTURE TO STUD1 FIELDS 学号,姓名,
性别,出生日期
2,表文件的复制
【 格式 】 COPY TO <文件名 >[FIELDS <字段名表 >][<范围 >] [FOR <逻辑表达式 1>][WHILE <逻辑表达式 2>][[WITH]CDX] | [[WITH] PRODUCTION]
【 功能 】 将当前打开的表文件全部或部分复制到一个新生成的表文件中 。
【 说明 】 新生成表文件中的字段顺序由 FIELDS选择项 <
字段名表 > 确定,缺 省表 示 新表 的 结构 与 原 表的结构完全相同,新表文件中的记录由 <范围 >
选择项以及 < 条件 > 选择 项确定 。 同时缺 省 < 范围 >,< 条件 > 表示将原 表的全部记录都 复制到新表中 。 若 <范围 >,<条件 >和 <字段名表 >都缺省,则表示将原表进行备份 。
目录上页下页退出
64
<文件名 > 指定新生成的表文件。若当前原表文件中有备注型字段,则相应的备注文件(,FPT文件)将同时被复制。新表文件名不能与被复制的原表文件同名,省略盘符和路径表示在当前盘当前目录下生成新表文件。
【 例 4 - 17】 复制 STUD.DBF 中 所有 女同学 的记 录到
STUD2.DBF中 。
USE STUD
COPY TO STUD2 FOR 性别 =“女”
3,表记录保存为文本文件
【 格式 】 COPY TO <文件名 >[FIELDS <字段名表 >][<范围 >] [FOR <逻辑表达式 1>][WHILE <逻 辑 表达式 2 > ] < TYPE SDF | DELIMITED [WITH <
定界符 >|WITH BLANK | WITH TAB]>
【 功能】 将当前表的记录全部或部分保存到一个文本文件中。
目录上页下页退出
65
【 说明 】 FIELDS<字段名表 >,确定文本文件中的字段顺序,缺省表示将表中记录的全部字段值保存到文本文件中,。
<范围 >以及 <条件 >选择项:确定哪些记录的字段值保存到文本文件中 。 同时缺省 <范围 >,<条件 >表示将原表的全部记录的字段值都保存到文本文件中 。
[TYPE],当用户生成的新文件不是 DBF格式文件时,
可以用 TYPE选项指定新文件的格式,系统会自动产生不同格式的新文件,并为新文件加上相应的扩展名 。
TYPE文件类型包括下列几种:
● SDF,复制为 SDF( System Data Format) 格式的
ASCII文本文件,默认扩展名为,TXT。
● DELIMITED [WITH <定界符 > WITH BLANK | WITH
TAB],复制为带分隔符的 ASCII文本文件,默认扩展名为,TXT。
目录上页下页退出
66
SDF和 DELIMITED格式的区别:
SDF是将表文件的每一条记录复制到 SDF文本文件中,
在每一行中,字段与字段间没有分隔符,每一行以回车换行结束 。 字段在 SDF文件中的宽度是固定的,
等于源表中该字段的定义宽度 。 在 SDF文件中,表文件中的字符型字段和数值型字段原样存贮,即字符型左对齐存贮,不足部分在右边填以空格;数值型则以右对齐方式存贮,不足部分在左边填以空格 。
日期型数据以 YYYYMMDD格式存贮 。 逻辑型数据以 T或 F存贮 。 SDF文本文件不接受备注型字段和通用型字段 。
DELIMITED文件带定界符格式文本文件,也是将源表文件中的每一条记录作为一行存贮,每行以回车换行结尾 。 但记录的各字段间以分隔符隔开,各字段的宽度为字段值的实际宽度 。
目录上页下页退出
67
字段间的分隔符默认为,,,号,字符型字段的定界符为双引号 。 用户可以用 WITH <定界符 >WITH BLANK
| WITH TAB指定分隔符,WITH <定界符 >表示用指定的
<定界符 >为字符型字段的定界符; WITH BLANK |
WITH TAB则指定空格或 Tab键作为字段间的分隔符 。 若使用 WITH BLANK,则字符型字段不再有定界符 。
注意:该命令和表文件的复制命令实际上是同一个命令,
是复制为表文件还是文本文件,看是否带 TYPE子句 。
【 例 4 - 18】 复制 STUD.DBF 中 的 记 录 内 容 复 制 到
SSTUD.TXT(SDF格式 ),DSTUD.TXT(DELIMITED格式 )
和 ESTUD.TXT(以空格为分隔符的 DELIMITED格式 )中 。
USE STUD
COPY TO SSTUD SDF
COPY TO DSTUD DELIMITED
COPY TO ESTUD DELIMITED WITH BLANK
目录上页下页退出
68
十,表记录的追加维护数据库的一项经常性的操作就是根据需要随时向表文件中添加记录,添加记录包括追加记录,插入记录和利用其他文件追加 。 追加记录在前面已经介绍,在这里就介绍后面两种方法 。
1,从另一个表文件中追加记录
【 格式 】 APPEND FROM<文件名 |?>[FIELDS<字段名表
>][FOR<逻辑表达式 >]
【 功能 】 从指定的表文件中读入数据,并添加到当前表文件的末尾 。
【 说明 】 数据的追加是从命令中指定的表文件追加到当前表文件中,所以,应 先 将 需 要 追 加 记 录 的 表文件打开,设 置 为 当 前 表,然 后 再 使 用 该 命 令进行追加 。
目录上页下页退出
69
追加原则是同名原则,即将数据来源表中的字段与当前表的字段进行比较,同名则将符合条件的记录的值追加过来 。 若数据来源表中缺少某些字段,则当前表中该字段值为空 。
追加数据记录时,若两个表文件同名字段的宽度不相同,一般情况下,若当前表的字段宽度大于数据来源表的字段宽度,记录能正常追加,对字符型数据后面加空格,对数值型数据前面加
,0”,但若当前表的字段宽度小于数据来源表的字段宽度,记录不能正常追加,数据失去原来的意义 。 对字符型数据截去后面多余字符,对数值型数据进行小数部分的四舍五入,仍不够根据当前表的宽度用,*” 号填充,表示溢出 。
目录上页下页退出
70
2,从另一个文本文件中追加记录
( 1) 命令方式
【 格式 】 APPEND FROM <文件名 |?> [FIELDS <字段 名 表 > ] [ FOR < 逻 辑 表 达 式 >] [[TYPE]
SDF|[DELIMITED [WITH TAB | WITH < 定界符 > | WITH BLANK]]
【 功能 】 从指定类型的文本文件中读入数据,并添加到当前表文件的末尾 。
【 说明 】 <文件名 >是指获取数据的文本文件名 。 文本文 件 中 的 每 一 行,追 加 为 一 条 记 录 。 可以在文 本 文 件 中 输 入 文 本,但 要 保 证 文 本 格 式 相同,再利用此命令追加为记录 。
注意,数据文件若由 COPY TO 命令生成的且定义了文本文件的分隔符,则追加记录时也应用相同的分隔符 。
因为系统以每个分隔符作为字段值的分隔符 。 这样才能保证数据能正确还原 。
目录上页下页退出
71
( 2) 菜单方式
① 打开表文件 。
② 选择 【 显示 】 |【 浏览 】 命令 。
③ 选择 【 表 】 |【 追加记录 】 命令,弹出图 3-6所示的
,追加来源,对话框 。
④ 单击类型下拉按钮选择用来追加记录的数据文件的类型,在,来源于,显示栏中输入数据来源文件的路径和文件名,再选择,选项,显示框中的字段,条件 。
确定后返回追加来源窗口 。
⑤ 单击,确定,按钮,系统将满足条件的记录完成追加操作 。
3,插入记录
【 格式 】 INSERT [BEFORE] [BLANK]
【 功能 】 在当前表文件的指定位置插入新记录或空记录 。
目录上页下页退出
72
图 3-6 追加来源对话框目录上页下页退出
73
【 说明 】 INSERT是在当前记录之后插入新记录,
INSERT BEFORE是在当前记录之前插入新记录,
INSERT BLANK是在当前记录之后插入空记录 。
若表文件建立了索引,则插入的新记录按索引值进行排列 。
【 例 4-19】 在表 STUD.DBF的第 2号记录前插入一条新记录,在第 4号记录后插入一条新记录 。
USE STUD
GOTO 2
INSERT BEFORE
&& 在 2号记录前插入一条新记录
GOTO 5
&& 因已插入了一条新记录,原 4号现为 5号
INSERT
&& 在 4号记录后插入一条新记录目录上页下页退出
74
十一,文件管理命令
Visual FoxPro除了表文件之外,还有其他多种类型的文件,系统对各类文件提供了通用的管理手段,其功能类似于
DOS的文件管理命令,但必须注意它们之间的区别 。
1,显示文件目录
【 格式 】 DIR | DIRECTORY [ON <盘符 >][[LIKE] [<路径 >] [<
通配符 >]][TO PRINTER [PROMPT] | TO FILE <文件名 >]
或 LIST | DISPLAY FILES [ON <盘符 >] [LIKE <通配符 >]
[TO PRINTER [PROMPT] | TO FILE <文件名 >]
【 功能 】 显示磁盘文件目录信息 。
【说明】 该命令类似于 DOS操作系统的 DIR命令。
ON<盘符 >:指定所显示文件目录所在的驱动器符号,缺省此项为当前盘 。
[LIKE] [<路径 >] [<通配符 >],<路径 >指定显示文件所在路径;
目录上页下页退出
75
2,文件改名
【 格式 】 RENAME <文件名 1> TO <文件名 2>
【 功能 】 将 <文件名 1>改为 <文件名 2>。
【 说明 】 该命令类似于 DOS操作系统的 REN命令 。
改名之前文件必须关闭,正在使用的文件不能改名 。
如果有备注文件,对表文件改名时,不要忘记为相应的,FPT文件改名,否则打不开改名后的表 。
【 例 4-20】 将 STUD.DBF改为 GL.DBF。
USE
RENAME STUD.DBF TO GL.DBF
RENAME STUD.FPT TO GL.FPT
目录上页下页退出
76
3,文件删除
【 格式 】 ERASE [<文件名 > |?]
或 DELETE FILE [<文件名 > |?]
【 功能 】 从磁盘上删除指定的文件 。
【 说明 】 此命令类似于 DOS操作系统的 DEL命令 。
如果选择参数?或缺省文件名选项,系统将弹出 Open
对话框,供用户选择所需删除的文件 。
为防止误操作,该命令不默认扩展名,所以 <文件名 >
必须用全称,<文件名 >不能使用通配符,如果 <文件名 >不在目录下,则需指定路径 。 同时,此命令也不能删除已打开的文件 。
【 例 4-21】 删除当前目录下的,BAK文件 。
ERASE ABC.BAK
ERASE STUD.BAK
DELETE FILE XSCJ.BAK
DIR *.BAK
目录上页下页退出
77
4,文件复制
【 格式 】 COPY FILE <文件名 1> TO <文件名 2>
【 功能 】 对各类文件进行复制
【 说明 】 此命令类似于 DOS操作系统的 COPY命令 。
<文件名 1>和 <文件名 2>必须给出全名,不能使用通配符;不能复制已打开的文件;当复制含有备注型字段或已建立索引的表文件时,必须复制相应的备注文件和索引文件 。
【 例 4-22】 将 STUD.DBF改名为 STUDBAK.DBF复制到 A:
盘上 。
COPY FILE STUD.DBF TO A,STUDBAK.DBF
COPY FILE STUD.FPT TO A,STUDBAK.FPT
&& 复制,FPT备注文件目录上页下页退出
78
5.显示文本文件
【 格式 】 TYPE <文件名 1> [AUTO] [WRAP] [TO PRINTER
[PROMPT] | TO FILE <文件名 2>][NUMBER]
【 功能 】 显示或同时打印文本文件
【 说明 】 此命令类似于 DOS操作系统的 TYPE命令 。
文本文件是指非结构式文件,即没有任何内部控制符的
ASCII码文件 。 例如命令文件,PRG,屏幕格式文件,FMT和文本文件,TXT。
<文件名 1>和 <文件名 2>:必须带扩展名,不能使用通配符,
且不能是打开的文件 。
6,调用外部命令如果觉得 Visual FoxPro的文件管理命令不方便,可以调用
DOS的有关命令 。
【 格式 】 RUN | ! [/N [K]] <MS-DOS 命令 | 程序名 >
【 功能 】 执行 MSDOS的系统命令 。
【说明】 此命令直接完成外部程序的功能。使用本命令必须有足够的内存空间,否则会产生“内存不足”的错误。
目录上页下页退出
79
为了高效方便地存取数据,往往要求表记录以某一定的顺序排放或显示,因此,Visual FoxPro提供了两种方法重新组织数据,即排序和索引 。
排序是从物理上对表进行重新整理,按照指定的关键字段来重新排列表中数据记录的顺序,并产生一个新的表文件 。 由于新表的产生即费时间也浪费空间,实际中很少用 。
索引是从逻辑上对表进行重新整理,按照指定的关键字段的建立索引文件。一个表文件可以建立多个索引文件,但对于打开的表文件,任何时侯只有一个索引文件起作用,此索引文件称为主控索引。
第三节 表的排序与索引目录上页下页退出
80
一,表的排序
【 格式 】 SORT TO <新文件名 > ON <字段 1> [/A | /D] [/C]
[,<字段 2>[/A | /D] [/C]...]
[ASCENDING | DESCENDING] [<范围 >]
[FOR<逻辑表达式 1>][WHILE <逻辑表达式 2>]
[FIELDS <字段名表 >]
【 功能 】 对当前打开的表,按指定的字段进行排序,生成新的表文件 。
【说明】 生成的排序文件也是一个数据库文件。
范围、条件的含义同 COPY TO命令。
用作排序的字段的数据类型允许是 N,C,D,L
型。 /A 表示升序 /D 表示降序 /C 表示不区分大小写。
目录上页下页退出
81
当有多个关键字段时,先按字段 1的值排列,其值相同的,再按字段 2的值排列。
原库中的记录发生变化,排序文件不能自动完成同步修改。 该命令执行后,当前表不变,产生的新表不会自动打开。
该排序方法占空间、废时间,很少用。
【 例 4-23】 将 STUD.DBF按性别进行降序排列
USE STUD
SORT TO STUD2 ON 性别 /D
目录上页下页退出
82
二,索引的基本概念
1,索引及索引文件的概述索引是以索引文件的形式存在的,它根据指定的索引关键字表达式建立的 。 索引文件可以看成索引关键字的值与记录号之间的对照表,关键字可以是一个字段,
也可以是几个字段的组合 。 在建立索引文件时,把表所有记录的索引关键字表达式的值按指定顺序排序,并把每个索引关键字表达式值与该值在表中所对应的记录对应起来,保存在索引文件中 。
索引文件必须与原表一起使用,查询时根据索引关键字表达式的值先在索引文件中找到某字段所在的记录号,然后再到表里直接定位 。 这样的查找方式使顺序查找和随机查找都有较高的效率 。 打开索引文件时,将改变表中记录的逻辑顺序,但并不改变表中记录的物理顺序 。
目录上页下页退出
83
一个表文件可建立多个索引文件,也可同时打开多个索引文件,但在同一时间内只有一个索引起作用,
这个索引称为主控索引 。
Visual FoxPro系统中支持两种不同的索引文件类型,即单索引文件和复合索引文件 。
单索引文件是根据一个索引关键字表达式 ( 或关键字 ) 建立的索引文件,文件扩展名为,IDX,它可用
INDEX命令的各种形式建立 。 单索引文件分为标准和压缩两种类型 。
复合索引文件是指索引文件中可以包含多个索引标识的扩展名为,CDX。 每个索引标识与单索引文件类似,也可以根据一个索引关键字表达式 ( 或关健字 )
建立 。 每一个索引标识均有一个特殊的标识名
( TAG) 。 标识名由字母或下划线开头,由字母,数字或下划线组成,长度不超过 10个字符 。 用户可以利用标识名来使用标识,向复合索引文件中追加标识 。
复合文件中标识的数目,仅受内存和磁盘空间的限制 。
目录上页下页退出
84
复合索引文件又有两种:一种是独立复合索引文件;
另一种是结构复合索引文件。
结构复合索引文件是由 Visual FoxPro自动命名的,与相应的表文件同名,扩展名为,CDX。 当 Visual FoxPro打开一个表时,便自动查找一个结构复合索引文件,如果找到便自动打开,该索引文件随表文件同时打开和同时关闭 。
独立复合索引文件不与表文件同名,扩展名为,CDX。
在打开表时不会自动打开此索引文件,由命令指定打开 。
索引可分为下列四种类型:
2.主索引主索引是一个永远不允许在指定字段和表达式中出现重复值的索引 。 它也是在数据库表的永久关联中创建参照完整性时主表和被引用表使用的索引 。 每一个表只能建立一个主索引,只有数据库表才能建立主索引 。
目录上页下页退出
85
3,侯选索引侯选索引也是一个不允许在指定字段和表达式中出现重复值的索引 。 数据库表和自由表都可以建立侯选索引,一个表可以建立多个侯选索引 。
主索引和侯选索引都存储在,CDX结构复合索引文件中,不能存储在独立复合索引文件和单索引文件中,
因为主索引和侯选索引都必须与表文件同时打开和同时关闭 。
4,唯一索引系统只在索引文件中保留第一次出现的索引关键字值 。 数据库表和自由表都可以建立唯一索引
5,普通索引是一个最简单的索引,允许关键字值的重复出现,
适合用来进行表中记录的排序和查询,也适合于一对多永久关联中,多,的一边 ( 子表 ) 的索引 。 数据库表和自由表都可以建立普通索引 。
目录上页下页退出
86
三,索引文件的建立
1,命令方式
【 格式 】 INDEX ON <索引关键字表达式 >TO<单索引文件 >|
TAG <标识名 >
[OF <独立复合索引文件名 >] [FOR <逻辑表达式 >]
[ COMPACT][ASCENDING | DESCENDING][UNIQUE]
[ADDITIVE]
【 功能 】 对当前表文件按指定的关键字建立索引文件 。
【 说明 】 <索引关键字表达式 >:指定建立索引文件的关键字表达式,可以是单一字段名,也可以是多个字段组成的字符型表达式,表达式中各字段的类型只能是数值型,字符型和日期型和逻辑型 。
当表达式是单个字段名时,字段类型不用转换;应转换成同一类型的表达式 。
目录上页下页退出
87
TAG <标识名 >:此选项只对建立复合索引文件时有效,
指定建立或追加索引标识的标识名 。
OF <独立复合索引文件 >:指定独立复合索引文件名 。
若有此选项,表示在指定的独立复合索引文件中追加一个索引标识,若指定的独立复合索引文件不存在,
系统将自动建立指定的文件 。 若没有此选项,表示在结构复合文件中追加一个索引标识,若结构复合索引文件不存在,系统将自动建立结构复合索引文件 。
FOR <逻辑表达式 >:表示只对满足条件的记录建立索引 。
COMPACT,此选项只对单索引文件有效,表示建立压缩索引文件 。
ASCENDING|DESCENDING,ASCENDING表示按升序建立索引,DESCENDING表示按降序建立索引 。
缺省时,按升序建立索引 。 单索引文件不能选用
DESCENDING选项 。
目录上页下页退出
88
UNIQUE,表示建立的是唯一索引 。
ADDITIVE,表示保留以前打开的索引文件 。 否则,除结构复合索引文件外,以前打开的其他索引文件都将被关闭 。
新建的索引文件自动打开,并开始起作用 。
【 例 4-24】 对 STUD.DBF表文件建立出生日期单索引文件 STUD.IDX。
USE STUD
INDEX ON 出生日期 TO STUD
【 例 4-25】 对表文件 STUD.DBF,建立一个基于出生日期字段的结构复合索引文件 。
USE STUD
INDEX ON 出生日期 TAG 出生日期 DESCENDING
目录上页下页退出
89
【 例 4-26】 在表文件 STUD.DBF的结构复合索引文件中,按学号和姓名各追加一个标识 。
USE STUD
INDEX ON 学号 TAG 学号
【 例 4-27】 在表文件 STUD.DBF的结构复合索引文件中,先按性别再按学号追加一个标识 。
USE STUD
INDEX ON 性别 +学号 TAG 性别学号
【 例 4-28】 在表文件 STUD.DBF中,先按性别再按是 否 团 员 建 立 一 个 独 立 复 合 索 引 文 件
SXBTY.CDX。
USE STUD
INDEX ON 性别 +IIF(是否团员,’ 团员 ’,’
非团员 ’ ) TAG 性别团员 OF SXBTY
目录上页下页退出
90
2,菜单方式
① 打开表文件 。
② 选择 【 显示 】 |【 表设计器 】 命令,打开表设计器对话框,选择,索引,标签,如图 3-7所示 。
③ 在索引名中输入索引标识名,在类型的下拉列表框中确定一种索引类型,在表达式中输入索引关键字表达式,在筛选中输入确定参加索引的记录条件,
在排序序列下默认的是升序按钮,单击可改变为降序按钮 。
④ 确定好各项后,选择,确定,,关闭表设计器,同时索引建立完成 。
⑤ 同样的方法也可以将以前建立的索引调出,利用表设计器上的,插入,或,删除,按钮进行插入或删除 。
注意:用表设计器建立的索引都是结构复合索引文件 。
目录上页下页退出
91
图 3-7 在表设计器中建立索引目录上页下页退出
92
四,索引的使用
1,索引文件的打开
【 格式 1】 USE <文件名 > [INDEX <索引文件名表 |?
> ] [ ORDER <数值表达式 2 > | <单索引文件 >
| [ TAG] < 标 识 名 > [ OF < 复 合 索 引 文 件 名
>][ASCENDING | DESCENDING]]
【 功能 】 打开指定的表文件及相关的索引文件
【 说明 】 INDEX <索引文件名表 > |?:表示打开的索引文件;如果选择,?”,则系统将出现,打开,对话框,供用户选择索引文件名;如果 <索引文件名表 >中的第一个索引文件是单索引文件,则它是主索引文件,若第一个索引文件是复合索引文件,则表文件的记录将以物理顺序被访问 。
<索引文件名表 >:指定要打开的索引文件,索引文件中的文件扩展名可以省略,但如果存在同名的单索引文件和复合索引文件,必须带扩展名。
目录上页下页退出
93
<索引文件名表 >中的单索引文件和复合索引文件的标识有一个唯一的编号,编号最小值为 1,编号规则为:
先将单索引文件按它们在 <索引文件名表 >中的顺序编号,再将结构复合索引文件按标识产生的顺序连续编号,
最后将独立复合索引文件中的标识先按它在 <索引文件名表 >中的顺序,再按标识产生的顺序连续编号 。
[ORDER]子句:指定主索引 。 选择此选项时,主索引文件将不是 <索引文件名表 >中的第一个单索引文件,
而是此选项指定的单索引文件或标识 。 [ORDER]子句中各选项的含义如下:
● <数值表达式 2>指定主索引的编号,若 <数值表达式 2>
的值为 0,表示不设主索引 。
● <单索引文件 >指定的单索引文件设置为主索引 。
● [TAG] <标识名 > [OF <复合索引文件名 >]:表示将 <复合索引文件名 >中的指定标识作为主索引。 [OF <复合索引文件名 >]缺省表示为结构复合索引文件。
目录上页下页退出
94
● ASCENDING | DESCENDING,表示主索引被强制以升序或降序索引;缺省此选项,主索引按原有顺序打开 。
【 格式 2】 SET INDEX TO [<索引文件名表 > ] [ORDER
<数值表达式 > | <单索引文件名 > | [ TAG] <标识名 > [ OF < 复合 索引 文件 名 >] [ ASCENDING
| DESCENDING]][ADDITIVE]
【 功能 】 在已打开表文件的前提下,打开相关索引文件 。
【说明】 ADDITIVE,表示保留以前打开的索引文件。
否则,除结构复合索引文件外,以前打开的其他索引文件都将被关闭。
2,索引文件的关闭
【 格式 1】 USE
【 功能 】 关闭当前工作区中打开的表文件及所有索引文件 。
目录上页下页退出
95
【 格式 2】 SET INDEX TO
【 功能 】 关闭当前工作区中打开的所有单索引文件和独立复合索引文件 。
【 格式 3】 CLOSE INDEXS
【 功能 】 关闭当前工作区中打开的所有单索引文件和独立复合索引文件 。
注意:结构复合索引文件不能用以上命令关闭,它随表文件的打开而打开,随表文件的关闭而关闭 。
3,改变主索引
【 格式 】 SET ORDER TO [<数值表达式 1> | <单索引文件名 > | [TAG] <标识名 > [OF <复合索引文件名 >] [IN <数值表达式 2> | <字符表达式
>][ASCENDING | DESCENDING]]
【 功能 】 重新指定打开的索引文件中的主索引 。
【 说明 】 <数值表达式 1>的值为指定主索引的编号 。
目录上页下页退出
96
如果 <数值表达式 1>的值为 0或缺省,则恢复表文件的原始顺序,使所有打开的索引文件都无效 。
【 例 4-29】 打开 STUD.DBF表文件及其相关索引文件,
并指定结构复合索引文件中的姓名为主控索引 。
USE STUD INDE STUD.IDX ORDER TAG 姓名
【 例 4-30】 打开 STUD.DBF表及其相关索引文件,改变主索引文件 。
USE STUD INDEX STUD.IDX
SET ORDER TO 4
SET ORDER TO && 使所有索引均无效
4,索引文件的更新当表中的记录被修改时,系统会自动地更新所打开的索引文件,及时反映数据的变化 。 对于没有打开的索引文件,索引不能自动更新 。 为避免使用旧的索引文件导致错误,应该使用重新索引命令更新已经建立的索引文件 。
目录上页下页退出
97
( 1) 命令方式
【 格式 】 REINDEX [COMPACT]
【 功能 】 重新建立已索引过的索引文件 。
【 说明 】 COMPACT,表示将标准的单索引文件变为压缩的单索引文件 。
【 例 4-31】 将表 STUD.DBF的索引文件重新索引 。
USE STUD
SET INDEX TO STUD.IDX
REINDEX
( 2) 菜单方式
① 打开表文件 。
② 选择 【显示】 |【 浏览 】命令 。
③ 选择【表】 |【重新建立索引】命令,系统自动根据各索引表达式重新建立索引。
目录上页下页退出
98
5,索引的删除
( 1) 标识的删除
【 格式 】 DELETE TAG <标识名 1> [OF <复合索引文件名 1 > ] [,<标识名 2 > [ OF <复合索引文件名 2>]],..
或,DELETE TAG ALL [OF <复合索引文件名 >]
【 功能 】 从指定的复合文件中删除标识
【 说明 】 OF <复合索引文件名 >:指定复合索引文件名,若缺省,则为结构复合索引文件 。
( 2) 单索引文件的删除
【 格式 】 DELETE FILE <单索引文件名 >
【 功能 】 删除指定的单索引文件
【说明】 关闭的索引文件才能被删除,文件名必须带 扩展名。
目录上页下页退出
99
【 例 4-32】 删除表文件 STUD.DBF的单索引文件 STUD.IDX
及结构复合索引文件中的所有标识 。
DELETE FILE STUD.IDX
USE STUD
DELETE TAG ALL
6,索引文件的转换
( 1) 单索引文件复制到复合索引文件
【 格式 】 COPY INDEXES <单索引文件名表 > | ALL [TO
<复合索引文件名 >]
【 功能 】 将当前表文件已打开的所有单索引文件或 <单索引 文 件 名表 > 中所 列 的单 索 引文 件,复制 到 指 定的复合索引文件中 。
【 说明 】 TO <复合索引文件名 >:指定复合索引文件名,
缺省为结构复合索引文件 。
ALL,表示将所有的单索引文件复制到指定的复合索引文件中复制前必须打开指定的单索引文件 。
目录上页下页退出
100
在数据资源的管理过程中,使用最频繁的操作莫过于查询满足一定条件的一系列数据,从而为日常决策提供足够的判断依据 。 对表记录的查询系统提供了两类查询命令:顺序查询和索引查询 。
在前面介绍定位时,省略了条件定位,
查询操作实际上就是起到了条件定位的作用。
五、查询目录上页下页退出
101
1,顺序查询
1),命令方式
【 格式 】 LOCATE FOR< 逻辑表达式 1 > [ < 范围
>][WHILE <逻辑表达 2>]
【 功能 】 在表指定范围中查找满足条件的记录 。
【 说明 】 LOCATE 命令在表指定范围中查找满足条件的第一条记录 。
<逻辑表达式 1>:表示所需满足的条件 。
<范围 >:指定查找范围,缺省时为 ALL,即在整个表文件中查找。
找到第一条满足条件的记录后,记录指针指向该记录,并将函数 FOUND()( 用于检测是否找到满足条件的记录)置为,T.; 否则,记录指针指向 <范围 >的底部或文件结束标志,并且将函数 FOUND()置为,F.,并在状态栏给出提示信息“已到定位范围末尾”。
目录上页下页退出
102
如果没有打开索引文件,查找按记录号顺序进行 。 若打开了索引,查找按索引顺序进行 。
该命令的最大特点是可以在没有进行排序或索引的无序表中进行任意条件的查询,这是索引查询做不到的,但在大型表中查询速度和效率也是最低的 。
CONTINUE命令,LOCATE找到第一条满足条件的记录后,可以用 CONTINUE继续查找下一个满足条件的记录 。
CONTINUE命令必须在 LOCATE命令之后使用,否则出错 。
在 CONTINUE命令中实际隐含了前一个 LOCATE命令中的条件 。
【 例 4-33】 在 STUD.DBF中查找学号前四位为 0111的同学记录 。
目录上页下页退出
103
USE STUD
LOCATE FOR 学号 ="0111"
2),菜单方式
① 首先打开表文件
② 选择 【 显示 】 |【 浏览 】 命令 。
③ 选择 【 表 】 |【 转到记录 】 |【 定位 】 命令,出现如图 3-19所示的定位记录对话框 。
④ 在,作用范围,下拉列表框中选择查询范围,
在 FOR或 WHILE框中输入查询条件,选择定位按钮 。 系统将指针定位于符合条件的第一条记录上 。
2,索引查询 ( FIND,SEEK)
LOCATE命令用于按条件进行顺序定位,无论索引文件是否打开都可使用。在打开索引文件后,还可以用 FIND,SEEK命令进行快速检索。
目录上页下页退出
104
1),FIND命令
【 格式 】 FIND <字符串 >/<数值常量 >
【 功能 】 在表文件的主控索引中查找关键字值与 <字符串 >
或 <数值常量 >相匹配的第一个记录 。
【 说明 】 必须打开相应的库文件,主索引文件 。
查询字符串,字符串可以不用定界符括起来,但 前后有空格的,则必须要括进来。
查询常数,必须使用索引关键字的完整值。
允许查询字符型内存变量,但必须使用宏替换函数。
由于索引文件中关键字表达式值相同的记录总是排在一起的,可用 SKIP,DISP命令来逐个查询。
查询完满足条件的记录后,不能自然给出提示,常借助于 EOF() 函数来判断查询是否完成。
多关键字查询,建立索引时 STR函数若没有指定小数位,则应补齐不足 10位的空格。
目录上页下页退出
105
如果用 SET EXACT ON命令,则匹配必须是精确的 。 即 FIND命令中的查询内容必须与记录的关键字段值完全相等 。 如果用 SET EXACT OFF命令,则匹配可以是不精确的,即只要 FIND命令中的查询内容与记录的关键字段值的左侧相等即可 。
【 例 4-34】 打开表文件 STUD.DBF,查找姓,赵,的记录 。
USE STUD
SET ORDER TO 姓名
FIND 赵
2),SEEK命令
【 格式 】 SEEK <表达式 >
【 功能 】 在表文件的主索引中查找关键字值与 <表达式 >值相匹配的第一个记录 。
【 说明 】 SEEK命令可以查找字符型,数值型,日期型,逻辑型表达式的值 。
目录上页下页退出
106
SEEK命令中的表达式的类型必须与索引表达式的类型相同。可以查找字符、数值、日期和逻辑型字段的值。
内存变量可以直接进行查询,不用进行宏替换。
表达式为字符串时,必须用定界符括起来。日期常量也必须用大括号括起来。
表达式可以为一复杂的表达式,计算机先计算表达式的值,然后用其值进行查询。
由于索引文件中关键字表达式值相同的记录总是排在一起的,可用 SKIP,DISP命令来逐个查询。
如果用 SET EXACT ON命令,则匹配必须是精确的。
【 例 4-35】 用 SEEK命令在 STUD.DBF中查找记录 。
USE STUD
INDEX ON 是否团员 TAG 是否团员
SET ORDER TO 姓名
SEEK "孙 "
目录上页下页退出
107
1,统计记录数
【 格式 】 COUNT [<范围 >] [ FOR <逻辑表达式 1>]
[WHILE <逻辑表达式 2>] [TO <内存变量 >]
【 功能 】 用于统计当前表中指定范围内满足条件的记录个数 。
【 说明 】 除非指定了 <范围 >或 FOR/WHILE <条件 >,否则将计算所有记录个数,如选择了 TO <内存变量 >,则可将计算结果保存在 <内存变量 >中,否则统计结果只在屏幕上显示 。
若选择了 SET TALK OFF将不显示统计结果 。
若选择了 SET DELETE OFF,则加删除标志的记录将被计算 。
【 例 4-36】 统计 STUD.DBF中的男同学记录个数和表记录 总数 。
六、数据统计与计算目录上页下页退出
108
USE STUD
COUNT FOR 性别 ="男 " TO A
COUNT TO B
2.求和
【 格式 】 SUM [<表达式表 >] [<范围 >] [FOR <条件
>] [WHILE <条件 >] [TO <内 存 变 量 表 >
| TO ARRAY <数组 >] [NOOPTIMIZE]
【 功能 】 对指定范围内,满足条件的记录按指定的各个表达式分别求和 。
【 说明 】 缺省范围,条件表示全部记录 。
缺省数值型表达式表,表示对库中所有数值型字段求和。
数值型表达式表中表达式的个数应与内存变量的个数一致。
目录上页下页退出
109
【 例 4-37】 有一表文件 GZGL.DBF内容如下,
记录号 姓名 性别 车间 基本工资 岗位工资 奖金 工资总额
1 张小红 女 金工一 645 340 120 1105
2 李建军 男 金工一 690 370 130 1190
3 孙爱国 男 金工一 580 340 120 1040
4 吴晓英 女 金工一 540 360 110 1010
5 张 斌 男 金工二 670 400 140 1210
6 赵 娜 女 金工二 570 330 110 1010
7 赵明明 男 金工二 560 300 100 960
8 李 菲 女 机修 650 350 150 1150
9 苏汉胜 男 机修 600 340 100 1040
10 罗 丹 女 工具 600 350 130 1080
11 李会明 男 工具 670 350 120 1140
目录上页下页退出
110
对 GZGL.DBF中的基本工资,岗位工资,奖金和工资总额求和,并将结果存贮成数组 A中 。
USE GZGL
SUM TO ARRAY A
3,求平均值
【 格式 】 AVERAGE [<表达式表 >] [<范围 >] [FOR <
逻辑表达式 1>][WHILE <逻辑表达式 2>] [TO <内存变量表 >| TO ARRAY <数组 >][NOOPTIMIZE]
【 功能 】 对当前表文件中指定范围内满足条件的记录,
按指定的数值型字段计算平均值 。
【说明】 缺省范围、条件表示全部记录。
缺省数值型表达式表,表示对当前库中所有数值型字段求平均值。
数值型表达式表中表达式的个数应与内存变量的个数一致。
目录上页下页退出
111
【 例 4-38】 分别计算 GZGL.DBF中的男女各项收入的平均值 。
USE GZGL
AVER FOR 性别 =” 男,TO ARRAY B
AVER FOR 性别 =”女” TO ARRAY C
4.综合计算
【 格式 】 CALCULATE<表达式表 >[<范围 >][FOR<逻辑表达式 1>][WHILE<逻辑表达式 2>][TO<
内存变量表 >|TO ARRAY<数组 >]
【 功能 】 对当前表文件中指定范围内满足条件的记录进行指定的计算工作 。
【说明】 <表达式表 >可以是表 3-4中函数的任意组合。
【例 4-39】 计算 GZGL.DBF中的人数、奖金收入的平均值和最大值、工资总额的最大值、平均值。
目录上页下页退出
112
USE STUD
CALC CNT(),AVG(奖金 ),MAX(奖金 ),AVG(工资总 ;
额 ),MAX(工资总额 ) TO X1,X2,X3,X4,X5
5.分类汇总
【 格式 】 TOTAL TO <汇总文件名 > ON <关键字段 >
[FIELDS <字段名表 >] [<范围 >] [FOR <逻达 式
1>] [WHILE <逻辑表达式 2>] [NOOPTIMIZE]
【 功能 】 按关键字段对当前表文件的数值型字段进行分类汇总,形成一个新的表文件 。
【 说明 】 当前表必须在关键字上排序或索引,否则仅将关键字段值相同的紧挨的记录值汇总 。
汇总命令执行后,将生成一个新的数据库文件
(并没有被打开 )。
对非数值型字段,则把关键字相同的连续记录的第一条记录的字段内容送入新库。
目录上页下页退出
113
缺省待汇总字段名表,则将所有数值型字段的值进行汇总。 若数值型字段的汇总值超过了原数据库该字段的宽度,系统会自动修改汇总库中该字段的宽度。
汇总文件的结构与当前表的结构完全相同,汇总记录个数由 <关键字段 >的值确定 。
【例 4-40】对 GZGL.DBF按“车间”分类汇总。
USE GZGL
INDEX ON 车间 TAG 车间
TOTAL ON 车间 TO GZCJ
TOTAL TO GZCJ ON 车间
USE GZCJ
对 GZGL.DBF按,性别,分类汇总 。
USE GZGL
INDEX ON 性别 TAG 性别
TOTAL TO GZXB ON 性别
USE GZXB
目录上页下页退出
114
第四节 数据完整性数据完整性是为了保证数据库中数据的正确性和相容性,对数据库提出的某种约束条件或规则。数据完整性通常包括实体完整性、参照完整性和域完整性等。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件。
目录上页下页退出
115
一、实体完整性与主关键字实体完整性是保证表中记录唯一的特性 。
即在一个表中不允许出现重复的记录 。 在 VFP
中利用主关键字或候选关键字来保证表中的记录唯一 。 即保证实体唯一性 。
主关键字中的属性不能取空值,否则表明表中存在不可标识的实体。如果主关键字是多个属性的组合,则所有主属性都不能取空值。
目录上页下页退出
116
二、域完整性与约束规则域完整性又称用户定义完整性规则,是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束条件。
建立字段有效性规则比较简单的方法仍然是在表设计器中建立,如图 4-8所示 。
在字段有效性区域的规则栏输入一个逻辑表达式,如性别字段输入:性别 =,男,OR 性别 =,女,。
对该字段输入数据时,VFP将根据表达式对其进行检验,如不符合规则,则要修改数据,直到符合规则才允许光标离开该字段。信息栏中指定输入有误时的提示信息,如,性别只能是男或者女,,默认值栏用于指定当前字段的默认值。在增加新记录时,
默认值会在新记录中显示出来,当该字段为默认值时不用输入,以提高输入速度。
目录上页下页退出
117
图 4-8 表设计器中设计字段有效性目录上页下页退出
118
三、参照完整性与表之间的联系参照完整性是定义建立表之间联系的主关键字与外部关键字引用的约束条件。具体说,当插入、删除或修改一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。
1.建立表之间的永久联系为了设置表的参照完整性,必须先在表之间建立永久联系,表之间的永久联系是基于索引建立的一种永久关系,这种联系被作为数据库的一部分而保存在数据库中 。 可以在数据库设计器中建立表之间的永久联系,具体操作方法是:
在数据库设计器对话框,用鼠标左键选中父表中的主索引字段,保持按住鼠标左键并拖至其建立联系的子表中的对应索引字段;再松开鼠标左键,数据库的两个表间就有了一条联线,其永久关系就建立完成。
目录上页下页退出
119
例如:建立图书管理数据库中读者表、借书表、图书表以及作者表之间的永久联系。如图 4-9所示。
图 4-9 建立永久关系后的图书管理数据库目录上页下页退出
120
如果要修改编辑已建立的联系,可用鼠标右键单击要修改的连线,从弹出的快捷菜单中选择,编辑关系,命令,或直接用左键双击连线,将弹出
,编辑关系,对话框,如图 4-10所示。 在对话框中,
通过下拉列表重新选择表或相关的索引名则可以修改指定的关系。
图 4-10,编辑关系,对话框目录上页下页退出
121
说明,数据库表之间的永久联系和不同工作区打开的表之间的关联是两个不同概念 。 其主要区别是:
( 1),永久联系,被保存在数据库中,在每次使用时不需要重新建立,是数据库的一部分 。 而,关联,称为
,临时联系,,每次打开表时都需重建 。
( 2),永久联系,反映的是数据库表间的默认联接条件,
而,临时联系,反映的是不同工作区间中表的记录指针的联动关系 。
( 3)只有数据库表间才有,永久联系,,而,临时联系,
在自由表和数据库都可随时建立。
目录上页下页退出
122
2,设置参照完整性在设置参照完整性之前必须首先清理数据库。
所谓清理数据库是物理删除数据库各表中所有删除标记的记录。具体方法是:选择,数据库,菜单下的,清理数据库,。
清理完数据库后,用鼠标右键单击表之间的联系,从快捷菜单中选择,编辑参照完整性,,将打开,参照完整性,生成器如图 4-11所示。
图 4-11 参照完整性规则目录上页下页退出
123
参照完整性规则包括更新规则、删除规则和插入规则。
(1) 更新规则 规定了当更新父表中的连接字段时,如何处理相关子表中的相关记录。
① 级联:当更改父表中某一记录时,子表相应记录将随之改变。
② 限制:若子表中有相应记录,则禁止修改父表中的连接字段。
③ 忽略:不作参照完整检查,可以随意更改两表。
(2) 删除规则 规定了当删除父表中的记录时,如何处理子表中相关记录。
① 级联:当删除父表中某一记录时,则自动删除子表相应记录。
② 限制:若子表中有相应记录,则禁止删除父表中的记录。
③ 忽略:不作参照完整检查,即删除父表中的记录时与子表无关。
(3) 插入规则 规定了当插入子表中的记录时,是否进行参照性检查。
① 限制:若父表中没有相匹配的连接字段值则禁止子表插入记录。
② 忽略:不作参照完整检查,即子表可随意插入记录。
目录上页下页退出
124
第五节 自由表在 VFP中,每个表可以有两种存在状态:数据库表和自由表,使用何种表来处理数据取决于管理的数据之间是否存在某种关系以及关系的复杂程度。
所谓自由表就是不属于任何数据库的表。
一、数据库表与自由表
1.建立自由表的方法有以下几种:
1),在项目管理器中,从,数据,选项卡选择,自由表,,然后选择,新建,命令按钮打开表设计器 。
2),确认当前没有打开数据库,单击,文件,菜单下
,新 建,,从,新建,对话框中的,文件类型,
组框中选择,表,,然后单击,新建文件,钮打开表设计器建立自由表 。
3),确认当前没有打开数据库,使用命令打开表设计器建立自由表,CREATE [ 表名 |? ]
目录上页下页退出
125
2.数据库表与自由表相比具有的特点:
( 1) 数据库表可以使用长表名和长字段名 。
( 2) 可以为数据库表中的字段指定标题和注释 。
( 3) 可以为数据库表中的字段指定默认值和输入掩码 。
( 4) 数据库的字段有默认的控件类 。
( 5) 可以为数据库表规定字段级规则和记录级规则 。
( 6) 数据库表支持主关键字,参照完整性和表之间的永久联系 。
( 7)支持 INSERT,UPDATE和 DELETE事件的触发器 。
目录上页下页退出
126
二、将自由表添加到数据库
1.在项目管理器中,将要加入表的数据库展开至表,
并确认当前选择了,表,,如参见图 4-30。单击
,添加,按钮,然后从弹出的,打开,对话框中选择要加入数据库的自由表。
2.在数据库设计器中,可以从,数据库,菜单中选择
,添加表,,也可单击数据库设计器工具栏上的,
添加表,按钮,然后从,打开,对话框中选择要添加的表到当前数据库中。
3.运用 ADD TABLE命令添加一个自由表到当前数据库,
命令格式是:
ADD TABLE 表名 |? [NAME 长表名 ]
目录上页下页退出
127
注意:
一个表只能属于一个数据库,当一个自由表加入到某个数据库后就不再是自由表。因此也不能把属于另一个数据库的表添加到当前数据库。
目录上页下页退出
128
三、从数据库中移去表
1.在项目管理器中,将数据库下的表展开,并选择所要移出去的表,参见图 4-31(a),接着单击,移去,
按钮,弹出对话框,从中选择移去,。
如果选择,删除,则指不仅从数据库中移出该表,
且从磁盘上删除该表。
2.在数据库设计器中,先用鼠标单击选定要移出的表,
然后单击数据库设计器工具栏上的,移去表,按钮,
或者从,数据库,菜单项的下拉菜单中选择,移去,,
就可将该表移出数据库。使之成为自由表。
3.还可以使用命令方式把一个表从数据库中移出。其命令格式是:
REMOVE TABLE 表名 |? [DELETE][RECYCLE]
目录上页下页退出
129
注意:
( 1) 一旦某个表从数据库中移出,那么与之联系的主索引,默认值及有关的规则都随之消失,因此将一个表从数据库中移出将影响到当前数据库中与该表有联系的其他表 。
( 2)如果移出的表在数据库中使用了长表名,那么移出后长表名将不可再用。
目录上页下页退出
130
迄今所讲述的对表的操作都是在一个工作区进行的,每个工作区最多只能打开一个表文件,用 USE命令打开一个新的表,
同时也就关闭了前面已打开的表。在实际应用中,用户常常需要同时打开多个表文件,以便对多个表文件的数据进行操作。
为了解决这一问题,Visual FoxPro引入了工作区的概念。 Visual FoxPro允许用户在表间建立临时关系和永久关系。
第六节 多表的操作目录上页下页退出
131
一,工作区的概念
1,工作区和当前工作区
Visual FoxPro 能同时提供 32767个工作区 。
系统默认值为 1区 。
在任意时刻,只有一个工作区是当前工作区,
用户只能在当前工作区对打开的当前库进行操作。
每一个工作区都可以并且只能打开一个数据库文件。
同一个数据库文件不允许同时在多个工作区打开,但在其它工作区中被关闭之后,可以在任意一个工作区中被打开。
各工作区中打开的数据库彼此相互独立(指针不受影响)。
目录上页下页退出
132
2.选择当前工作区每一个工作区用工作区号或别名来标识
( 1)工作区号利用数字 1~32767来标识 32767个不同的工作区
( 2)别名前 10工作区用 A~J10个字母来标识。
采用该工作区中已打开的数据库的库名来作别名用户自己定义
【 命令格式 】 USE 〈 数据库名〉 [ALIAS〈 别名〉 ]
【 功能 】 打开数据库文件并为该数据库起一个别名。
【 说明 】 给数据库起了别名后,数据库名就不是默认的别名了。
目录上页下页退出
133
( 3) 工作区的选择当系统启动时,1号工作区是当前工作区,若想改变当前工作区,则可使用 SELECT命令来转换当前工作区 。
【 命令格式 】 SELECT<工作区号 >/<工作区别名 >
【 功能 】 选择一个工作区作为当前工作区 。
【 说明 】 <工作区号 > | <工作区别名 >:指定当前工作区 。 选择工作区时,可以直接指定区号,也可以通过别名指定工作区,二者是等效的 。
别名可以是系统规定的别名,也可以是用户规定的别名,甚至可以用已打开的表名替代工作区别名 。 此命令允许选用,0” 号工作区 。 如果指定,0”,则表示选用当前未使用过的编号最小的工作区作为当前工作区 。
执行该命令后,对任何工作区中的表及记录指针均不发生影响,仅实现各个工作区之间切换 。
目录上页下页退出
134
【 例 4-41】 在 1号和 2号工作区内分别打开 STUD.DBF
和 COURSE.DBF表文件,并选择 1号工作区为当前工作区 。
SELECT 1 && 或 SELECT A
USE STUD
SELECT 2
USE COURS
SELECT 1
3,非当前工作区字段的引用
Visual FoxPro系统对当前工作区上的表可以进行任何操作,也可以对其他工作区中的表文件的数据进行访问 。 在主工作区可通过以下两种格式访问其他工作区表中的数据 。
格式,<工作区别名 >-><字段名 >
<工作区别名 >,<字段名 >
目录上页下页退出
135
通过用工作区别名指定欲访问的工作区,所得到的字段值为指定工作区打开的表当前记录的字段值 。
【 例 4 - 42】 在 1号和 2 号工作区打开 STUD.DBF和
SC.DBF,在 1号工作区内查看当前记录的学号,姓名,性别,出生日期,课程号,成绩等字段内容 。
SELECT A
USE STUD && 在一号工作区中打开 STUD
SELECT B
USE SC && 在二号工作区中打开 SC
SELECT A && 选择 1号工作区为当前工作区
DISPLAY 学号,姓名,性别,出生日期,B->课程 ;
号,SC.成绩目录上页下页退出
136
1,关联的概述所谓表文件的关联是把当前工作区中打开的表与另一个工作区中打开的表进行逻辑连接,而不生成新的表 。 当前工作区的表和另一工作区中的打开表建立关联后,当前工作区是表的记录指针移动时,
被关联工作区的表记录指针也将自动相应移动,以实现对多个表的同时操作 。
在多个表中,必须有一个表为关联表,此表常称为父表,而其他的表则称为被关联表,常称为子表 。 在两个表之间建立关联,必须以某一个字段为标准,该字段称为关键字段 。 表文件的关联可分为一对一关联,一对多关联和多对多关联 。
三、表的关联目录上页下页退出
137
2,表文件关联的建立
( 1) 一对一关联的建立
1) 命令方式
【 格式 】 SET RELATION TO [<关键字段表达式 > | <数值表达式 >] [INTO<别名 > | <工作区号 >] [ADDITIVE]
【 功能 】 将当前工作区的表文件与 <别名 >( 或工作区号 )
指定的工作区中的表文件按 <关键字段表达式 >或 <数值表达式 >建立关联 。
【 说明 】 当用 <关键字段表达式 >建立关联时,关键字必须是两个表文件共有字段,且别名表文件已按关键字段建立了索引文件,并已指定关键字段为主索引 。
当父表文件的记录指针移动时,子表文件的记录指针根据主索引文件指向关键字段值与父表文件相同的记录 。 如果子表中没有与关键字段值相同的记录,记录指针指向文件尾,EOF()为,T.。
目录上页下页退出
138
当按 <数值表达式 >建立关联时,别名表不需要打开索引文件,两个表文件按照记录号相联系,
父表文件的记录指针移动时,子表文件的记录指针移至与数值表达式相等的记录上 。 若找不到此记录,记录指针指向文件尾,EOF()为,T.。
ADDITIVE,表示当前表与其他工作区表己有的关联仍有效,实现一个表和多个表之间的关联;
否则取消当前表与其他工作区表已有的关联,当前表只能与一个表建立关联 。
SET RELATION TO则表示取消当前工作区与其他工作区的关联 。
【 例 4-43】 将表文件 STUD.DBF和 SC.DBF以学号为关键字段建立关联 。
目录上页下页退出
139
SELECT 2 && 选择工作区 2
USE SC && 打开表文件 SCORE.DBF
INDEX ON 学号 TAG 学号 && 建立学号标识
SET ORDER TO TAG 学号 && 指定学号为主索引
SELECT 1 && 选择工作区 1
USE STUD && 打开表文件 STUD.DBF
SET RELATION TO 学号 INTO 2 && 建立一对一关联
【例 4-44】 将表文件 STUD.DBF和 SC.DBF按数值表达式建立关联。
SELECT 2 && 选择工作区 2
USE SC && 打开表文件 SC.DBF
SELECT 1 && 选择工作区 1
USE STUD && 打开表文件 STUR.DBF
SET RELATION TO RECNO() INTO 2
目录上页下页退出
140
2) 菜单方式
① 选择 【 窗口 】 |【 数据工作期 】,弹出数据工作期窗口 。
② 选择 【 打开 】,将需要用到的表在不同的工作区打开 。
③ 在别名列表中选择主表,再单击,关系,按钮,再在别名列表中选择子表 。
④ 如果子表文件未指定主索引,系统会打开如图 3-21所示的,设置索引顺序,对话框,以指定子表文件的主索引 。
⑤ 主索引建立后,系统弹出如图 3-22所示的,表达式生成器,( Expression Builder) 对话框,在字段列表框中选择关联关键字段,然后单击,确定,按钮,返回数据工作期窗口 。
⑥ 此时在数据工作期窗口的右侧列表框中出现了子表,
在父表和子表之间有一单线相连,说明在两表之间已建立了一对一关联,如图 3-23所示 。
目录上页下页退出
141
( 2) 一对多关联的建立
1) 命令方式
【 格式 】 SET SKIP TO [<别名 1>[,<别名 2>],..]
【 功能 】 将当前表文件与其他工作区中的表文件建立一对多关联 。
【 说明 】 先 要用 SET RELATION命令建立一对一的关联,
然后才能将一对一的关联进一步定义成一对多的关联 。
当前工作区表记录指针移动时,别名库文件的记录指针指向第一个与关键字表达式值相匹配的记录,若找不到相匹配的记录,则记录指针指向文件尾部,EOF()
为,T.。
当父表中的一个记录与子库的多个记录匹配时,在父表中使用 SKIP命令,并不使父表的指针移动,而子表的指针却向前移动,指向下一个与父表相匹配的记录;
重复使用 SKIP命令,直至在子表中没有与父表当前记录相匹配的记录后,父表的指针才真正向前发生移动 。
目录上页下页退出
142
无任何选择项的 SET SKIP TO命令将取消一对多的关联(一对一的关联仍然存在)。
2) 菜单方式
① 选择 【 窗口 】 |【 数据工作期 】,弹出的数据工作期窗口 。
② 按前面所述的步骤,建立一对一关联 。
③单 击【一对多】按钮,系统弹出创建一对多关系对话框。
④ 在 创建一对多关系对话框的子表别名列表框选择子表别名,单击,移动,按钮,子表别名将出现在选定别名列表框中,单击,确定,按钮,完成子表别名的指定,并返回到数据工作期窗口 。
⑤ 如果子表文件未指定主索引,系统显示,指定索引顺序,对话框,以便用户指定主索引 。
目录上页下页退出
143
⑥ 完成上述工作后,在数据工作期窗口的右侧列表框中出现了子表文件名,在父表和子表之间有一双线相连,
说明在两表之间已建立了一对多关联 。
( 3) 一个表对多个表关联的建立
1) 命令方式
【 格式 】 SET RELATION TO [<关联表达式 1> INTO <
别名 1> | <工作区 1>[,<关联表达式 2> INTO <别名 2>
| <工作区 2>,..][ADDITIVE]]
【 功能 】 将主工作区中的表与多个其他工作区中的表建立关联 。
【 说明 】 <关联表达式 1>表示与别名 1表文件建立关联时的关键字段表达式,<关联表达式 2>表示与别名 2表文件建立关联时的关键字段表达式,建立关联时,关键字段必须是两个表文件共有字段,且别名表文件已按关键字段建立了索引文件,并已指定为主索引 。
目录上页下页退出
144
当父表文件的记录指针移动时,多个子表文件的记录指针根据各自的主索引文件指向关键字段值与父表文件相同的记录 。 其他有关参数均同前述 。
2) 菜单方式多次利用上节介绍的菜单步骤,只要每次选择的子表不同,就可以分别建立一个表文件同多个表文件的关联。
3,取消表的关联
( 1) 在建立关联的命令中,如果不选用 ADDITIVE选项,
则在建立新关联的同时,取消了当前表原来建立的关联 。
( 2) 命令 SET RELATION TO,取消当前表与其他表之间的关联 。
( 3) 命令 SET RELATION OFF INTO <别名 > | <工作区号 >,取消当前表与指定别名表之间的关联 。
( 4)关闭表文件,关联都被取消,下次打开时,必须重新建立。
目录上页下页退出
145
4,数据库的连接在实际应用中,经常需要把不同数据结构的表文件按一定要求连接形成一个新的表文件,这就是表文件的连接,称为物理连接 。
【 格式 】 JOIN WITH <工作区号 > | WITH <别名 > TO <
新文件名 > FOR <逻辑表达式 > [FIELDS <字段名表 >]
【 功能 】 将当前表文件和另一工作区中打开的 <别名 >表文件按指定的条件连接,生成一个以 <新文件名 >为名的新表文件,实现物理上的连接 。
【说明】 WITH <工作区号 > | WITH <别名 >指定另一工作区打开的表文件,<新文件名 >表示连接生成的新表文件,其扩展名可省略,系统默认为,DBF。
FOR <逻辑表达式 >指定两个表文件的连接条件,
它不同于其他命令中的 FOR子句,其他命令的 FOR子句都是选择项,这里的 FOR子句不可缺省,否则,
JOIN命令无法执行。
目录上页下页退出
146
【 例 4-50】 将 STUD.DBF和 SC.DBF表按学号连接,生成一个新的表文件 STUD_SC.DBF。
SELECT 2
USE SC
SELECT 1
USE STUD
JOIN WITH B TO STUD_SC FOR 学号 =B->学号
FIELDS 学号,姓名,班级名,系别代号,B->课程号,B->成绩 && 连接生成新文件 STUD_SC
5,表间的数据更新
【 格式 】 UPDATE ON<关键字段 >FROM <别名 >|<工作区号 > REPLACE <字段 1> WITH <表达式 1>[,
<字段 2> WITH <表达式 2>… ] [RANDOM]
【 功能 】 用 <别名 >或 <工作区号 >指定的表的数据更新当前区表中的数据 。
目录上页下页退出
147
【 说明 】 <关键字段 >必须为两个表所共有的 。
<别名 > | <工作区号 >:指定用来进行数据更新的表文件 。
<字段 1> WITH <表达式 1>:用表达式 1的值更新字段 1的内容,表达式中出现的别名库中的字段应以前缀,别名 -
>” 或,别名,” 标识 。
如果选用 RANDOM选择项,别名区中文件不需索引或按关键字段升序排序;否则两个表文件都必须以关键字段索引或按关键字段升序排序 。
若当前区表中有多个关键字值相同的记录,则只对第一个进行更新;若别名库中有多个关键字值相同的记录,则对当前表中相应的记录进行多次更新。
【 例 4-51】 表文件 ZFCJ.DBF内容如下,用 SC.DBF中的各课成绩值计算 ZFCJ.DBF中的总分成绩 。
目录上页下页退出
148
记录号 学号 姓名 总分
1 961101 李建国 90.0
2 961103 李 宁 92.0
3 961202 赵 娜 89.0
4 961204 孙 亮 75.0
5 971110 赵 琳 92.0
6 971405 罗宇波 90.0
SELECT 2
USE SC
SELECT 1
USE ZFCJ
SET ORDER TO TAG 学号 && 指定主索引标识
UPDATE ON 学号 FROM SC REPLACE 总分 WITH;
总分 +A->成绩 RANDOM
目录上页下页退出
149
一,选择题
1,若当前驱动器号是 C,当前目录是 \FoxPro\,要在 C盘的 USER目录下创建一个名为 TEACHER的表,下面不正确的命令是 ________。
A) CREAT C,\USER\TEACHER.DBF
B) CREAT C,\USER\TEACHER
C) CREAT TEACHER
D) CREAT \USER\TEACHER
2,用 DISPLAY命令显示数据时,若未指定 <范围 >,
则 ________。
A) 不停地显示表中的全部记录
B) 显示当前一条记录
C) 显示下一条记录
D) 分屏显示表全部记录思考题目录上页下页退出
150
3,修改表结构的命令是 ________。
A) MODIFY STRUCTURE
B) EDIT STRUCTURE
C) CHANGE STRUCTURE
D) BROWSE STRUCTURE
4,若要在表中真正删除记录,先用 DELETE命令,再用
________。
A) RECALL B) PACK
C) 按 ESC键 D) 不用其他命令
5,若对已有记录的表文件 STUD.DBF使用命令
USE STUD
GO 1
BOF( )
则显示结果是 ________。
A) 0 B) 1 C),F,D),T.
目录上页下页退出
151
1.设计一张二维表。
2.建立一个数据表。
3.对已有的表进行数据输入、记录显示和修改、追加记录等操作。
4.对已有的表进行逻辑删除记录和物理删除记录操作。
实验题
152
结 束