【发布时间】:2015-01-19 18:17:43
【问题描述】:
我在这里遇到了一个非常奇怪的问题。
这里是上下文:
我有一个旧的 MS Access 97 .mdb 文件,我想在 IIS 上运行的 HTML、PHP、JQuery 构建的内部网页上使用它。
现在我知道 php 的 odbc 驱动程序已经实现,但由于我已经在与此链接的其他一些页面中使用 PDO,因此我决定在此项目中也使用 PDO。
因此,在启用扩展和所有 PDO odbc 驱动程序正常工作后,我复制了 .mdb 文件并将其命名为 DBcopy.mdb 到项目文件夹中。
我编写了代码并执行了一些测试(以确保一切都按预期工作)并且一切看起来都很好。
然后我将 .mdb 的路径更改为 //myothernetworkdrive/somedirectory/DBreal.mdb 这是“真正的” .mdb 文件所在的位置,然后我突然收到此消息:
SQLSTATE[HY000] SQLDriverConnect: -1032 [Microsoft][Pilote ODBC Microsoft Access] Le moteur de la base de données Microsoft Jet ne peut pas ouvrir le fichier '(Inconnu)'. Il est déjà ouvert en mode exclusif par un autre utilisateur, ou vous devez avoir l'autorisation de visualiser ses données.
对于那些不会说法语的人,这里是粗略的翻译:
SQLSTATE[HY000] SQLDriverConnect: -1032 [Microsoft][ODBC Drivers Microsoft Access] Microsoft Jet can't open file '(Inconnu)'. It is already open in exclusive mode by another user, or you need permission to access these data.
由于错误消息是非常自我解释的,我通过在同一目录中查找 .ldb 文件来检查是否有人锁定了 .mdb 文件,但找不到,所以我假设 .mdb 没有被锁定.
有人知道为什么我可以访问副本但不能访问原件吗?我能看到的唯一区别是那里的目录: Copy- 与项目位于同一文件夹中。 Real- 位于 IIS 有权访问的网络驱动器上
编辑:
@Halayem Anis, 我不使用 Apache,我使用的是 IIS,但由于您的观点无论如何都是有效的,因此我允许每个人更改/写入/读取/totalcontrol 对 .mdb 文件进行更改/写入/读取/totalcontrol,但仍然是相同的错误代码。
EDIT2:
我正在使用这个连接字符串:
new \PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\\\\myothernetworkdrive\\somedirectory\\DBreal.mdb; UID=Admin; PWD=;");
会不会是我的连接字符串不好?
EDIT3:
我在 IIS 的 ODBC 驱动程序管理器中添加了一个 DSN,名称为“testDSN”,指向我的 .mdb 文件,并且我让 IIS 用户完全控制 .mdb 文件及其所在的文件夹。
我还将连接字符串更改为:
new \PDO('odbc:testDSN');
但我仍然收到相同的错误消息。
【问题讨论】: