好吧,这是我第一次做这个工作,所以如果我有点困惑或模糊,请原谅我。
我有一台安装了 Windows Server 2008 Standard 但没有 Hyper-v(6.0,Build 6002)的服务器。我在这个服务器上运行一个小型网站,并使用 Microsoft Access 数据库存储通过该网站传入的一些信息。我确信我编写的用于打开 ODBC 连接的 PHP 是正确的,因为当我在笔记本电脑上的测试环境中创建此网站时,它对我来说是有效的。
我现在的问题是,我似乎有两个不同的 odbcad32.exe,其中一个似乎没有 .accdb 文件的驱动程序,只有一个 .mdb 文件。另一个有两者的驱动程序。
我提到的第一个驱动程序名为“Microsoft Access 驱动程序 (.mdb)”,第二个驱动程序名为“Microsoft Access 驱动程序 (.mdb, .accdb)”。我通过转到 C:\Windows\SysWOW64\odbcad32.exe 访问第一个 odbcad32.exe,然后转到似乎具有我需要的驱动程序的那个,我转到控制面板->管理工具->数据源 (ODBC),然后在系统 DNS 选项卡中创建一个新连接。
每当我对通过控制面板访问的文件进行更改时,我都看不到任何变化,但是,如果我在 SysWOW64 中使用 odbcad32.exe 文件,我收到的错误确实会有所变化。我注意到的主要区别是,当我使用控制面板方法设置 ODBC 连接时,它说它根本找不到 ODBC 连接,但是当我在 SysWOW64 中建立 .mdb 连接(并将其指向 .accdb 文件)时,它说
Cannot open database '(unknown)'. It may not be a database that your application recognizes, or the file may be corrupt.
这使得 SySWOW64 中的 odbcad32.exe 版本似乎被识别为“正确”版本。有什么方法可以解决这个问题吗?
我已尽力做到尽可能彻底,但如果我造成混淆或者遗漏了任何内容,请告诉我。
答案1
system32 中的可执行文件是 64 位版本,而 syswow64 中的副本也是 64 位版本。根据您正在运行的可执行文件的架构,每个文件都适用于不同的驱动程序集。
您想要运行的版本取决于需要加载驱动程序的可执行文件的体系结构。
通常,PHP 作为 CGI 的 32 位进程运行,但您需要仔细检查您的环境并确保安装了适当的驱动程序。