《(精品)VFP第8部分(排序索引及多表操作)zxl.ppt》由会员分享,可在线阅读,更多相关《(精品)VFP第8部分(排序索引及多表操作)zxl.ppt(66页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、作业中的问题作业中的问题1.use student1.use student copy to student88 copy to student88 list fields list fields 学号学号,姓名姓名,出生日期出生日期,入学总分入学总分 for for 性别性别=女女 and and 出生日期出生日期=1988=1988 2.set 2.set defadefa to d:shiyan-8 to d:shiyan-8 use use jsxxjsxx alter table alter table jsxxjsxx add add 简历简历 m m use use3.3.cre
2、atcreat table table jsgzjsgz(工号工号/C/8,/C/8,基本工资基本工资/N/7/2,/N/7/2,津贴津贴/N/6/2,/N/6/2,奖奖金金/N/6/2,/N/6/2,水电水电/N/6/2,/N/6/2,住房公积金住房公积金/N/6/2,/N/6/2,实发工资实发工资/N/7/2)/N/7/2)4.4.姓名中包含姓名中包含“龙龙”字的?字的?5.5.倒数条记录倒数条记录6.6.表中表中6 61010条记录条记录7.7.逻辑删除与物理删除逻辑删除与物理删除第八讲第八讲第八讲第八讲 排序索引及多表操作排序索引及多表操作排序索引及多表操作排序索引及多表操作表的排序表
3、的排序表的索引表的索引多表操作多表操作表间临时关联表间临时关联表间永久关联表间永久关联设置参照完整性设置参照完整性内容提要内容提要数据表的分类排序数据表的分类排序 命令格式命令格式sorttoon/a/d/c产生的表是关闭的产生的表是关闭的(教科书(教科书P73)分类排序有什么缺点数据表的索引排序数据表的索引排序 索引是按索引关键字表达式的值索引是按索引关键字表达式的值使数据表中的记录有序排列的一种使数据表中的记录有序排列的一种技术,在技术,在Visual FoxProVisual FoxPro系统中是借系统中是借助于助于索引文件索引文件实现的。实现的。1 1、什么是索引、什么是索引索引关键字
4、的值、记录号(教科书(教科书P74)Visual Visual FoxProFoxPro系系统统提提供供了了四四种种不不同同的的索索引引类类型型,它它们们分别是:分别是:2 2、索引的类型、索引的类型主主索索引引:仅适用于数据库表,不允许关键字段有重复值,一个数据表只能建一个主索引。候候选选索索引引:不允许索引关键字段有重复值普通索引普通索引:最常用的索引类型,无任何限制 唯一索引唯一索引:允许索引关键字段有重复值 Visual FoxProVisual FoxPro系统支持单系统支持单索引文件(索引文件(.idxidx)和复合索和复合索引文件(引文件(.cdxcdx)。)。3 3、索引文件的
5、类型、索引文件的类型 (1 1)单索引文件(略)单索引文件(略)单索引文件是每个索引存放在一单索引文件是每个索引存放在一个独立的文件(个独立的文件(.idxidx)中。中。(2 2)结构化复合索引文件)结构化复合索引文件 结构化复合索引文件(结构化复合索引文件(.cdxcdx)可以可以在同一个文件中包含多个索引,其中在同一个文件中包含多个索引,其中每个索引称为每个索引称为索引标识索引标识。更重要的是,对于结构复合索引,更重要的是,对于结构复合索引,无论何时打开表文件,该索引都会无论何时打开表文件,该索引都会自动打开。自动打开。其文件名与表名相同其文件名与表名相同,一个表文件一个表文件只产生一个
6、结构化复合索引文件只产生一个结构化复合索引文件。(3 3)独立复合索引文件(略)独立复合索引文件(略)4 4、索引的建立、索引的建立(教科书(教科书P75)Indexontagascending|descending自动产生与表同名的.CDX文件结构化复合索引文件的建立结构化复合索引文件的建立(命令方式命令方式)特别注意:特别注意:建立索引时,当建立索引时,当涉及到两个或两个以上的不涉及到两个或两个以上的不同类型的字段时:同类型的字段时:1)顺序若相同,则将非字符型转换)顺序若相同,则将非字符型转换为字符型,然后用为字符型,然后用“+”连接成一连接成一个字符表达式。个字符表达式。2)顺序若不同
7、,则以字符型字段)顺序若不同,则以字符型字段的顺序为准,的顺序为准,若数字型字段的顺若数字型字段的顺序与字符型不同,则用一个较大序与字符型不同,则用一个较大数减去该字段,再转化为字符型数减去该字段,再转化为字符型;若日期型字段的顺序与字符型不若日期型字段的顺序与字符型不同,则用一个较大的日期减去该同,则用一个较大的日期减去该字段,再转化为字符型字段,再转化为字符型,然后用,然后用“+”连接成一个字符表达式。连接成一个字符表达式。【例例】就学生表建立结构复合索引文件,其中就学生表建立结构复合索引文件,其中包含包含2 2个索引:个索引:(1 1)按学号的升序排列,不允许有编号相同的)按学号的升序排
8、列,不允许有编号相同的记录。记录。(2 2)先按性别升序,性别相同再按入学成绩降)先按性别升序,性别相同再按入学成绩降序排列。序排列。USE USE 学生学生 INDEX ON INDEX ON 学号学号 TAG sy1 UNIQUETAG sy1 UNIQUE INDEX ON INDEX ON 性别性别+STR(1000-+STR(1000-入学成绩入学成绩)TAG sy2)TAG sy2在表设计器中建立索引在表设计器中建立索引表表设计器中的设计器中的“索引索引”选项卡选项卡5 5、索引的使用、索引的使用 一个表文件可以建立多个索引,一个表文件可以建立多个索引,在操作中可以同时打开多个索引
9、,在操作中可以同时打开多个索引,但是但是任何时候只有一个索引起作用任何时候只有一个索引起作用。索引依赖于表文件而存在索引依赖于表文件而存在,它,它随表的关闭而自动关闭。随表的关闭而自动关闭。当前起作用的索引标识称为主控当前起作用的索引标识称为主控索引索引。要使用索引必须满足以下条件:要使用索引必须满足以下条件:打开表;打开表;确定主控索引;确定主控索引;setorderto单索引文件名单索引文件名|索引文索引文件顺序号件顺序号|tag(1)确定主控索引)确定主控索引命令格式:命令格式:(教科书(教科书P77)(2)删除索引)删除索引deletetagall|(3)索引更新)索引更新自动更新自动
10、更新 使用索引文件后,虽然表中各记录的物理顺序并使用索引文件后,虽然表中各记录的物理顺序并未改变。但未改变。但记录指针不再按物理顺序移动,而是按主记录指针不再按物理顺序移动,而是按主控索引文件中记录的逻辑顺序移动控索引文件中记录的逻辑顺序移动,于是整个表中的,于是整个表中的记录是按索引关键表达式值排序的效果。记录是按索引关键表达式值排序的效果。使用索引文件时,还要特别注意以下几点:使用索引文件时,还要特别注意以下几点:(1 1)在使用)在使用GOGO命令时,命令时,GO GO 使记录指针使记录指针指向具体的物理记录号,而与索引无关,而指向具体的物理记录号,而与索引无关,而GO GO TOP|B
11、OTTOMTOP|BOTTOM将使记录指针指向逻辑首或逻辑尾记录,将使记录指针指向逻辑首或逻辑尾记录,这时这时GO TOPGO TOP不再等同于不再等同于GO 1GO 1。(2 2)SKIPSKIP命令按逻辑顺序移动记录指针。命令按逻辑顺序移动记录指针。(3 3)表被打开后,记录指针位于)表被打开后,记录指针位于TOPTOP位置,而不一定位置,而不一定指向指向1 1号记录号记录。【例例】当索引起作用时,分析记录指针的移动当索引起作用时,分析记录指针的移动规律。规律。USE USE 学生学生 INDEX ON INDEX ON 入学成绩入学成绩 TAG sy3TAG sy3 GO 6 GO 6?
12、RECNO(),?RECNO(),姓名姓名&显示显示6 6 李勤奋李勤奋 SKIPSKIP?RECNO(),?RECNO(),姓名姓名&显示显示5 5 欧阳天地欧阳天地多表操作多表操作 若要使用多个表,就要使用多个若要使用多个表,就要使用多个工作区。一个工作区是一个编号区工作区。一个工作区是一个编号区域,它标识一个已打开的表。域,它标识一个已打开的表。在应在应用程序中通常通过使用用程序中通常通过使用工作区号工作区号和和工作区别名工作区别名来标识。来标识。(教科书(教科书P82)1 1、工作区号、工作区号 Visual Visual foxProfoxPro提供了提供了3276732767个个工
13、作区,编号从工作区,编号从1 1到到3276732767。每个工作区只允许打开一个表,每个工作区只允许打开一个表,一个表只能在一个工作区打开,系一个表只能在一个工作区打开,系统默认的工作区为统默认的工作区为1 1号工作区。号工作区。2 2、别名、别名(1 1)前十个工作区除了可用)前十个工作区除了可用1 11010来标来标识外,还可用识外,还可用A AJ J来表示来表示工作区的别名工作区的别名。(2 2)定义别名)定义别名use use alias alias 格式:格式:3 3、选择当前工作区、选择当前工作区select|如没有给表定义别名,如没有给表定义别名,则可以用数据表名作则可以用数据
14、表名作为别名。为别名。selesele 0 0 表示选定当前未使用的最表示选定当前未使用的最小号工作区。小号工作区。use use in in|不改变当前工作区不改变当前工作区【例例】在不同的工作区分别打开在不同的工作区分别打开dab.dbfdab.dbf、xkcjb.dbfxkcjb.dbf和和kcb.dbfkcb.dbf 3 3个表,命令序列如下:个表,命令序列如下:CLOSE ALL&CLOSE ALL&关闭所有打开的文件关闭所有打开的文件SELECT 2SELECT 2USE dab&USE dab&选择选择2 2号工作区打开号工作区打开dabdab表表SELECT CSELECT C
15、USE USE kcbkcb&选择选择3 3号工作区打开号工作区打开kcbkcb表表USE USE xkcjbxkcjb IN 5&IN 5&选择选择5 5号工作区打开号工作区打开xkcjbxkcjb表表 使用使用“数据工作期数据工作期”通过该窗口,不仅可以直接查看工作区的使用情通过该窗口,不仅可以直接查看工作区的使用情况,还能够打开、浏览或关闭指定的表。况,还能够打开、浏览或关闭指定的表。注意:可以在注意:可以在【命令命令】窗口中输入窗口中输入SETSET命令来打开命令来打开【数据工作期数据工作期】窗口。窗口。引用非当前工作区表的字段必须引用非当前工作区表的字段必须冠以别名,引用格式为:冠以
16、别名,引用格式为:别名别名.字段名字段名别名别名-字段名字段名【例例】在在1 1号工作区打开号工作区打开dabdab表,在表,在2 2号工作区号工作区打开打开xkcjbxkcjb表;当前工作区为表;当前工作区为1 1号,显示号,显示xkcjbxkcjb表中当前记录的学号、课程号和成绩字段的值。表中当前记录的学号、课程号和成绩字段的值。命令序列如下:命令序列如下:CLOSE ALL&CLOSE ALL&关闭所有打开的文件关闭所有打开的文件SELECT 1SELECT 1USE dab&USE dab&选择选择1 1号工作区打开号工作区打开dabdab表表USE USE xkcjbxkcjb IN
17、 2&IN 2&在在2 2号工作区打开号工作区打开xkcjbxkcjb表,当表,当前工作区为前工作区为1 1号号?xkcjbxkcjb.学号学号,xkcjbxkcjb.课程号课程号,xkcjbxkcjb-成绩成绩 bofbof():文件开始的测试函数:文件开始的测试函数 eofeof():文件结束的测试函数:文件结束的测试函数 recnorecno():返回当前记录号:返回当前记录号 selesele()():返回当前工作区区号:返回当前工作区区号 4 4、工作区常用函数、工作区常用函数建立表间的关联关系建立表间的关联关系(临时关系)(临时关系)要在两个或两个以上的表之要在两个或两个以上的表之
18、间进行数据操作时,通常有间进行数据操作时,通常有关关联和连接联和连接两种方法。两种方法。1 1、关联的概念、关联的概念 每个工作区打开的表中都存在一每个工作区打开的表中都存在一个记录指针,指针指向的记录是当个记录指针,指针指向的记录是当前记录,如果表之间没有关系,则前记录,如果表之间没有关系,则各个表的记录指针各个表的记录指针相互独立相互独立,即当,即当前工作区指针移动时,其他工作区前工作区指针移动时,其他工作区的指针不移动。的指针不移动。所谓关联,就是令不同工作区数据表的所谓关联,就是令不同工作区数据表的记录指针建立一种临时的联动关系。使记录指针建立一种临时的联动关系。使一个表的记录指针移动
19、时,能带动另一一个表的记录指针移动时,能带动另一个表的记录指针按一定的条件作相应地个表的记录指针按一定的条件作相应地移动。移动。前者称为关联表(主动表、父表)前者称为关联表(主动表、父表),后者称为被关联表(被动表、子表),后者称为被关联表(被动表、子表)关键字为唯一值关键字为唯一值 关键字为唯一值关键字为唯一值 一一关键字为重复值关键字为重复值 关键字为唯一值关键字为唯一值 多一关键字为唯一值关键字为唯一值 关键字为重复值关键字为重复值 一多关键字为重复值关键字为重复值 关键字为重复值关键字为重复值 多多父表父表子表子表主动被动建立表间的建立表间的临时关联临时关联第一、要保证建立关系的表具有
20、相同第一、要保证建立关系的表具有相同的的字段值(关键字值)字段值(关键字值);第二、子表要以该字段建立第二、子表要以该字段建立索引索引。建立两个表之间的建立两个表之间的“一对一一对一”和和“多多对一对一”临时关联的步骤:临时关联的步骤:找到两个表中能够建立关联的字找到两个表中能够建立关联的字段(段(字段名可以不同,类型、宽度、小字段名可以不同,类型、宽度、小数位数必须相同数位数必须相同)根据关键字值确定父表,再确定根据关键字值确定父表,再确定子表;子表;先打开子表,建立索引;先打开子表,建立索引;最后打开父表建立关联。最后打开父表建立关联。有重复值为父表set set relarela to
21、to into into 1,into into additiveN additive说明:说明:发出关联命令所在工作区的发出关联命令所在工作区的表是父表表是父表建立关联的命令建立关联的命令(教科书(教科书P83)子表必须对关联字段索引子表必须对关联字段索引 是关联的关键字是关联的关键字 不同名的字段只要类型和数值相同也不同名的字段只要类型和数值相同也可建立关联可建立关联。关联后,父表指针移动带动子表指针关联后,父表指针移动带动子表指针移动;而移动;而如果当前工作区是子表,其指如果当前工作区是子表,其指针移动,父表指针不会移动针移动,父表指针不会移动。additive additive 一般用
22、于三个或三个一般用于三个或三个以上的表之间建立多重关联,第以上的表之间建立多重关联,第2 2、33个关联使用该选项。个关联使用该选项。关联后,当前工作区字段名可以关联后,当前工作区字段名可以直接使用,子表的字段在使用时要直接使用,子表的字段在使用时要加加“别名别名.字段名字段名”。set set relarela to to recn()+Nrecn()+N into into 把记录号作关键字建立关联把记录号作关键字建立关联。BB AASele1UseAAindeon字段字段tagzdSele2UseBBSetrelato字段字段intoA(或或AA或或1)字段字段Sele0UseAAind
23、eon字段字段tagzdSele0UseBBSetrelato字段字段intoAAAABBCC或或AABBAACC字段字段1字段字段2字段字段13个表个表建建关联关联?字段字段2(见教科书第(见教科书第84页例页例4.22)set skip to set skip to ,2 一般不用用在用在setrelation命令之后命令之后,说明已建说明已建关联的性质为一多关系。关联的性质为一多关系。建立表间的一对多关系建立表间的一对多关系原则:原则:一般建立一般建立“多对一多对一”或或“一对一一对一”的关联;的关联;一般如果要求显示的结果是按照某一般如果要求显示的结果是按照某个字段值的顺序排列,则包含
24、该字段的个字段值的顺序排列,则包含该字段的表应作父表。表应作父表。例:在学生表和选课表中,显示成绩80分的学生的学号、姓名、所学课程的课程号和成绩。setsafetyoffcloseallclearselect1use学生学生aliasxsindexon学号学号tagxhselect2use选课选课setrelationto学号学号intoxs系统环境设置表环境设置listfor成绩成绩tnoSELECTuser?tno+SPACE(2)+unmae+SPACE(2)+STR(mm,3)ENDSCANRETURN123u175456u2110789u3300user.dbfuser.dbf的内
25、容如下的内容如下charge.dbfcharge.dbf的内容如下的内容如下tnotnounameunameaddraddrtnotnotmonthtmonthmoneymoney123123u1u1a1a14564561 1100100456456u2u2a2a21231232 29090789789u3u3a3a34564565 51501507897891 13003001231231 160604564563 38080例:已经建立图书管理关系数据模型,包括以下三个数据表:例:已经建立图书管理关系数据模型,包括以下三个数据表:图书(总编号图书(总编号/C,分类号,分类号/C,书名,书名
26、/C,作者,作者/C,出版单位,出版单位/C,单价,单价/N)读者(借书证号读者(借书证号/C,单位,单位/C,姓名,姓名/C,性别,性别/C,职称,职称/C,地,地址址/C)借阅(借书证号借阅(借书证号/C,总编号,总编号/C,借书日期,借书日期/D)要求:同时显示借书读者姓名,所在单位,书名,单价,借要求:同时显示借书读者姓名,所在单位,书名,单价,借书日期书日期分析:要显示的信息分布在以下三个表:姓名,单位(读者分析:要显示的信息分布在以下三个表:姓名,单位(读者表);书名,单价(图书表);借书日期(借阅表)表);书名,单价(图书表);借书日期(借阅表)关联关系如下:关联关系如下:图书图
27、书.DBF以以“总编号总编号”为关联条件为关联条件借阅借阅.DBF以以“借书证借书证号号”为关联条件为关联条件读者读者.DBFSELEAUSE图书图书INDEXON总编号总编号TAGZBHSELEBUSE读者读者INDEXON借书证号借书证号TOJSHSELECUSE借阅借阅SETRELATIONTO总编号总编号INTOASETRELATIONTO借书证号借书证号INTOBADDITIVELISTA.书名,书名,B.姓名,姓名,B.单位,单位,A.单价,借书日期单价,借书日期CLOSEALL有有报报刊刊杂杂志志表表文文件件ZZK.DBFZZK.DBF,其其内内容容如如下:下:报刊代号报刊代号
28、报刊名称报刊名称 季价季价 8282 518 518 今日电子今日电子 18.0018.00 1 1 170 170 中国电脑教育报中国电脑教育报 12.00 12.00 4 4 542 542 电脑技术电脑技术 14.4014.40 77 77 19 19 电脑报电脑报 18.00 18.00 61 61 74 74 软件报软件报 7.20 7.20 1 1 518 518 计算机世界计算机世界 45.00 45.00 各各类类报报刊刊定定阅阅时时间间均均为为一一年年,即即4 4个个季季度。度。有报刊杂志订阅表文件有报刊杂志订阅表文件DY.DBF,其,其内容如下:内容如下:报刊代号报刊代号部
29、门部门数量数量金额金额1 518计算中心计算中心182 518电教中心电教中心177 19教务处教务处21 170学生处学生处377 19计算中心计算中心11 170教务处教务处11 170计算中心计算中心277 19电教中心电教中心14 542计算中心计算中心161 74教务处教务处177 19学生处学生处2实验教材实验教材44()()要求:根据要求:根据ZZK.DBF的的“季价季价”和和DY.DBF的的“数数量量”字段,计算出字段,计算出DY.DBF的金额值(金额的金额值(金额=季价季价*4*数量)数量)clearseleausezzkindexon报刊代号报刊代号tagdhselebus
30、edysetrelato报刊代号报刊代号intoareplaall金额金额witha.季价季价*4*数量数量Listcloseall某电信局电话自动计费表某电信局电话自动计费表JF.DBFJF.DBF,其内容如下:其内容如下:机号机号 日期日期 接通时间接通时间 挂断时间挂断时间 拨打号码拨打号码 通话时间通话时间68726666 2002/06/10 11:31 11:36 62905414 68726666 2002/06/10 11:31 11:36 62905414 65867688 2002/06/15 10:41 10:50 65441788 65867688 2002/06/15
31、 10:41 10:50 65441788 67700444 2002/06/04 11:58 12:15 67616357 67700444 2002/06/04 11:58 12:15 67616357 67789294 2002/06/02 12:06 12:45 67605414 67789294 2002/06/02 12:06 12:45 67605414 68809461 2002/06/10 22:35 22:42 68710832 68809461 2002/06/10 22:35 22:42 68710832 65867688 2002/06/08 14:40 15:10
32、65431111 65867688 2002/06/08 14:40 15:10 65431111 68726666 2002/06/09 18:40 19:07 68704512 68726666 2002/06/09 18:40 19:07 68704512 65867688 2002/06/13 17:42 18:02 65305416 65867688 2002/06/13 17:42 18:02 65305416 67789294 2002/06/10 21:10 21:35 68812454 67789294 2002/06/10 21:10 21:35 68812454 有用户信
33、息表有用户信息表YH.DBFYH.DBF,其内容如下:其内容如下:机号机号 单单 位位 通话时间通话时间 68726666 68726666 计算中心计算中心 65867688 65867688 外语系外语系 67700444 67700444 经济学系经济学系 67789294 67789294 计算中心计算中心 68809461 68809461 外语系外语系(假设电话的通话计费规定为:假设电话的通话计费规定为:0.100.10分分)要求:计算要求:计算“通话时间通话时间”,并将结果填入,并将结果填入JF.DBF中;中;理论理论作业作业(预习实验15任务1(1)(3)和实验书P1683、6题例子)(布置等级考试的上机题的建库建表建关系自己完成(提示:期末考试随机抽查一套)(建库建表建关系.doc)第第8次上机次上机 准备准备 熟悉熟悉vfp环境,默认路径的设置环境,默认路径的设置 学生下载建立永久关系的演示录像学生下载建立永久关系的演示录像 实验实验5 任务任务1(1)()(2)()(3)实验实验7 任务任务1 (本次实验课提交本次实验课提交)实验实验 6