与 vfp 的一致连接失败
Consistent connection failure to vfp
我一直在使用 ADODB (v5.20.14) 通过 PHP (v7.3) 在 FoxPro 数据库上进行 API 到 运行 的查询。目前,我的工作解决方案在 Windows 2019 服务器上使用 XAMPP (3.2.2 x86),运行ning。 FoxPro 驱动程序 (6.01.8629.01)。
我现在正尝试使用 IIS 10 进行相同的设置,但是,我 运行 遇到了一个奇怪的问题,如果我同时向网络服务器发送请求,则只有最后一个请求会return回数据成功;问题出在$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
我在错误中发现了这个 KB article,这似乎表明这是一个错误的错误;这是误导。
If you open a database located on a server numerous times from multiple Visual
FoxPro 6.0 executables, then the following error randomly appears:
This file is incompatible with the current version of Visual FoxPro. Run
30UPDATE.PRG to update the file to the current version.
This error may also occur if you are opening a Visual FoxPro 6.0 database using
ADO or the Visual FoxPro ODBC driver.
我认为这不是很有帮助,因为它在通过 XAMPP 执行时有效,而不是 IIS。 IIS 应用程序池设置为使用 x86 作为 ADODB,FoxPro 驱动程序需要 32 位。
我不确定是什么导致了这种行为以及为什么最后一个请求每次都有效,与 dB 的连接已建立并且数据已成功 returned。
不幸的是,这似乎是 VFP 驱动程序版本 6.x 的问题,由于 VFP 几年前就已停产,因此无法修复;对 v9 的扩展支持于 2015 年结束,您可以看到生命周期 here.
我不能说出 IIS 和 XAMPP 之间的区别,但它们使用不同的底层技术。
考虑到 VFP 的年代,我假设您使用 v6 来支持遗留系统?在这种情况下,除了使用支持 VFP 的第三方 xBase 驱动程序之外没有解决此问题的方法,那里有很多并且应该适用于您现有的设置。
您说的是 ADODB,但错误地使用了最新版本为 6.x 的 ODBC 驱动程序。您无法使用该驱动程序访问较新版本的 VFP 表。请改用 VFPOLEDB 驱动程序,它与 ADODB(32 位)一起工作得非常好。不幸的是我没有使用 PHP,所以我不能用 PHP 举个例子。
我一直在使用 ADODB (v5.20.14) 通过 PHP (v7.3) 在 FoxPro 数据库上进行 API 到 运行 的查询。目前,我的工作解决方案在 Windows 2019 服务器上使用 XAMPP (3.2.2 x86),运行ning。 FoxPro 驱动程序 (6.01.8629.01)。
我现在正尝试使用 IIS 10 进行相同的设置,但是,我 运行 遇到了一个奇怪的问题,如果我同时向网络服务器发送请求,则只有最后一个请求会return回数据成功;问题出在$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
我在错误中发现了这个 KB article,这似乎表明这是一个错误的错误;这是误导。
If you open a database located on a server numerous times from multiple Visual FoxPro 6.0 executables, then the following error randomly appears:
This file is incompatible with the current version of Visual FoxPro. Run 30UPDATE.PRG to update the file to the current version.
This error may also occur if you are opening a Visual FoxPro 6.0 database using ADO or the Visual FoxPro ODBC driver.
我认为这不是很有帮助,因为它在通过 XAMPP 执行时有效,而不是 IIS。 IIS 应用程序池设置为使用 x86 作为 ADODB,FoxPro 驱动程序需要 32 位。
我不确定是什么导致了这种行为以及为什么最后一个请求每次都有效,与 dB 的连接已建立并且数据已成功 returned。
不幸的是,这似乎是 VFP 驱动程序版本 6.x 的问题,由于 VFP 几年前就已停产,因此无法修复;对 v9 的扩展支持于 2015 年结束,您可以看到生命周期 here.
我不能说出 IIS 和 XAMPP 之间的区别,但它们使用不同的底层技术。
考虑到 VFP 的年代,我假设您使用 v6 来支持遗留系统?在这种情况下,除了使用支持 VFP 的第三方 xBase 驱动程序之外没有解决此问题的方法,那里有很多并且应该适用于您现有的设置。
您说的是 ADODB,但错误地使用了最新版本为 6.x 的 ODBC 驱动程序。您无法使用该驱动程序访问较新版本的 VFP 表。请改用 VFPOLEDB 驱动程序,它与 ADODB(32 位)一起工作得非常好。不幸的是我没有使用 PHP,所以我不能用 PHP 举个例子。