当CDX存在时,VFP索引并使用INDEX ON保存

时间:2018-09-11 15:35:10

标签: database indexing format visual-foxpro dbf

在使用VFP 9的过程中,我已经使用{p1}(DBF中的一列)为DBF文件建立了索引

group

,并且记录的顺序正确。但是,每当我关闭并重新打开DBF时,索引就会丢失( INDEX ON group TO group1 不会排序)。我在group.idx和dbf所在的同一文件夹中找到了一个.CDX文件,看起来它正在为DBF提供结构,但我不知道如何更改或查看它。

为解决此问题,我擦除了CDX文件(当然会弹出错误,因为它找不到.cdx),并使用group函数保留索引的DBF,但这不是真正的解决方案对于这个问题(这是一个论坛中提到的解决方案,但对我来说似乎并不是最好的方法)。 在关闭数据库之前,我也尝试在最后使用COPY TO函数,但是没有使索引保持数据集的工作状态。

除了上述提到的问题外,我在网络上找不到该问题的任何答案,因此,我非常感谢您提供任何评论以帮助我理解它并解决编码时的索引编制问题,当然,请确保关闭数据库时,索引和更改将保持不变。提前非常感谢!

其他问题:通常,当我建立索引时,我会为创建的IDX文件命名,但是当使用类似的DBF时,我会重复编码,并在具有相同idx名称的不同表上建立索引(所以我每次都覆盖.idx,以为它不再有用了。)但我真的不知道这将来是否会给我带来麻烦。

更新: 尽管我无法使用indexing和order命令直接解决特定DBF的问题,但我使用了PACK命令,然后用旧的dbf手动替换新的dbf。

像我这样的初学者可能对此很感兴趣:http://www2.hkedcity.net/sch_files/a/tps/tps-comp/visitor_cabinet/123570/db-ch05.pdf

2 个答案:

答案 0 :(得分:3)

通常不建议使用IDX。为了获得CDX(复合索引),请使用以下略有不同的语法(“ TAG”而不是“ TO”):

INDEX ON group TAG group1

我还建议不要将“组”用作字段/列名称,因为它是VFP中的保留字。

答案 1 :(得分:2)

除了使用INDEX ON group TAG group1命令之外,当您(重新)打开文件时,还需要选择索引。这可以通过以下两种方式之一完成。

任何一个

USE filename
SET ORDER TO group1

USE filename ORDER TAG group1