【问题标题】:Consistent connection failure to vfp与 vfp 的一致连接失败
【发布时间】:2020-05-13 11:39:49
【问题描述】:

我一直在开发一个 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

我在错误上找到了这个KB article,这似乎表明这是一个错误的错误;这是误导。

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

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

如果您打开 Visual FoxPro 6.0 数据库使用 ADO 或 Visual FoxPro ODBC 驱动程序。

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

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

【问题讨论】:

    标签: visual-foxpro iis-10 adodb-php


    【解决方案1】:

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

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

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

    【讨论】:

    • 来自 MS 的支持已结束,但该语言本身已经成熟且有效。问题在于将不兼容的旧 ODBC 驱动程序与新版本的表一起使用,这些表可以很好地与 VFPOLEDB 配合使用。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 2018-02-10
      • 2013-07-18
      • 2017-11-02
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多