4

我们有一个在服务器中共享的 Foxpro exe 应用程序,大约有 20 个用户运行它。一位同事告诉我,如果需要重新索引这些 dbf 表,他应该告诉所有人离开 exe 应用程序。如果重新索引进程启动并且某些用户仍在运行该应用程序,则 dbf 表将被损坏。

这让我很感兴趣。那可能吗?一直认为,在重新索引 Foxprox DBF 表时,进程本身以独占模式打开表,如果表已经以共享模式打开,它对该表没有任何作用。与 PAK 类似。

4

3 回答 3

11

虽然我同意 FoxPro 表可能会损坏,但从您描述的情况来看这是不可能的。要重新索引,您必须独占使用该表。您要么获得文件锁定,要么没有:

  1. 如果有人在应用程序中并且打开了一个表,那么您的重新索引例程将失败或无法重新索引打开的文件。如果重新索引表的编程在尝试锁定已经打开的表时处理错误,那么您关于“对该表不做任何事情”的想法是正确的。
  2. 如果您的重新索引例程正在运行并且有人恰好在应用程序中或试图运行应用程序,他们很可能会出错和/或使应用程序崩溃,因为他们将无法打开表(在共享模式下)。

下面列出了最可能导致表损坏的罪魁祸首。提到了文件锁定问题,但这与包含备注字段的表有关。这些表实际上包含 2 个文件(DBF [表] 和 FPT [备忘录])。我已经运行了多年的应用程序,没有任何损坏。

于 2012-10-31T01:46:46.830 回答
0

在损坏的备忘录文件上复制有效的备忘录文件以再次访问数据库。

注意:除非有效的备忘录文件是损坏文件的精确备份,否则原始备忘录字段信息将丢失。所有备忘字段备份文件的扩展名为 .TBK。

损坏的备忘录文件将具有 .FPT 扩展名,例如 OLD.FPT。在以下示例中,假设 NEW.FPT 是有效的备忘录文件。要绕过错误消息并再次访问数据库,请在 MS-DOS 命令提示符处键入以下命令:

复制 new.fpt old.fpt

于 2014-10-16T14:07:21.283 回答
0

另一种选择是关闭所有计算机,包括服务器。然后重新启动服务器(假设 DBF 文件在服务器上)并运行重新索引。

于 2018-01-20T02:03:31.153 回答