DIR *.* CLOS DATA
索引文件的打开
① 建立索引文件时自动起作用
② 打开库文件后,再打开索引文件
USE RSDAK BROW
SET INDE TO GZ_03 && 打开索引文件 BROW && 观察与刚才的区别
USE
③ 打开库文件的同时打开索引文件
USE RSDAK INDE GZ_03 &&打开库的同时打开索引文件 ? RECN ( ) &&当前记录号是否为1:_______ GO BOTT ? RECN ( )
&&当前记录号为:_______,记录号是否为最大?_______ GO TOP
? RECN ( ) &&当前记录号为:_______ LIST
? RECN ( ) && 当前记录号为:_______
索引文件的关闭
SET INDE TO &&只关闭打开的索引文件 或 USE && 关闭库文件的同时关闭索引文件
多重排序
① 对RSDAK.DBF 数据库先按XB 字段升序,性别相同的再按 CSRQ 字段升序排列,建立多重排序文件 RSDAK_XBCSRQ.DBF :
USE RSDAK
SORT TO RSDAK_XBCSRQ ON XB,CSRQ
LIST && 是否有排序效果_________ USE RSDAK_XBCSRQ
DISP ALL &&注意观察排序效果
USE
② 对 RSDAK.DBF 数据库先按 GZ 字段降序,工资相同的再按 XM 字段升序排列,建立多重排序文件 RSDAK_GZXM.DBF : USE RSDAK
SORT ON GZ /D , XM TO RSDAK_GZXM
LIST && 是否有排序效果_________ USE RSDAK_GZXM
BROW && 注意观察排序效果 USE
多重索引
① 对 RSDAK.DBF 数据库按 “XB”和“BH”字段建立多重索引文件 XBBH.IDX USE RSDAK
INDE TO XBCSRQ ON XB + BH
&&先按性别排序,性别相同的再按编号排序 BROW && 观察索引效果
USE
② 对 RSDAK.DBF 数据库按 “XB”和 “GZ”字段建立多重索引文件 XBGZ.IDX
USE RSDAK
INDE ON XB + STR(GZ) TO XBGZ &&当字段类型不一致时应将非字符型转换为字符型 DISP ALL &&观察索引结果
USE
主索引文件的改变
打开 RSDAK 数据库的同时打开多个索引文件,观察主索引文件所起的作用。 USE RSDAK INDE GZ_03 , GZ_04 , XBBH , XBGZ
BROW &&观察当前起作用的索引文件是__________ SET ORDER TO GZ_04
&&改变主索引,注意主屏幕显示的信息
BROW &&观察当前起作用的索引文件是_______ SET ORDER TO 4
&&再改变主索引,注意主屏幕显示的信息 BROW &&观察当前起作用的索引文件是_________ USE
d) 检索
1、 用条件显示命令进行检索
在命令窗口输入以下命令,注意观察分析结果:
USE RSDAK
LIST FOR XM=’李长贵’ &&列出XM为“李长贵”的记录 LIST FOR XM=’李’ &&列出姓“李”的记录
LIST FOR XM=’李长’ &&列出:_______________的记录 LIST FOR XM=’长贵’ &&结果:_______________
LIST FOR “长”$XM &&列出XM中有“长”字的记录
LIST FOR SUBS(XM, 3 ,2)=”长” &&列出XM中第二个字为“长”的记录。 思考:能否将以上命令中的LIST 改为DISP ?_____________。
2、 用LOCATE 命令进行顺序检索
① 在 RSDAK.DBF 数据库中找出工资超过300 元的第一条记录 USE RSDAK LOCATE FOR GZ>300 DISP
② 继续查找工资超过 300 元的所有记录
CONTINUE DISP
反复执行上述两条命令,直到屏幕显示“END OF LOCATE SCOPE ”时表示检索范围结束。
③ 在RSDAK.DBF 库中找出所有1970 年及以后出生的人员,并观察 FOUND( ) 函数的返回值: USE RSDAK LOCATE FOR YEAR(CSRQ) >= 1970
? FOUND() && 查询记录是否找到 ? EOF() DISP CONT DISP
连续输入CONT 命令,直到检索范围结束。再输入: ? FOUND()
? EOF() && 找不到时记录指针指向______________
USE
3、 索引检索
① 先对 RSDAK.DBF 数据库按 GZ 建立索引,再查找工资等于255.20 元的记录: USE RSDAK
INDE TO RSDAK_GZ ON GZ
FIND 255.20 && 在RSDAK.DBF 中找 工资为 255.20 的记录 DISP
SKIP && 找下一条满足条件的记录
DISP
连续输入SKIP 和 DISP 命令,直至显示的记录不符合条件,可结束查找 ? EOF() && 找不到时记录指针指向__________
② 先对 RSDAK.DBF 数据库按XM 建立索引,再查找姓名为“李长贵”的记录和第一个姓“李”的记录:
USE RSDAK
INDE TO RSDAK_XM ON XM
FIND 李长贵 && 找叫“李长贵”的记录 DISP
FIND 李 && 找姓 “李”的记录 DISP USE
③ 在 RSDAK.DBF 数据库中查找职称为讲师的第一条记录: USE RSDAK
INDE TO RSDAK_ZW ON ZW SEEK “讲师”
DISP
④ 打开RSDAK.DBF 库及 RSDAK_XM.IDX 索引文件,观察用 SEEK 命令查询内存变量的情况:
USE RSDAK INDEX RSDAK_XM QQ=”李长贵” SEEK QQ DISP
WW=”李”
SEEK WW DISP
连续键入SKIP ,DISP 命令,直到显示的记录不符合条件,可结束查找。
若键入:
MZ=”长贵” SEEK MZ
则屏幕显示: no FIND.
思考:为什么找不到:__________________________________
e) 统计与汇总
数据统计(请注意观察主屏幕上的输出信息) ① 记录数统计
USE RSDAK
COUNT &&统计总记录数
COUNT FOR GZ>300 &&统计基本工资在300元以上的人数 COUNT FOR ZW=”讲师” .AND. GZ > 300 TO A1
&&统计职称为讲师且工资超过300元的人数,并将结果保存在 A1中 ? A1
② 数据求和
SUM && 对所有数值型字段纵向求和
SUM BT + JJ && 求 BT + JJ 的总和 SUM GZ,BT,JJ TO B1,B2,B3 FOR ZW=”助教”
&& 统计职务为助教的所有人员的GZ,BT,JJ总和 ? B1,B2
③ 求平均值
USE RSDAK
AVER &&对所有数值型字段求平均值 AVER GZ,BT TO C1,C2 FOR XB=”男”
&& 求性别为男所有人员的平均工资和补贴数
? C1,C2 USE
分类求和
① 对 RSDAK.DBF 数据库中所有数值型字段按性别字段分类求和(汇总),生成名为 XB1.DBF的新数据库文件。
USE RSDAK
LIST STRU &&记下数字型字段的宽度:
INDE TO GZ_XB ON XB
&&分类汇总前应对数据库按关键字进行排序或索引 TOTAL ON XB TO XB1 &&按XB 进行分类汇总 USE XB1
LIST &&观察分类求和的结果
LIST STRU &&观察汇总后的库结构并注意其中的数值字段宽度是否自动增加了______ USE
② 对RSDAK.DBF 的 BT 及 JJ 两字段按性别分类求和,生成名为XB2.DBF的新数据库。 USE RSDAK INDE GZ_XB
TOTAL ON XB TO XB2 FIELD BT,JJ USE XB2 LIST USE
三、 意事项
a) 区分排序与索引。
b) 区分比较FIND与SEEK,LOCATE。 四、 思考题
a) 只打开文件时,记录指针指向几号记录? b) 排序和索引有何区别?
c) 只打开库文件时,记录指针指向第________号记录;
d) 打开库文件的同时打开索引文件,记录指针是否指向1号记录?最后一条记录是否为记录号最大胡记录?
e) 排序和索引有何区别? f) 用LOCATE 命令进行检索,要索引吗?
g) 如果不索引,FIND 与 SEEK 命令能否正常使用?,如果对一字段建立了索引,而用 FIND 或 SEEK 检查另一字段,能否成功?
实验九、库文件操作与常用函数 一、 实验目的及要求
a) 掌握数据库库结构的复制 b) 掌握库文件操作的常用命令
c) 熟悉VFP 6.0的常用函数的功能及初步了解数据库的关联 二、 实验内容及步骤 a) 数据库的复制 ① 整库复制
DIR &&看当前目录下的库文件情况
USE GZ01
COPY TO GZLS &&将GZ01库中所有内容复制到库GZLS.DBF中 DIR &&看是否增加了GZLS.DBF 库文件 USE GZLS LIST
DELE FILE GZLS.DBF &&欲删除GZLS.DBF,能删除吗?为什么? USE &&关闭GZLS.DBF
DIR &&看GZLS.DBF是否还在
ERASE GZLS.DBF &&删除GZLS.DBF DIR &&看GZLS.DBF是否删除
② 部分复制 复制部分字段
USE GZ01
COPY TO GZLS1 FIEl XM,KS,JBGZ
&&将GZ01中的XM,KS,JBGZ三个字段及其内容复制到GZLS1库中 USE GZLS1 LIST USE
按记录范围复制部分记录 USE GZ01 GO 5