数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)

上传人:woxinch****an2018 文档编号:57052830 上传时间:2018-10-18 格式:PPT 页数:67 大小:1.19MB
返回 下载 相关 举报
数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)_第1页
第1页 / 共67页
数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)_第2页
第2页 / 共67页
数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)_第3页
第3页 / 共67页
数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)_第4页
第4页 / 共67页
数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)》由会员分享,可在线阅读,更多相关《数据结构域算法设计-2013-1VFP第11部分(索引、查询统计及扫描循环)(67页珍藏版)》请在金锄头文库上搜索。

1、Visual Foxpro 6.0,程序设计基础,要点: 1. 掌握索引排序2. 了解多工作区操作3. 掌握表中的数据查询4.掌握表中的数据统计5.掌握数据表中的扫描循环,第十一讲 数据表的查询统计,数据表的索引,索引是按索引关键字表达式的值使数据表中的记录有序排列的一种技术,在Visual FoxPro系统中是借助于索引文件实现的。,1、什么是索引,索引关键字的值、记录号,(教科书P132),按成绩降序排列,索引文件,Visual FoxPro系统提供了四种不同的索引类型,它们分别是:,2、索引的类型,主索引:仅适用于数据库表,不允许关键字段有重复值,一个数据表只能建一个主索引。候选索引:不

2、允许索引关键字段有重复值 普通索引:最常用的索引类型,无任何限制唯一索引:允许索引关键字段有重复值,3、索引文件的类型,(1)结构化复合索引文件结构化复合索引文件(.cdx)可以在同一个文件中包含多个索引,其中每个索引称为索引标识。,更重要的是,对于结构复合索引,无论何时打开表文件,该索引都会自动打开。其文件名与表名相同,一个表文件只产生一个结构化复合索引文件。,(2)独立复合索引文件(略),(3)单索引文件(略)单索引文件是每个索引存放在一个独立的文件(.idx)中。,4、索引的建立,(教科书P133-134),Index on tag ascending|descending ,结构化复合

3、索引文件的建立(命令方式),特别注意:建立索引时,当涉及到两个或两个以上的不同类型的字段时: 1)顺序若相同,则将非字符型转换为字符型,然后用“+”连接成一个字符表达式。,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(入学总分,5,1)+dtoc(出生日期,1) tag x1,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(入学总分,5,1)+dtoc(出生日期,1) tag x1 desc,2)顺序若不同,则以字符型字段的顺序为准,若数字型字段的顺序与字符型不同,则用一个较大数减去该字段,再转化为字符型;若日期型字段的顺序与字符型不同

4、,则用一个较大的日期减去该字段,再转化为字符型,然后用“+”连接成一个字符表达式。,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(1000-入学总分,5,1)+dtoc(出生日期,1) tag x1,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(入学总分,5,1)+str(date()-出生日期) tag x1 desc,5、索引的使用,一个表文件可以建立多个索引,在操作中可以同时打开多个索引,但是任何时候只有一个索引起作用。索引依赖于表文件而存在,它随表的关闭而自动关闭。,当前起作用的索引标识称为主控索引。要使用索引必须满足以下条件

5、:打开表;确定主控索引;,set order to tag ,(1)确定主控索引,命令格式:,(教科书P136-137),(2)删除索引,delete tag all | ,(3)索引更新,使用索引文件后,虽然表中各记录的物理顺序并未改变。但记录指针不再按物理顺序移动,而是按主控索引文件中记录的逻辑顺序移动,于是整个表中的记录是按索引关键表达式值排序的效果。使用索引文件时,还要特别注意以下几点:(1)在使用GO命令时,GO 使记录指针指向具体的物理记录号,而与索引无关,而GO TOP|BOTTOM将使记录指针指向逻辑首或逻辑尾记录,这时GO TOP不再等同于GO 1。(2)SKIP命令按逻辑顺

6、序移动记录指针。(3)表被打开后,记录指针位于TOP位置。,多工作区操作,若要使用多个表,就要使用多个工作区。一个工作区是一个编号区域,它标识一个已打开的表。在应用程序中通常通过使用工作区号和工作区别名来标识。,(教科书P138-139),1、工作区号Visual foxPro提供了32767个工作区,编号从1到32767。每个工作区只允许打开一个表,一个表只能在一个工作区打开,系统默认的工作区为1号工作区。,2、别名 (1)前十个工作区除了可用110来标识外,还可用AJ来表示工作区的别名。(2)定义别名,use alias ,格式:,3、选择当前工作区,select |,如没有给表定义别名,

7、则可以用数据表名作为别名。,sele 0 表示选定当前未使用的最小号工作区。,use in |,不改变当前工作区,引用非当前工作区表的字段必须冠以别名,引用格式为: 别名.字段名别名-字段名,bof():文件开始的测试函数eof():文件结束的测试函数recno():返回当前记录号select():返回当前工作区区号,4、工作区常用函数,建立表间的关联关系 (临时关系),要在两个或两个以上的表之间进行数据操作时,通常有关联和连接两种方法。,1、关联的概念每个工作区打开的表中都存在一个记录指针,指针指向的记录是当前记录,如果表之间没有关系,则各个表的记录指针相互独立,即当前工作区指针移动时,其他

8、工作区的指针不移动。,所谓关联,就是让不同工作区数据表的记录指针建立一种临时的联动关系。使一个表的记录指针移动时,能带动另一个表的记录指针按一定的条件作相应地移动。前者称为关联表(主动表、父表),后者称为被关联表(被动表、子表),建立表间的关联建立数据库文件中表间关联, 一是要保证建立关系的表具有相同的字段值(关键字值); 二是子表要以该字段建立索引。,建立两个表之间的“一对一”和“多对一”关联的步骤:找到两个表中能够建立关联的字段(字段名可以不同,类型、宽度、小数位数必须相同)根据关键字值确定父表,再确定子表;选择一个工作区,打开子表,建立索引;选择另一个工作区,打开父表建立关联。,有重复值

9、为父表,set rela to into , into additive,说明:发出关联命令所在工作区的表是父表,建立关联的命令,(教科书P139),子表必须对关联字段索引 是关联的关键字不同名的字段只要类型和数值相同也可建立关联。 关联后,父表指针移动带动子表指针移动;而如果当前工作区是子表,其指针移动,父表指针不会移动。,additive 一般用于三个或三个以上的表之间建立多重关联,第2、3个关联使用该选项。 关联后,当前工作区字段名可以直接使用,子表的字段在使用时要加“别名.字段名”。 set rela to recn()+N into 把记录号作关键字建立关联。(例子见后) 关闭或重新

10、打开数据表,关联就会消失。(故称为临时关系),BB AA(利用记录号建关联),Recno()+2,Sele 1 Use AA Sele 2 Use BB Set rela to Recno()+2 into A(或 AA或1),BB AA (利用关键字相等建关联),Sele 1 Use AAinde on 字段 tag zd Sele 2 Use BB Set rela to 字段 into A(或 AA或1),字段,AA BB CC 或 AA BBAA CC,字段1,字段2,字段1,字段2,Sele 1 Use CCinde on 字段2 tag zd Sele 2 Use BB Set r

11、ela to 字段2 into A(或 CC或1) inde on 字段1 tag zd Sele 3 Use AA Set rela to 字段1 into B(或 BB或2)ADDI,Sele 1 Use CCinde on 字段1 tag zd Sele 2 Use BB inde on 字段2 tag zd Sele 3 Use AA Set rela to 字段1 into A(或 CC或1) Set rela to 字段2 into B(或 BB或2)ADDI,Ex1:显示借阅图书的书名,借阅图书的读者姓名和借阅日期。,表格“grid1”的Init事件代码: set safety

12、offselect 1use 图书index on 书号 tag shselect 2use 读者index on 读者编号 tag bhselect 3use 借阅set relation to 书号 into aset relation to 读者编号 into b additivecopy to temp fields a.书名,b.读者姓名,借阅日期thisform.grid1.recordsourcetype=0thisform.grid1.recordsource=“temp“,表单的UnLoad事件代码:close all,产生一个新的数据表,1.顺序查询(条件定位),locat

13、e 范围 for ,命令格式:,继续查找命令,命令格式:,continue,不能单独使用,(教科书P150),数据表的查询,【例6-1】在读者信息表中逐条显示男读者信息。,表单Form1的Init事件代码如下: LOCATE FOR 性别=“男”“下一条”按钮的Click事件代码如下: Continue if found()或 not eof()thisform.refresh elsemessagebox(“已查询完毕!“)this.enabled=.f. endif,命令按钮呈灰色显示,ex2.设计如图所示表单,将下表所示的产品信息数据表 (CP.DBF)添加到表单的数据环境中。,表单运行

14、后在文本框Text1中输入产品编号,按回车键后,将显示该产品的名称、规格及单价。编写文本框TEXT1的VALID事件代码。,文本框text1的“Valid”事件代码如下: x=alltrim(thisform.text1.value) locate for 产品编号=x thisform.text2.value=商品名称 thisform.text3.value=规格 thisform.text4.value=单价,ex3.设计如图(左)所示表单,将表所示教师表(JS.DBF)添加到表单的数据环境中。,表单运行后,在组合框combo1中选择教师编号(其中combo1中显示的是教师编号的字段值)

15、,单击“查询”按钮,将按如图(右)所示显示该教师的信息。编写“查询”按钮的Click事件代码。,“查询”按钮的“Click”事件代码如下: locate for 教师编号=bo1.value thisform.text1.value=姓名 thisform.text2.value=性别 thisform.text3.value=职称 thisform.label5.caption=“出生年月:“+ str(year(生日),4)+“年“+str(month(生日),2)+“月“,ex4.有两个数据表: 销售员表(EMP.DBF)和销售业绩表 (SALE.DBF)。其数据如表所示:,销售员表 (EMP.DBF),销售业绩表 (SALE.DBF),设计如图(左)所示的表单,将销售员表 (EMP.DBF)和销售业绩表(SALE.DBF)添加到 表单的数据环境中,并且设置两个表的exclusive 属性为.t.。,表单form1的load事件代码如下: select emp index on 编号 tag bh select sale set relation to 编号 into emp 表单运行后,在组合框(与CEL.DBF的编号字段绑定)中选择一个编号,在标签label2中显示如图(右)所示。编写组合框combo1的InteractiveChange事件代码。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号