1

我一直在开发一个 API,以便使用 ADODB (v5.20.14) 通过 PHP (v7.3) 在 FoxPro 数据库上运行查询。目前,我的工作解决方案使用在 Windows 2019 服务器上运行的 XAMPP (3.2.2 x86)。FoxPro 驱动程序 (6.01.8629.01)。

我现在正在尝试使用 IIS 10 使相同的设置工作,但是,我遇到了一个奇怪的问题,如果我同时向 Web 服务器发送请求,只有最后一个请求会成功返回数据;问题在于$db->connect。这是我正在使用的连接代码:

require_once('adodb/adodb.inc.php');

$db = NewADOConnection("vfp");

$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;

$db->debug = true;
$db->connect("DSN=Visual FoxPro Database;UID=;SourceDB=<UNC PATH>.DBC;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;") or die("Failed to connect.");

除了最后一个请求之外,我得到的所有错误都是:

odbc_connect(): SQL error: [Microsoft][ODBC Visual FoxPro Driver]This file is incompatible with the current version of Visual FoxPro.  Run 30UPDATE.PRG to update the file to the current version., SQL state S1000 in SQLConnect

我发现这篇关于错误的知识库文章似乎表明这是一个错误的错误;这是误导。

如果您从多个 Visual FoxPro 6.0 可执行文件多次打开位于服务器上的数据库,则会随机出现以下错误:

此文件与当前版本的 Visual FoxPro 不兼容。运行 30UPDATE.PRG 将文件更新到当前版本。

如果您使用 ADO 或 Visual FoxPro ODBC 驱动程序打开 Visual FoxPro 6.0 数据库,也可能出现此错误。

我不认为这很有帮助,因为它在通过 XAMPP 执行时有效,而不是 IIS。IIS 应用程序池设置为使用 x86 作为 ADODB,并且 FoxPro 驱动程序需要 32 位。

我不确定是什么导致了这种行为以及为什么最后一个请求每次都有效,与 dB 的连接已建立并且数据已成功返回。

4

2 回答 2

0

不幸的是,这似乎是 VFP 驱动程序 6.x 版的一个问题,由于 VFP 在几年前已终止使用,因此无法修复;对 v9 的扩展支持于 2015 年结束,您可以在此处查看生命周期。

我不能说 IIS 和 XAMPP 之间的区别,但它们使用不同的底层技术。

考虑到 VFP 的时代,我假设您正在使用 v6 来支持旧系统?在这种情况下,除了使用支持 VFP 的第三方 xBase 驱动程序之外,没有其他解决方法,那里有很多,应该适用于您现有的设置。

于 2020-05-21T13:08:37.687 回答
0

您说的是 ADODB,但错误地使用了最新版本为 6.x 的 ODBC 驱动程序。您无法使用该驱动程序访问较新版本的 VFP 表。改用 VFPOLEDB 驱动程序,它与 ADODB(32 位)配合得非常好。不幸的是我没有使用 PHP,所以我不能举一个 PHP 的例子。

于 2020-05-21T13:14:41.597 回答