Visual Foxpro程序设计 第4章 表的操作
第四章 表的操作 表的建立与修改 1 表的显示与维护 2 表中数据的过滤 3 表的排序与索引 4 查询信息 5 数据统计 6 多表操作 7
4.1 表的建立与修改 记录(Record) 表的结构 B C A 字段(Field) 表结构(Structure)
字段的基本属性 小数位数 字段属性 字段名 字段宽度 字段的数据类型
4.1.1表结构的创建和修改 菜单方式 命令方式 CREATE ? CREATE 表文件名 用菜单或工具栏打开“表设计器”
交互式:用表设计器(Table Designer)定义表结构 选定NULL表示可以接受不确定的值,便于和其它数据库通用。
2、修改表结构 菜单方式 命令方式 在“项目管理器”中使用“修改”按钮 MODIFY STRUCTURE
4.1.2记录的处理 记录的追加 命令 APPEND [BLANK] APPEND FROM <文件名> 立即输入记录 浏览状态下追加记录 编辑状态下追加记录 备注型数据输入 通用型数据输入
4.1.3数据的显示和修改方式 用编辑方式显示和修改数据 用浏览方式显示和修改数据 记录的修改EDIT命令 EDIT [<范围>] [FOR<条件>]
BROWSE [<范围 >] [FIELDS<字段名表>] [FOR< 条件表达式>][LAST] 命令: BROWSE [<范围 >] [FIELDS<字段名表>] [FOR< 条件表达式>][LAST] 记录在窗口中的两种显示方式: 浏览方式 编辑方式
4.1.4数据表的打开与关闭 USE [<表文件名>] [EXCLUSIVE] [SHARED] 说明: ①命令功能:在当前工作区打开或关闭表; ②缺省<文件名>选项,表示关闭当前工作区中的表; ③打开表时,自动关闭先前已打开的表; ④USE ? 命令等效于“文件”菜单的“打开”命令。此时若要进行修改操作,则需选定“独占”复选框。此时相当于执行命令USE <表文件名> EXCLUSIVE。
关闭表的一些方法
4.2表的显示与维护 4.2.1记录的指针 记录开始标志 记录指针 记录结束标志 系统在打开一个表文件后将自动生成三个控制标志: 记录开始标志、记录指针标志、记录结束标志。 文件头 (含表结构等信息) 第1号记录 第2号记录 第n号记录 记录开始标志 记录指针 记录结束标志
1、记录指针 记录指针是VFP系统内部的一个指示器,在表中指向记录。 记录指针指向的记录叫当前记录,改变指针的指向叫记录的定位。 测试当前记录用函数RECNO()。 打开表时记录指针情况: 表中无记录:BOF()=.T. EOF()=.T. RECNO()=1 表中有记录:BOF()=.F. EOF()=.F. RECNO()=1
2、记录的定位方式 1 记录指针的 绝对移动 2 记录指针的 相对移动 3 记录的条件 定位
记录的定位移动记录指针 菜单:打开浏览窗口,选择“表/转到记录”菜单命令 命令 ① 绝对移动:[GO[TO]] <记录号>|TOP|BOTTOM 功能:将记录指针定位在指定记录号的记录上 TOP表示第一条记录,BOTTOM表示最后一条记录 ② 相对移动:SKIP [+|-][<算术表达式>] 功能:将记录指针从当前位置向前或向后 移动若干条记录位置 ③ 条件定位: LOCATE [<范围>] FOR <条件> 功能:查找满足条件的第一条记录 “FOR<条件>”是必须的;使用CONTINUE 命令可继续查找下一条满足条件的记录
3、表结构和记录的显示 显示表结构 命令格式: LIST / DISPLAY STRUCTURE 显示表记录 LIST/DISP [<范围>] [FIELDS<字段表>] [FOR/WHILE <条件>] [OFF] [TO PRINTER] 使用OFF 选项表示显示时不显示记录号。 LIST 和 DISPLAY 的区别
4.2.2表记录的插入 INSERT [ BEFORE] [BLANK] 命令功能:在指定(当前)记录的后面或前面插入一条或多条记录,也可插入空记录。
4.2.3记录的删除 界面方式删除 删除记录的方法 ①做删除标记 ②彻底删除带标记的记录 ①对少量的记录直接在浏览窗口中删除 ②在某一范围内删除一组符合特定条件的记录 ③“表”菜单中的“删除记录…”命令项 ④“表”“恢复记录” ⑤“表”“彻底删除” 删除记录的方法
1、记录的删除 物理删除 删除 逻辑删除
2、有关删除记录的命令 删除:DELETE [范围] [FOR/WHILE<条件表达式>] 恢复删除:RECALL [范围] [FOR|WHILE<条件表达式>] 彻底删除:PACK 删除所有记录:ZAP(不管记录是否有删除标记) 使用DELETE()函数可测试当前记录是否有删除标记 控制其它命令对有删除标记的访问SET DELE ON|OFF
命令图解 RECALL DELETE PACK ZAP 记 录 物理删除 逻辑删除
4.2.4表中数据的替换 语法 功能 REPLACE [<范围>] <字段1> WITH <表达式1> [ADDITIVE] [ <字段2> WITH <表达式2> [ADDITIVE]], …. ][FOR<条件>] 用WITH之后<表达式>的值替换WITH之前 <字段>的值。
4.2.5表的复制 1、复制任何文件 COPY FILE<文件名1> TO <文件名2> 2.从表复制出表或其他类型的文件 COPY TO <文件名> [FOR|WHILE<条件>] [FIELDS<字段名表>][TYPE][SDF|XLS]| DELIMITED[WITH<定界符>]
4.3表中数据的过滤 SET FILTER TO [<条件>] 按条件过滤记录,屏蔽不满足条件的记录。
4.3.2设置字段表(针对字段) SET FIELDS TO [[<字段1>[,<字段2>…]] 语法 命令 SET FIELDS ON|OFF
4.4表的排序与索引 SORT TO <新文件名> ON < 字段名1> [ /A | /D ] [ /C ] [,<字段名2> [/A | /D ] [ /C ] … ] [ <范围>] [ FOR <条件1> ] [ WHILE <条件2> ][ FIELDS<字段名表> ] 4.4.1表的排序
排序与索引 排序 原文件 索引 1 2 3 4 5 6 5000 6000 1000 4000 3000 2000 电视 冰箱 电磁炉 音响 放录机 洗衣机
4.4.2表的索引 物理顺序 记录的顺序 逻辑顺序
表的索引 记录的顺序 物理顺序: 表中记录的存储顺序。 按记录输入的时间顺序存放。 逻辑顺序: 记录的处理顺序。 对记录按某个(些)字段的值进行排序。
索引的构成 筛选条件 索引的构成 索引名 索引类型 索引表达式
索引文件的种类 B A C 独立索引文件(扩展名为.IDX) 表的结构 结构复合索引文件(扩展名为.CDX)
索引的类型 主索引(Primary Indexes) 候选索引(Candidate Indexes)。 普通索引(Regular Indexes) 唯一索引(Unique Indexes)
结构复合索引文件的创建 菜单方式 命令方式 在“表设计器”中创建 INDEX ON 索引表达式 TAG 索引标识名 [FOR 条件表达式][ASCENDING|DESCENDING] [UNIQUE|CANDIDATE]
索引的修改和删除 在“表设计器”中修改和删除索引。 用INDEX命令修改。(不能修改索引标识) 用REINDEX命令重整索引 用DELETE TAG命令删除索引 DELETE TAG 标识名1 [OF CDX文件1] [,标识名2 [OF CDX文件2]] DELETE TAG ALL [OF CDX文件名]
设置主控索引 主控索引 对表正在起作用的索引。 关闭索引 Set index to
索引 根据“索引表达式”的值进行记录的逻辑排序 建立一个逻辑顺序号与记录号(物理顺序)的对照表 索引的功能 建立一个逻辑顺序号与记录号(物理顺序)的对照表 索引机制 对照表存放的文件。一个索引文件中可存放很多索引 索引文件 记录增、改、删后,索引要进行相应的更新,否则索引 与表不匹配 索引更新
4.5 查询信息 LOCATE FOR <条件> [<范围>] [WHILE<条件>] 顺序查询命令 建立索引的目的就是为了快速查找。 快速查找
4.6统计命令 COUNT [<范围>] [ FOR<条件1>] [ WHILE<条件2>] [ TO〈内存变量〉] 计数命令 SUM |AVERAGE [<数值表达式表>] [<范围>] [ FOR | WHILE <条件>] [ TO <内存变量表 > | ARRAY <数组> ] 求和 CALCULATE <表达式表> [<范围>][FOR| WHILE <条件>] [TO<内存变量表>|ARRAY<数组>] 计算命令 Total on <关键字段> To <汇总文件名> [<范围>] [Fields<字段表>] [For<条件>] 分类汇总
计算命令 CNT( ) 统计记录数 SUM( )当前表数字字段求和 AVG( )当前表数字字段求平均值 MAX( )对当前表C、N、D等字段求最大值 MIN( )对当前表C、N、D等字段求最小值 STD( )对当前表的数值字段求标准偏差 VAR( )对当前表的数值字段求方差 Use 学生成绩 Calc sum(数学),avg(物理)
Total on 学号 to zcj fields 学号,成绩 Use zcj list 统计选课文件中每名学生的总成绩,并将结果保存在新表ZCJ.DBF Use 选课 List Index on 学号 tag xh Total on 学号 to zcj fields 学号,成绩 Use zcj list
小结 显示结构 复制结构 编辑结构 统计数据 数据表结构 数据表记录 新建表 打开/关闭 增加记录 删除记录 显示记录 修改记录 检索记录 LIST STRU MODI STRU COPY STRU 显示结构 复制结构 编辑结构 统计数据 数据表结构 数据表记录 新建表 打开/关闭 增加记录 删除记录 显示记录 修改记录 检索记录 排序 索引 复制表 CREATE USE SORT INDEX INSERT APPEND APPEND FROM BROWSE EDIT CHANGE REPLACE DELETE RECALL PACK ZAP LIST DISPLAY LOCATE CONTINUE FIND SEEK COUNT SUM CALCULATE AVERAGE TOTAL COPY
4.7多表操作 4.7.1工作区的选择与互访 1、工作区 2、工作区中表的别名 3、当前工作区 4、选用工作区 5、操作非当前工作区的字段
表的使用 工作区 工作区用以标识一个打开表的区域。 每个工作区有一个编号。 在某一时刻,一个工作区中只能打开一个表。 一个表可以在多个工作区中被多次打开。 1 2 3 内存
工作区中表的别名 表的别名是对工作区中打开的表的一个临时标识。 定义表的别名 打开表时指定别名 USE 表文件名 ALIAS 别名 Use 学生成绩 alias score 如果在打开表时没有指定别名,则系统默认用表文件名作为别名。 1 student 2 teacher 3 内存
当前工作区 VFP正在使用的工作区称为当前工作区。 用SELECT(0)(0 可省略)测试当前工作区号。 用ALIAS()函数测试当前工作区中表的别名。 状态栏中可显示当前工作区中表的别名。 1 xs 2 teacher 3 内存
选用工作区 将所在工作区设置为当前工作区 在命令中强行指定工作区 命令 IN 工作区|别名 在“数据工作期”窗口中设置。 使用命令:SELECT 工作区号|别名 操作非当前工作区中的表 将所在工作区设置为当前工作区 在命令中强行指定工作区 命令 IN 工作区|别名 SELECT 0:选择未使用最小编号的工作区
4.7.2数据表的关联操作 关联:令不同工作区的记录指针建立一种临时的联动关系,使一个表的记录指针移动时另一个表的记录指针能随之移动。
在数据工作期窗口建立关联 建立关联的命令 SET SKIP TO [ < 别名1 > [,<别名2>]……] SET RELATION TO [<关联表达式1>] INTO <别名1>[,[关联表达式2>]INTO<别名2>……][ADDITIVE]] 功能:以当前表为父表与其它一个或多个子表建立关联。 SET SKIP TO [ < 别名1 > [,<别名2>]……] 功能:创建表与表之间的一对多关系。
使用学生和选课表将陈刚同学的成绩提高5% Clear Sele 1 Use 学生 Index on 学号 to xs Sele 2 Use 选课 Set relation to 学号 into a Replace all 成绩 with 成绩*1.05 for a->姓名=[陈钢] List a->学号,a->姓名,成绩 for a->姓名=陈钢
4.7.3表的连接 JOIN WITH <工作区号>|<别名>TO<新表名>[FIELDS<字段名表>]FOR<连接条件>] 功能:按连接条件物理连接形成一个新表。
表的连接,新表具有两个表的字段 Sele 1 Use 学生 List Sele 2 Use 学生成绩 Jion with a to 学生情况 for 学号=a->学号 Sele 3 Use 学生情况 list
欢迎提问!