【问题标题】:VFP indexing and saving with INDEX ON while CDX exists在 CDX 存在时使用 INDEX ON 进行 VFP 索引和保存
【发布时间】:2018-09-11 15:35:10
【问题描述】:

使用 VFP 9,我已使用 group(DBF 中的一列)为 DBF 文件编制索引

 INDEX ON group TO group1

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

为了解决这个问题,我删除了 CDX 文件(当然是一个错误弹出窗口,因为它找不到 .cdx)并使用COPY TO 函数来保留索引 DBF,但这不是真正的解决方案问题(这是论坛中提到的解决方案,但对我来说似乎不是最好的方法)。 我还尝试在最后使用 PACK 函数,就在关闭数据库之前,但没有为数据集建立索引。

除了上面提到的之外,我在网络上找不到任何关于这个特定问题的答案,所以我非常感谢任何评论来帮助我理解它并在编码时解决索引问题,当然还要确保每当关闭数据库时,索引和更改都将保持不变。非常感谢!

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

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

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

【问题讨论】:

    标签: database indexing format visual-foxpro dbf


    【解决方案1】:

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

    INDEX ON group TAG group1

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

    【讨论】:

    • 如此简单的解决方案!非常感谢史蒂夫!我刚试了下,很流畅。顺便问一下,如果我在 DBF 上运行程序后删除 CDX,命令是否仍然存在??
    • 干杯。另请参阅下面的 Herb Wolfe 补充内容。
    【解决方案2】:

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

    要么

    USE filename
    SET ORDER TO group1
    

    USE filename ORDER TAG group1
    

    【讨论】:

    • 谢谢赫伯!有没有办法用订单集打开 DBF?因为我希望它保持与上次在 dbf 上运行的程序相同的顺序。 @史蒂夫
    • 不。没有任何方法对这个 dbf 有用(它对其他人有用),我尝试了你建议使用 TAG 和 TO 的两种方法(当然不是同时),但是 dbf 不断重置自己。我不知道为什么我关闭后订单不成立。是否有可能有人在此 dbf 中更改了结构面板或可编辑选项?
    • 和之前一样,我通过打开 dbf、设置顺序然后使用COPY TO 以类似名称保存 dbf 并因此手动覆盖 dbf 来“解决”问题...我发布了这个因为一开始就有这个问题,但这只是一些 DBF,不是全部,当然我检查了一百万次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2016-11-09
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多