【问题标题】:Reindex visual foxpro table (corrupt cdx)重新索引视觉 foxpro 表(损坏的 cdx)
【发布时间】:2014-06-11 22:39:44
【问题描述】:
我正在运行一个会计系统,并且在打开某个数据库时收到交易错误。问题是某些索引文件 (CDX) 已损坏。表文件(DBF)似乎很完美。即使使用 Excel,我也可以打开并阅读所有内容。如何使用 visual fox pro 重建这些 cdx 文件?
我正在尝试:
Use mydatabase.DBF exclusive
Reindex
Close all
但它正在生成一个 FXP 文件。我不确定这是否可行或我应该使用什么。
另外,如果我在这方面做错了什么,请原谅我。我正在尝试学习 VFP,因为我需要解决这个问题。
提前致谢。
【问题讨论】:
标签:
dbf
visual-foxpro
reindex
【解决方案1】:
在哪里尝试这些命令?如果它来自命令行窗口,那应该可以工作(尽管 REINDEX 并不是修复损坏索引的最佳方法)。如果你把它们放在一个程序中,那么运行那个程序会生成一个FXP,它是一个编译好的程序。
与其使用可以传播损坏标签的REINDEX,不如获取CDX中所有标签的列表,然后发出:
全部删除标记p>
然后使用 INDEX 命令重新创建所有标签。 (也就是说,在某些情况下这也不是一个好主意。如果表属于数据库 (DBC),并且它涉及持久关系,则 DELETE TAG ALL 可能会破坏这些关系。)
添马舰
【解决方案2】:
我认为您要获得通过 Reindex 命令生成的 FXP 文件的唯一方法是您的索引(cdx 文件)是否包含函数调用。 FXP 文件是编译后的 PRG(程序文件)。它们通常不是索引的一部分,但可以使用。
要查明您是否有这些索引标记之一,请在发出 USE MYDATABASE.DBF EXCLUSIVE 命令后,在命令窗口中键入 DISPLAY STATUS。该命令将列出结构 CDX 文件中的所有索引标签。
例子:
Structural CDX file: C:\PRO60\ARDATA\ARCUST02.CDX
Index tag: ADDRESS1 Collate: Machine Key: UPPER(ADDRESS1)
Index tag: ADDRESS2 Collate: Machine Key: UPPER(ADDRESS2)
Index tag: CURRENCY Collate: Machine Key: CURRENCY
Index tag: COMPANY1 Collate: Machine Key: "G_RETSDX(COMPANY)"
最后一个标签包含一个函数调用。在上面的示例中,重新索引需要访问 G_RETSDX() 函数。
这解释了您的 FXP 问题。但是,这可能无法解决您的“交易错误”...您将不得不更具体地了解确切的错误消息以了解发生了什么问题。
【解决方案3】:
dbf 文件和cdx 文件之间存在一对一的映射关系。
'mydatabase' 是否与cdx 文件同名?如果不是,但您知道这是正确的 cdx 文件,您必须手动打开它(我不记得如何打开了)。
【解决方案4】:
此解决方案适用于 Oracle 数据库,如果您使用其他产品处理 dbf 文件,本指南对您没有帮助!
如果可能的话,将您的文件、所有数据库文件(控制文件、重做日志、数据、配置文件...)复制到新硬盘中的同一位置(目录)。
然后使用 oradim 创建服务: oradim -new -startmode manual
如果服务尚未启动,请启动它。
执行 sqlplus "/ as sysdba" 并尝试启动。
如果所有文件都复制到同一位置,这应该可以工作。