3.4.4 索引的使用
一、设置主控索引
一张打开的表可以同时打开多个索引文件(独立或复合的),但要决定显示或访问表中记录的顺序,需要设置一个索引作为主控索引。它可以是一个独立索引(.idx)文件,也可以是复合索引(.cdx)文件中的一个标识(主控标识)。
在复合索引的多个索引中,在某一个时刻只有一个索引对表起作用,该索引标识称为主控索引标识。
结构复合索引文件是随表的打开而自动打开的,但复合索引中的任何一个索引都不会被自动设置为主控标识,此时,表中的记录仍按记录的物理顺序显示和访问。除非在打开表时指定某一索引标识为主控标识,或者在表打开后,再用其他命令设置主控索引。
1.打开表的同时指定主控索引
(1)指定复合索引文件的主控标识。命令格式如下:
USE表文件名ORDER[TAG]标识名[OF cdx文件名]
(2)指定独立索引文件为主控索引文件。命令格式如下:
USE表文件名ORDER idx文件名
(3)按照索引编号指定主控索引。命令格式如下:
USE表文件名ORDER索引编号
说明:索引编号的方式是,先编号.idx索引文件;然后对结构复合索引文件中的标识编号;最后对任何非结构复合索引文件的标识按其创建顺序编号。
2.打开表后再设置主控索引
在界面方式下,在“数据工作期”窗口中,单击“属性”按钮,打开“工作区属性”窗口,在“索引顺序”下拉列表中指定主控索引。
也可以用如下命令设置主控索引:
SET ORDER TO[索引编号|idx文件|[TAG]TAG名[Ofcdx文件]
[IN工作区|别名][ASCENDING|DESCENDING]
注意:如果发出SET ORDER TO 0命令,则所有索引文件仍保持打开。但是,表中所有记录的显示和访问顺序是记录号顺序而不是索引顺序。SET ORDER TO命令与SET ORDER TO 0命令完全一样。如果索引编号大于所有索引文件的索引标识数,则VFP显示出错。
二、有关索引的常用函数
(1)CDX(1)和NDX(1)函数
返回打开的结构复合索引文件件名或独立索引文件名(含路径)
(2)ORDER()和SYS(22)函数
返回主控索引标识或独立索引标识。
(3)TAG()函数
返回复合索引文件中的索引标识名。
三、快速定位记录
表建立了索引后,可以使用FIND、SEEK命令或SEEK()函数来进行定位。
(1)FIND命令
FIND命令在一张表中利用主控索引或指定索引搜索首次出现的一个记录,这个记录的索引关键字必须与指定的表达式相匹配。
一般格式:FIND字符串
说明:FIND只能在索引过的表中使用,并且只能搜索索引关键字;如找不到相匹配的关键字,则RECNO()将返回表中记录个数+1,FOUND()返回.F.,EOF()返回.T.。
字符串可以不加引号。
(2)SEEK命令
SEEK命令在一张表中利用主控索引或指定索引搜索首次出现的一个记录,这个记录的索引关键字必须与指定的表达式相匹配。
一般格式:SEEK表达式
说明:SEEK只能在索引过的表中使用,并且只能搜索索引关键字。如找不到相匹配的关键字,则RECNO()将返回表中记录个数+1,FOUND()返回.F.,EOF()返回.T.。
字符串一定要加引号。
例如:查询xs表中"李小林"的情况。
USE XS
SEEK"李小林"
DISP
也可以用FIND查询
FIND"李小林"或FIND李小林
DISP
结果为:显示"李小林"的情况。
如果
SEEK"李小林"
DISP
则不能显示“李小林”的情况。而是显示“未找到”,尽管“李小林”是存在的。因为这里主控索引错了。
(3)SEEK()函数
SEEK()函数的功能等价于先执行SEEK命令,再执行FOUND()函数。
另外,还可以利用索引建立表与表之间的永久关系和临时关系。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。