资源描述
*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,7,章 记录的定位与查询,7.1,记录的定位概念,无条件记录定位,:,goto,skip,有条件记录定位,:,直接(顺序)定位和索引(快速)定位,定位命令仅仅是对记录指针进行定位的一种操作,它并不能显示定位的记录内容。如要显示,则需要使用并且只能使用,Display,命令。,7.2,顺序,(,直接,),定位,所谓顺序定位是指在表中从第一条记录开始,按照顺序搜索表,把记录指针定位在满足条件的,第一条,记录上。,顺序定位适合于,复杂条件,或,小型表,的定位。,命令格式,:,1),找首条:,Locate For ,范围,2),找后续(继续查询):,Continue,&,按照,Locate,指定的条件继续定位下一条记录,参数说明:,Locate,是直接在表文件(不需要对表进行排序或索引)中,按照,范围,、,For,从表文件的头至尾顺序来定位符合条件的,第一条,记录。如果存在多条满足,For,的记录,可以使用,Continue,命令继续定位下一条记录。,Continue,命令的作用是从当前相匹配记录的,下一条,记录位置开始,继续执行由,Locate,命令指定的范围、满足条件的下一条记录的定位操作。,Continue,只能和,Locate,配套使用,,不能单独使用,。, 如果,Locate,命令定位成功,即在当前表中找到了一条与条件相匹配的记录,就将记录指针指向该条记录。这时,,Found(),函数返回逻辑真,.T.,,,Eof,(),函数返回逻辑假,.F.,。,Recno,(),函数返回相匹配记录的记录号。,如果,Locate,命令定位不成功,即在当前表中没有找到任何一条与条件相匹配的记录,则,Found(),函数返回逻辑假,.F.,,,Eof,(),函数返回逻辑真,.T,,,Recno,(),函数返回,Recc()+1,的值。,Locate,命令支持模糊查询,也就是说,只要知道查询数据的部分内容时(主要指,字符型数据,)就可以进行查询,实现模糊查询要用到包含函数,$,。,例,:,在学生挡案表,.Dbf,表中,定位显示班级为“,99212”,并,且籍贯为“浙江”的记录。,Use,学生挡案表,Locate For,班级,=”99212”.And.,籍贯,=”,浙江”,Display &,显示第一条满足条件的记录,? Found() &,返回逻辑真,.T.,?,Eof,() &,返回逻辑假,.F,Continue,Display &,无记录显示,? Found() &,返回逻辑假,.F.,?,Eof,() &,返回逻辑真,.T,Use,例,:,在学生挡案表,.Dbf,表中,定位计算机系,99,级或,98,级并且年龄小于,20,的学生。注:学号的第一、二位表示年级,第三位为,“,2,”,的表示计算机系。,Use,学生挡案表,Locate For (Subs(,学号,1,3)=,”,992,”,.Or. Subs(,学号,1,3)=,”,982,”,).And.,年龄,20,?Found() &,如,Found(),函数为,.T.,?,Eof,() &,Eof,(),的结果是什么?,Display &,是否有记录显示?,Continue,&,继续定位下一个记录,如果不用,Continue,而用,Locate For (Subs(,学号,1,3)=,”,992,”,.Or.Subs(,学号,1,3)=,”,982,”,).And.,年龄,23,,其结果会如何,?,?Found() & Found(),函数为,.F,说明什么?,?,Eof,() &,Eof,(),的结果是什么?,例,:,在学生挡案表,.Dbf,表中,查找姓,“,王,”,的学生。,Use,学生挡案表,Locate For Subs(,姓名,1,2)=,”,王,”,&,如果用,Locate For ,王,$,姓名可能会产生什么问题,?,Display &,显示查询结果,Continue &,继续定位查询下一个记录,?Found() & Found,(),函数为,.T.,Display &,显示第二条,”,王,”,姓记录,Continue,&,“,End Of Locate Scope,”,显示定位结束,?,Eof,() &,Eof,(),函数为,.T.,7.3,索引定位,索引定位是一种快速定位记录的方法,利用索引定位将明显提高查询效率,适用于大型表的查询。,它要求数据表文件的记录是有序的,,所以,事先必须对数据表文件进行索引,,而且要求查询内容所在的字段或表达式必须是索引文件的索引关键字段或表达式。,(,查什么按什么索引,),索引定位有两种命令格式:,格式一:,Seek ,格式二:,Find ,1.FIND,命令,(1),命令方式,命令格式,:,FIND,/,功能,:,在打开的以查询内容所在字段为索引关键字的索引文件中,快速查找关键字段,等于,或,的,第一个,记录。,说明:, 执行命令前,必须首先,建立以查询内容所在字段或表达式为索引关键字的索引文件,,若已存在则打开该索引文件,且将其设置为主索引。,FIND,命令通常适用于,字符数据类型及数值型,,字符串中的字符,可以不用定界符,。, 可以用内存变量代替字符串作为查找的数据,但,必须用宏代换函数(,&,),。, 如果查找成功,则把记录指针指向逻辑顺序中第一条符合条件的记录,且,FOUND,(),函数的值为,.T.,,,否则,记录指针指向文件未尾,,FOUND,(),函数的值为,.F.,。,例题:,例题,1:,在学生档案中,用,FIND,命令查找学号为,“,9832101,”,的学生。,USE,学生档案表,index on,学号,to,xh,FIND 9832101,DISPLAY,例题,2.,在学生档案表,.DBF,数据表文件中,以变量的形式,用,FIND,命令查找姓名为,“,刘丽红,”,的学生,(,以姓名为索引关键字的索引文件,XM.IDX,已建立,),。,2.SEEK,命令,FIND,命令不能对日期型和逻辑型的数据进行查找,在某些情况下使用起来不方便,为此,系统中又提供了功能更强的,SEEK,命令。,格式:,SEEK ,功能:在打开的以查询内容所在字段为索引关键字的索引文件中,快速查找关键字段,等于,值的第一个记录。,其中:,(,1,),SEEK,命令适用于一切数据类型,(,C,、,N,、,D,、,L,),,,表达式可以是常量、变量和函数所组成,但必须与索引表达式一致。,表达式为,C,、,D,、,L,(,.T.,,,.F.,),常量时,必须使用相应的定界符,,如:,“,”,、, ,。,(,2,)表达式为变量时,要直接使用,,不,需要用宏代换函数,。,(3),如果查找成功,则把记录指针指向逻辑顺序中第一条符合条件的记录,且,FOUND,(),函数的值为,.T.,,,否则,记录指针指向文件未尾,,FOUND,(),函数的值为,.F.,。,例题,3,:在学生档案,XSDA.DBF,数据表文件中,用,SEEK,命令查找学号为“,9921201”,的学生,(,以学号为索引关键字的索引文件,XH.IDX,已建立,),。,USE,xsda,INDEX,xh,&,打开以学号为索引关键字的索引文件,XH.IDX,SEEK “9921201” &,必须使用定界符,DISPLAY,例题,4.,在学生档案表,.DBF,数据表文件中,以变量的形式,用,SEEK,命令查找姓名为,“,刘丽红,”,的学生,(,以姓名为索引关键字的索引文件,XM.IDX,已建立,),。,USE,学生档案表,INDEX,xm,STORE,“,刘丽红,”,TO a1,SEEK a1 &,不需使用宏代换函数,DISPLAY,例题,5.,在学生档案,XSDA.DBF,数据表文件中,以常量的方式查找班级为,“,98321,”,、籍贯为,“,浙江,”,的学生。,小结,:,LOCATE,和,SEEK,、,FIND,都是用于在数据表文件中查询,定位记录指针,即把记录指针定位在满足条件的记录,上。特别强调:仅仅是定位记录指针。,如要显示定位的,记录内容,则需要用,DISPLAY,命令。,(2) LOCATE,和,SEEK,、,FIND,的不同之处:,LOCATE,是顺序查询定位,可以直接利用原数据表进行,定位操作,而,SEEK,、,FIND,命令是索引查询定位,必须,首先对原数据表按定位数据所在字段或表达式进行索,引,建立相应的索引文件或打开相应的索引文件、索引,标识的前提下才能进行定位操作。,LOCATE,和,CONTINUE,相配合可以连续查询定位多条记,录,而,SEEK,、,FIND,只能查询定位单条记录。,LOCATE,是用条件表达式的形式来定位,而,SEEK,、,FIND,是用常量、变量或变量组成的表达式的形式来定位。,(3) SEEK,和,FIND,的不同之处:,SEEK,命令适用于一切数据类型,(C,、,N,、,D,、,L),,,但若为,C,、,D,、,L,常量时,必须使用相应的定界符,如:,“,”,、, ,、,。表达式为变量时,要直接使用,不需要用宏代换函数。,FIND,命令通常适用于字符数据类型,不可用于日期型和逻辑型数据类型。表达式为字符常量时,不须使用相应的定界符。表达式为变量时,不可直接使用,必须使用宏代换函数。,
展开阅读全文