一个foxpro软件读取、写入和更新DBF文件中的记录。我在 c++ 应用程序中并行读取相同的 DBF。如果我长时间保持我的c ++应用程序读取DBF文件,会有任何问题吗?
是的,DBF 格式是多用户的——几乎每个使用它们的实际应用程序都是多用户的;例如,我们有数百个用户使用的应用程序。
可能存在一个问题,即您的C++应用程序不尊重 FoxPro 将使用的锁定机制,但这不是一回事。如果您在C++端正确使用Visual FoxPro OLEDB驱动程序Microsoft则不会有问题,但是是的,就像这样的事情一样,您可以尽快打开和关闭DBF。
VFP 表基于文件,并在更新时使用共享锁。如果你直接阅读它(低级(,只有阅读就不会有问题。由于无论如何它都是数据,并且最佳优化的读取器是 OLEDB\ODBC 驱动程序(ODBC 驱动程序存在最高版本 6。对于更高版本,Sybase Advantage Server 有一个驱动程序 - 本地免费、远程付费的 AFAIK,但我不使用(。
很长一段时间以来,我一直在通过 VFPOLEDB 使用 VFP 中的 DBF 表(是的,来自 VFP(和 C#,我可以说我没有问题。实际上,与VFP中的驱动程序相比,该驱动程序在C#中工作得更好,我不知道为什么。
另请注意,当您使用 VFPOLEDB 驱动程序时,默认情况下使用 ANSI 模式(并共享以进行读取\写入,除非您更改模式(。
如果长时间保持 DBF 文件处于打开状态,则会阻止对表进行数据结构更新。如果 VFP 应用程序已更新,并且需要您正在读取的 DBF 文件中的新列,则更新将失败,直到程序停止。
若要解决此问题,你或你的客户端需要更改更新过程以包含你的应用程序。
有时,VFP 应用程序包含终止应用程序的机制。通常,这是某种计时器,用于检查特定字段或某个文件,然后终止应用程序。这经常被使用,因为用户在休假工作时保持应用程序打开。因此,数据库仍处于锁定状态,影响更新,有时还会影响一致的备份。
您可以通过在应用程序中实现相同的机制来解决此问题。