第三章 表的创建和使用
3.1 VFP6.0表
1. 表的概念
表(数据表):
是指存放在磁盘文件中的一张二维表。(相当FoxPro 2.x 版本中的数据库)
自由表:不属于任何数据库的表。
数据库表:包含在一个数据库中的表。
表文件名:
表名可以由字母、数字或下划线组成,系统自动给出的扩展名为 .DBF。
备注文件名:
当表中有备注型或通用型字段时,系统自动生成与所属数据表的表名相同、扩展名为:.FPT的文件名。
表结构:存储表记录的公共结构。(就是指一张表的表头结构,即字段的属性)。
记录:表中的一行。它是多个字段的集合,同一张表的每个记录都有相同的字段。
字段:表中的一列。它规定了数据的特征。
关系型数据表的特点:
(1)每一个字段不可再分解,也不能有名字相同的字段;
(2)每一列中的数据都有相同的数据类型;
(3)表中没有内容完全相同的行(记录)。
2. 字段的基本属性
字段的属性:
包括:字段名、数据类型、字段宽度、小数位数、空值支持
字段名:
即每个字段的名字,必须以字母开头,可由字母、数字、下划线组合而成,字母大、小写无区别,但其中不许有空格或其它字符。自由表的字段名最多由10个字符组成,数据库表的字段名支持长名,最多可达128个字符。如果从数据库中移去一个表,那么此表的长字段名将被截短成 10 个字符。
VFP允许长字段名和长表名,但使用长名称对于跨平台的操作可能遇到难以预料的结果。
数据类型:指该字段的数据特征。
字段宽度:指该字段所能容纳数据的的最大字节数。
小数位数:指数值型数据将保留几位小数。此时的字段宽度 = 整数位数+1+小数位数。
NULL 值(空值):
无明确的值。NULL 值不等同于零或空格。一个 NULL 值不能认为比某个值(包括另一个 NULL 值)大或小,相等或不同。
VFP 6.0表中字段的数据类型
字段类型 |
代号 |
说明 |
字段宽度 |
使用示例 |
字符型 |
C |
字母、汉字和数字型文本 |
每个字符为1个字节,最多可有 254 个字符 |
学生的学号或姓名, "8199101" 或 '李立' |
货币型 |
Y |
货币单位 |
8 个字节 |
工资, $1246.89 |
日期型 |
D |
包含有年、月和日的数据 |
8 个字节 |
出生日期,
{^1980/07/08} |
日期时间型 |
T |
包含有年、月、日、时、分、秒的数据 |
8 个字节 |
上班时间,
{^2005/02/20 9:15:15 AM} |
逻辑型 |
L |
“真”或“假”的布尔值 |
1 个字节 |
课程是否为必修课,
.T. 或 .F. |
数值型 |
N |
整数或小数 |
在内存中占 8 个字节;在表中占1 至20个字节 |
考试成绩, 83.5 |
双精度型 |
B |
双精度浮点数 |
8 个字节 |
实验要求的高精度数据 |
浮点型 |
F |
与数值型一样 |
|
|
整型 |
I |
不带小数点的数值 |
4 个字节 |
学生的数量 |
通用型 |
G |
OLE 对象 |
在表中占 4 个字节 |
图片或声音 |
备注型 |
M |
不定长度的一段文字 |
在表中占 4 个字节 |
学生简历 |
字符型(二进制) |
C |
任意不经过代码页修改而维护的字符数据 |
每个字符用1个字节,最多可有 254 个字符 |
|
备注型(二进制) |
M |
任意不经过代码页修改而维护的备注数据 |
在表中占 4 个字节 |
|
3. 表的基本操作
表的创建:设计表名和表结构、输入记录、建立索引
数据维护:增加记录、修改记录、删除记录
创建表的主要步骤: 设计表结构 → 输入记录 → 建立索引 → 数据维护
4.关于表操作的几个基本命令
命令格式 |
功能 |
CREATE 表文件名 |
创建一个新的自由表的结构 |
USE 表文件名 |
打开指定的表文件 |
USE |
关闭当前表文件 |
LIST ALL |
显示当前表的全部记录内容(类似于DOS 命令中的dir) |
DISPLAY ALL |
分屏式地显示当前表的全部记录内容(类似于DOS中的dir/p) |
DISPLAY STRUCTURE |
显示当前表的结构(分屏显示) |
LIST STRUCTURE |
显示当前表的结构(不分屏显示) |
MODIFY STRUCTURE |
调出表设计器,修改当前表的结构。 |
CLEAR |
清除主窗口中的所有内容 |
注意:
(1)必须先打开所需的数据表才可进行以上操作;
(2)当带有命令子句时,只对指定的记录进行操作;
(3)LIST 命令的默认范围是所有记录,DISPLAY 命令的默认范围是当前记录。
3.2 表结构的创建和修改
1. 表结构的创建
创建表结构其实就是设计字段的基本属性。可以使用表设计器、表向导或SQL命令来创建表结构。
(1)使用表设计器创建表 [图例]
步骤:
从文件菜单中单击新建 → 在新建对话框中选择表并单击新文件 → 在创建对话框中给出文件名并确定所需的保存位置 → 在表设计器对话框中逐个输入所需字段(用↓或鼠标换行),全部字段输入完成后单击确定。
(2)使用表向导创建表
步骤:
从文件菜单中单击新建 → 在新建对话框中选择表并单击向导→在表向导中做第1步:选取字段,完成后单击下一步 → 在表向导中做第1a步:选择数据库,完成后单击下一步 → 在表向导中做第2步:修改字段设置,完成后单击下一步 → 在表向导中做第3步:为表建索引,完成后单击下一步 → 在表向导中做第4步:完成,选择表的保存方法,完成后单击完成 → 在另存为对话框中给出文件名并确定所需的保存位置。
注意:
先选择一个与待建数据表类似的样表,再从中挑选出所需的部分字段,然后在下一步根据实际需要修改或直接采用原字段的宽度。
(3) 使用 CREATE TABLE - SQL命令
该命令的一般格式为:
CREATE TABLE |dbf <表文件名>(字段名1 字段类型[(字段宽度[,小数位数])][,字段名2 字段类型[(字段宽度[,小数位数])]]……)
例:CREATE TABLE xscj(xh c(8),xm c(6),xb c(2),;cj n(5,1),ksrq d)
2. 表结构的修改
(1)用表设计器修改
USE <表文件名>
MODIFY STRUCTURE
(2) 使用 ALTER TABLE - SQL命令
功能 |
命令格式示例 |
添加字段 |
ALTER TABLE xscj ADD COLUMN kcmc C(14) |
重命名字段 |
ALTER TABLE xscj RENAME COLUMN kcmc TO kc |
删除字段 |
ALTER TABLE xscj DROP COLUMN kc |
3.3 表记录的处理
1. 记录的输入
(1) 立即输入方式:
设计好表的结构后,系统会提示是否直接进入数据输入状态。若选是,则进入编辑窗口,输完后单击“X”按钮退出,系统自动存盘。需输入备注型或通用型字段的数据时,双击“memo” 或“gen”,在新打开的编辑窗口中输入所需内容,输完后单击“X”按钮系统自动存盘,退回到原窗口 ,此时字段中的“memo” 或“gen”变成“Memo” 或“Gen”。
(2) 追加方式:
若设计好表的结构后并没有及时输入数据,则可以用追加方式:
从文件菜单中(或从命令窗口中输入:USE 表文件名) 打开所需表文件 → 从显示菜单中选择浏览 → 再从显示菜单中选择追加方式 → 在浏览窗口中输入所需记录。
不同追加方式适用的场合
追加记录的方式 |
适用的场合 |
显示菜单中的追加方式 |
在现有数据表的尾部添加一个或多个新记录 |
表菜单中的追加新记录 |
在现有数据表的尾部添加一个新记录 |
表菜单中的追加记录… |
从其它数据表中将符合要求(字段名和字段类型相同)的记录添加在当前数据表的尾部 |
APPEND [BLANK] |
在当前表的末尾自动添加一个或多个新记录。相当于显示菜单中的追加方式。有BLANK时添加一个空记录,相当于表菜单中的追加新记录。 |
APPEND FROM 表文件名 [FIELDS 字段名1,字段名2 …][FOR 条件 ] |
从其它数据表中将符合要求(字段名和字段类型相同)的记录添加在当前数据表的尾部。相当于表菜单中的追加记录…。 |
APPEND FROM 文本文件名 SDF |
将符合要求的文本文件全部追加在当前数据表的尾部。 注意:文本内容要与表中的字段结构相适应。 |
文件菜单中的导入 |
将其它类型的文件转换成一个完整的VFP数据表。 |
(3) 使用INSERT-SQL命令
该命令的一般格式为:
INSERT INTO <表名>[(字段名1[,字段名2 …])] VALUES (表达式1[,表达式2 …])
例:INSERT INTO xscj(xh,xm,cj) VALUES ("81991001", "张良", 85.5)
2. 记录的浏览
(1) 通过浏览窗口
(2) 通过BROWSE 命令
BROWSE命令用来打开表的浏览窗口,可通过不同的子句来实现对特定记录的浏览。
VFP命令中的常用子句
1) 范围子句
子句格式 |
功能 |
ALL |
表示对表文件的全部记录进行操作 |
NEXT n |
表示对从当前记录开始的共n个记录进行操作, n为正整数 |
RECORD n |
指明操作对象是表文件的第n号记录 |
REST |
对从当前记录起到文件结尾的全部记录进行操作 |
2) FOR子句
用于指明进行操作的条件。
格式: FOR <条件>
指明只对指定范围中那些符合给定条件的进行当前操作。
例如: list NEXT 6 FOR cj < 85
3) WHILE 子句
也用于指明进行操作的条件。
格式: WHILE <条件>
例如: list NEXT 6 WHILE cj < 85
4) FIELDS 子句
用于指明当前的操作涉及到表文件的哪些字段。
格式:BROWSE [ FIELDS 字段名1,字段名2……]
例如:BROWSE FIELDS xh,xm,cj
3. 记录的定位
(1) 系统对记录的三个控制标志
记录开始标志:位于第一个记录之前。其值用函数BOF()进行测试。
记录指针标志:指向当前记录。其值用函数RECNO()进行测试。
记录结束标志:位于最后一个记录之后。其值用函数EOF()进行测试。
记录指针可以理解为保存当前记录号的变量,它的初始值总是1,不可能为0或负数,最大值是表中记录总数+1。
刚打开表时记录指针的情况
表中记录情况 |
BOF()的值 |
RECNO()的值 |
EOF()的值 |
无记录 |
.T. |
1 |
.T. |
有记录 |
.F. |
1 |
.F. |
(2)记录的定位方式
绝对定位:是指把指针移到指定的位置。
相对定位:
是指把指针从当前位置开始,相对于当前记录向前或向后移动若干个记录位置。
条件定位:
从表菜单中选择转到记录:记录号——实现绝对定位
定位… ——实现条件定位
记录的定位
命令格式 |
功能 |
备注 |
绝对定位 |
GO TOP |
将记录指针定位到表文件之首 |
或 GOTO TOP |
GO BOTTOM |
将记录指针定位到表文件之尾 |
或GOTO BOTTOM |
GO <n> |
将记录指针定位到指定的n号记录 |
|
相对定位 |
SKIP <n> |
将记录指针从当前记录向上或向下移动n个 |
n为正值则向下移动
n为负值则向上移动
无n向下移动 1个 |
条件定位 |
LOCATE FOR <条件> [ 范围 ] |
按顺序搜索表, 直到找到满足指定条件的第一个记录 |
默认范围是所有记录 |
4. 记录的修改和删除
一张表用非只读方式打开后,即可通过菜单在浏览窗口(或编辑窗口)中或从命令窗口中用命令直接对其记录进行编辑、修改和删除。
(1) 菜单方式
修改记录:
从表菜单中选择替换字段… → 在替换字段对话框中选择待替换的字段并构造出替换表达式及替换条件 → 替换。
删除记录:
从表菜单中选择删除记录 → 在删除对话框中选择删除范围和删除条件 → 单击删除按钮 → 从表菜单中选择彻底删除 → 在消息框中单击是。
删除记录包括两步: 标记要删除的记录 和 彻底删除带删除标记的记录
恢复带删除标记的记录:
从表菜单中选择恢复记录 → 在恢复记录对话框中选择作用范围和条件 → 单击恢复记录按钮。
(2) SQL命令方式 (表事先可以不打开,适用于编程工作方式)
修改记录: 用 UPDATE-SQL 命令。
命令格式: UPDATE <表名> SET 字段1 = 表达式1 [,字段2 = 表达式2 …];
WHERE 条件表达式
例: UPDATE xscj SET cj = cj*1.05 WHERE cj>80
删除记录: 用 DELETE-SQL 命令。
命令格式: DELETE FROM <表名> [WHERE 条件表达式]
例: DELETE FROM xscj WHERE cj<60
(3) 在命令窗口中用VFP命令:
命令格式 |
功能 |
备注 |
插入 |
INSERT [BLANK][BEFORE] |
在当前表的指定位置上插入一个空记录或若干新记录 |
BLANK :在当前记录后插入一个空记录
BEFORE :在当前记录之前插入若干新记录 |
修改 |
CHANGE [FIELDS 字段名1,…][FOR 条件] [LEDIT] [REDIT] |
在编辑窗口显示要修改的字段 |
LEDIT:调出编辑窗口
REDIT:调出浏览窗口 |
替换 |
REPLACE 字段名1 WITH 表达式1 [ADDITIVE][, 字段名2 WITH 表达式2[ADDITIVE] …] [范围] [FOR 条件] |
把字段值用指定的表达式进行替换。如: 工资单中给某些人长工资 |
默认范围是当前记录
ADDITIVE:把备注字段的替换内容添加在原备注内容的后面 |
删除 |
DELETE [ 范围 ][FOR 条件] |
对当前表中指定范围内满足条件的记录加上删除标记 * |
默认范围是当前记录 |
PACK [MEMO][DBF] |
将所有带删除标记的记录从表中抹去(不能再恢复) |
DBF:不影响备注文件
MEMO:从备注文件中删除未使用空间 |
ZAP |
删除当前表中所有记录,只留下表的结构 |
|
恢复 |
RECALL [ 范围] [FOR 条件] |
取消当前表中指定记录上的删除标记 |
默认范围是当前记录 |
5. 筛选记录和字段
(1) 用菜单方式
从表菜单中选择属性 → 在工作区属性对话框中单击数据过滤器框后的按钮 → 在表达式生成器对话框中构造所需的条件表达式并确定 → 单击字段筛选…按钮 →在字段筛选器中选择所需字段并确定 → 单击选项按钮:字段筛选指定的字段 → 确定。
(2)用命令方式
命令格式: SET FILTER TO 条件表达式
例: SET FILTER TO xb ='男'
注意:SQL命令对记录的访问不受此筛选命令的限制。
3.4 表的使用
1. 工作区
工作区:
指用来标识一张打开的表的区域。一个工作区在某一时刻只能打开一张表,但可以同时在多个工作区打开多张表,一张可以在多个工作区中多次被打开。每个工作区都有一个编号。
表的别名:
在工作区中打开表时为该表所定义的名称。可以自定义别名,否则系统默认就以表名作为别名。若一张表在多个工作区中被打开,系统默认在表名后依次加_a 、_b…。
自定义别名的格式: USE <表名> ALIAS <别名>
当前工作区:
正在使用的工作区。可以通过“数据工作期窗口”或用 SELECT命令把任何一个工作区设置为当前工作区。
SELECT 命令格式: SELECT <工作区号>|<别名>
要操作非当前工作区中的表,可以把其它工作区选为当前工作区,或在命令中强行指定工作区。
命令格式: IN <工作区号>|<别名>
ALIAS([工作区号])函数:
测试指定工作区中的表的别名,无参数时指当前工作区表的别名。
SELECT([别名])函数:
测试指定别名的表所在的工作区号,无参数时指当前工作区的区号。
2. 表的打开和关闭
打开表的途径 |
关闭表的途径 |
文件菜单中的打开 |
工具栏上的打开 |
数据工作期窗口中关闭 |
USE |
数据工作期窗口中打开 |
USE <表名> |
USE IN <别名>|<工作区号> |
CLOSE ALL |
USE <表名> IN <工作区号> |
USE <表名>AGAIN |
CLOSE DATABASE |
CLOSE TABLE |
USE <表名> ALIAS <别名> |
退出VFP系统,则关闭所有的表 |
3. 表的独占与共享使用
独占使用: 一张表只能被一个用户打开。VFP6.0在默认状态以独占方式打开。
共享使用: 一张表可以被多个用户同时打开。
系统的默认打开方式可以通过工具菜单中的选项…来设置,或 用命令:
SET EXCLUSIVE OFF && 默认打开方式为共享
SET EXCLUSIVE ON && 默认打开方式为独占
或强行打开:USE cj SHARED && 以共享方式打开cj表
USE cj EXCLUSIVE && 以独占方式打开cj表
4. 利用缓冲访问表中的数据
数据缓冲:
先将对表记录的修改存放在缓冲区中,用户决定是否用缓冲区中的数据更新表文件。它是VFP6.0在多用户环境下用来保护对表记录所做的数据更新和数据维护操作的一种技术。
数据缓冲的类型:
记录缓冲:
当记录指针移动或关闭表时,缓冲区自动更新表中的相应记录。
表缓冲:当发出更新表的命令或关闭表时更新表。
缓冲锁定方式:有两种:开放式 和 保守式。
3.5 表的索引
1. 基本概念
记录的顺序 :
物理顺序:即表中记录的存储顺序。用记录号表示。
逻辑顺序:表打开后被使用时记录的处理顺序。
索 引:
指按表文件中某个关键字段或表达式建立记录的逻辑顺序。它是由一系列记录号组成的一个列表,提供对数据的快速访问。索引不改变表中记录的物理顺序。表文件中的记录被修改或删除时,索引文件可自动更新。
索引关键字(索引表达式):用来建立索引的一个字段或字段表达式。
注意:1)用多个字段建立索引表达式时,表达式的计算结果将影响索引的结果;
2)不同类型字段构成一个表达式时,必须转换数据类型。
索引标识(索引名):
即索引关键字的名称。必须以下划线、字母或汉字开头,且不可超过10个字。
索引类型:主索引、候选索引、普通索引、唯一索引。
主索引:
组成主索引关键字的字段或表达式,在表的所有记录中不能有重复的值。主索引只适用于数据库表的结构复合索引中。自由表中不可以建立主索引;数据库中的每个表可以且只能建立一个主索引。
候选索引:
在指定的关键字段或表达式中不允许有重复值的索引。在数据库表和自由表中均可为每个表建立多个候选索引。
普通索引:
也可以决定记录的处理顺序,但是允许字段中出现重复值。在一个表中可以加入多个普通索引。
唯一索引:
参加索引的关键字段或表达式在表中可以有重复值,但在索引对照表中,具有重复值的记录仅存储其中的第一个。
2. 索引的作用
用途 |
采用的索引类型 |
排序记录,以便显示、查询或打印 |
使用普通索引、候选索引或主索引 |
在字段中控制重复值的输入并对记录排序 |
对数据库表使用主索引或候选索引,对自由表使用候选索引 |
准备设置表关系 |
依据表在关系中所起的作用,使用普通索引、主索引或候选索引 |
3.索引文件的种类
索引文件种类 |
特征 |
关键字数目 |
限制 |
结构复合索引文件
.CDX |
使用和表文件名相同的基本名,随表的打开自动打开。可以看成表结构的一部分。 |
多关键字表达式,称为标识。 |
有效表达式限制在 240 个字符之内。 |
非结构复合索引文件
.CDX |
必须明确地打开,使用和表名不同的基本名。其中不能创建主索引 |
多关键字表达式,称为标识。 |
有效表达式限制在 符之240 个字内。 |
独立索引文件
.IDX |
必须明确地打开,文件的基本名由用户定义。一般作为临时索引文件。 |
单关键字表达式。 |
有效表达式限制在 100 个字符之内。 |
结构复合索引文件(扩展名为.CDX)的特点:
4. 创建结构复合索引
VFP中创建索引文件有两种方式:表设计器方式和命令方式。
(1)表设计器方式
打开表文件 →从显示菜单中选择表设计器 → 在表设计器中单击索引 → 输入索引名并选择索引类型 → 选择索引的方向(按升序或降序排列记录) → 在表达式框中输入作为排序依据的索引关键字 → 在筛选框中输入筛选表达式 → 单击确定,完毕。
(2) 命令方式
命令 |
功能 |
INDEX ON <索引关键字段> TAG <索引标识>[FOR 条件 ] [ASCENDING | DESCENDING] [CANDIDATE | UNIQUE] |
用INDEX ON 命令建立一个索引文件 |
ALTER TABLE <表名> ADD PRIMARY KEY <关键字段名> TAG <索引标识名> |
用SQL命令创建主索引 |
ALTER TABLE <表名> ADD UNIQUE <关键字段名>TAG <索引标识名> |
用SQL命令创建候选索引 |
注意:1)备注型字段和通用型字段不能作为索引关键字段;
2)不要建立无用的索引,以免降低系统性能;
3)及时清理已无用索引标识,提高系统效率。
4)在复合索引的多个索引中,某一时刻只有一个索引对表起作用。
5. 索引的修改和删除
修改: 打开表设计器,在索引对话框中进行所需修改;
或 用命令重新建立一个相同标识名而索引表达式不同的索引。
删除: 打开表设计器,在索引对话框中删除不需要的索引标识即可;
或 用命令: DELETE TAG ALL | 索引标识1 [, 索引标识2 ] …
删除不需要的索引标识,ALL表示全部标识。
6. 索引的使用
功能 |
命令格式 |
打开表的同时指定主控索引 |
USE <表名> ORDER <标识名> |
为已打开的表确定主控索引 |
SET ORDER TO <标识名> [ASCENDING | DESCENDING] ] |
搜索某张已建立索引的表 |
FIND <表达式> |
搜索表中首次出现的记录 |
SEEK <表达式> [ <索引标识名>] |
SEEK <表达式> |
|