记录的定位与查询

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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