【问题标题】:ODBC for MS Access Setup用于 MS 访问设置的 ODBC
【发布时间】:2016-09-12 14:45:47
【问题描述】:

我正在努力建立一个 ODBC 连接,但需要一些帮助以确保设置正确。我也希望能在编写 PHP 代码以验证与数据库的连接是否正常工作时获得一些帮助。

在 Windows Server 2008 R2 机器上,我浏览到 C:\Windows\SysWOW64 并运行 odbcad32。 (这是我开始感到困惑的地方......我看过的大多数页面都提供了非常基本的信息。) DB 是一个 MS Access 文件。我应该选择哪个选项卡...用户 DSN...系统 DSN...文件 DSN?

一旦我选择了正确的选项卡,我输入的任何数据源名称是否正确? (例如,即使文件是'it.accdb',我可以将数据源命名为'Employees'吗?'Employees.accdb'?还是必须与实际文件名匹配?

最后,连接数据库的 PHP 代码是什么?数据库当前为 D:\Temp\IT.accdb。我已经在系统 DSN 选项卡中配置了当前配置的 ODBC,其数据源名称为“员工”并指向数据库。我试过以下代码:

<?php
$dbName = "Employees";

if (!file_exists($dbName)) {
   die("Could not find database file.");
}
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb,*.accdb)}; DBQ=$dbName; Uid=; Pwd=;");

我尝试将 $dbName 更改为各种不同的东西,但我尝试的所有方法都导致找不到数据库文件。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • PHP脚本是否与数据库运行在同一台计算机上?
  • 实时数据库位于远程虚拟服务器 (Windows Server 2008 R2) 上。我创建了一个测试数据库,我一直在移动到不同的位置以尝试成功连接。如果可能的话,我宁愿将数据库留在当前位置。但是,如果我无法远程连接到实时数据库,我会将其移动到本地位置。
  • edit 澄清您的问题:您的PHP 代码会在Access 数据库文件所在的同一台Windows Server 2008 R2 机器上运行吗?如果没有,它会在其他 Windows 机器上运行吗?如果是这样,PHP 代码将作为 32 位进程还是 64 位进程运行?看来数据库文件是.accdb;对吗?
  • PHP 代码将在一台 Windows Server 2008 R2 计算机上运行……一台物理机。该数据库将驻留在虚拟 Windows Server 2008 R2 系统上。 PHP 代码将在 32 位进程中运行。是的...数据库是一个 .accdb 文件。如果数据库绝对需要驻留在运行 PHP 代码的同一系统上,则可能会发生这种情况;但我宁愿把它放在远程。我应该提到的另一件事是,这是一个域环境。

标签: php ms-access odbc


【解决方案1】:

有两种方法可以通过网络访问 ODBC 数据源。您可以挂载包含数据库的网络驱动器,并授予系统用户对其的读/写访问权限(我不推荐这样做);或者使用 ODBC 桥,例如 OpenLink

如果您想将数据库移动到与 PHP 代码相同的服务器,那么我认为 this sitepoint guide 应该会有所帮助。

后一种是推荐的,也是最简单的方法。为此,您需要在包含数据库的服务器上将 ODBC 源设置为“System-DSN”,并随意命名。 “系统数据库”应勾选“无”,我建议设置用户名和密码。然后安装指向此 DSN 的 ODBC 请求代理。
在客户端设置 ODBC 客户端网桥,将其配置为使用远程 DSN。然后你需要做的就是在 PHP 中创建一个这样的 DSN 字符串:

$dsn = "odbc:dsn_name";

就是这样。

请注意,代理的设置确实需要一点小心,但只要您阅读指南,它就非常简单。 OpenLink 也有试用版,因此您可以确定它是否适合您。要弄清楚您需要哪些部件,他们还有Software selection wizard

这类软件也有其他供应商,但我只有 OpenLink 的经验。

【讨论】:

  • 如果这是此过程中仅有的两个可用选项,我更倾向于将数据库移动到安装 PHP 的 Web 服务器。 (尽量避免为一个小项目申请资金。)所以...如果我的数据库与 web/PHP 服务器在同一个系统上,我认为我仍然需要 ODBC 驱动程序设置是否正确?如果是这样,是否也将其设置为“System-DSN”?
  • 我在我的答案中添加了第二段,其中包含一个链接,指向您应该如何在同一台服务器上进行设置。还有一些开源和/或免费的 ODBC 驱动程序,但由于我们的要求,我没有研究它们。因为他们不支持我们的用例。
  • 谢谢,克里斯蒂安。这是我在此过程中查看的众多页面之一......我将再仔细看看它。还有一个问题……在创建 ODBC 连接时,您需要提供一个数据源名称,据我所知,它不需要与实际文件的名称相同。 (例如,文件名可以是“One.accdb”,但数据源名称可以是“Two”。我的问题是,PHP 代码会使用什么?'$dsn = "odbc:one.accdb"'还是'$dsn = "odbc:two"'?
  • 后者。您在创建 ODBC 源时指定 DSN 的名称,类似于域名。此名称是您连接时使用的名称,以便 ODBC 驱动程序知道您想要哪个数据库。
  • 仍然无法正常工作,我不知道为什么。服务器名为 CURRY-MGMT。服务器的角色之一是 Web 服务器。 PHP 安装在此服务器上。数据库的路径是 'c:\inetpub\wwwroot\IT\Database\IT.accdb'。 SYSTEM-DSN 名称是员工。我的 PHP 代码包括 $dbName = "Employees";并且连接是 $db = new PDO("odbc:DRIVER={Microsoft Access Driver (.mdb,.accdb)}; DBQ=$dbName; Uid=; Pwd=;"); (抱歉……不知道如何让这个更具可读性……除非我编辑了我的原始帖子。)你能看到任何会导致连接找不到数据库的东西吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多