Access ODBC 无法读取名称中包含多个双引号的表

Posted

技术标签:

【中文标题】Access ODBC 无法读取名称中包含多个双引号的表【英文标题】:Access ODBC cannot read tables with multiple double quotes in their names 【发布时间】:2014-07-10 14:29:40 【问题描述】:

我有一个 Access 2003 数据库,其中包含大量名称奇怪的表。我需要使用 php 脚本和 ODBC 读取表的记录。

有些表的名字里面有这样的双引号:

Weird """""" Table_Name

ODBC 连接工作正常,选择使用“普通”文件名工作正常。在使用odbc_exec($dbh, 'SELECT * FROM [Weird """""" Table_Name]')

它给出:

警告:odbc_exec():SQL 错误:[Microsoft][Driver ODBC Microsoft 访问] Parentesi non valide nel nome 'Weird ['., SQL state 37000 in ...(php 文件)中的 SQLExecDirect。

我了解 ODBC 驱动程序将' " ' 转换为' [ ',我该如何转义' " '

在每个 dbms 工具中使用这些表都可以,它们属于使用过的基于 Access 的应用程序。

【问题讨论】:

【参考方案1】:

该错误似乎是 Access ODBC 驱动程序中的一个特殊问题。尝试从 C# 通过 ODBC 读取该表时,我得到了相同的结果。

在任何情况下,PHP 和 Access ODBC 在最好的时候都不能很好地相处。如果可能的话,我建议您使用 COM 从 PHP 中操作 Access 数据库,如下所示:

<?php
// this code requires the following php.ini directive:
//
// extension=php_com_dotnet.dll

$path = "C:\\Users\\Public\\db1.mdb";
$con = new COM("ADODB.Connection"); 
$con->Open(
        "Provider=Microsoft.Jet.OLEDB.4.0;" .
        "Data Source=$path");

$rst = new COM("ADODB.Recordset");
$sql = 'SELECT * FROM [Weird """""" Table_Name]';
$rst->Open($sql, $con, 3, 3);  // adOpenStatic, adLockOptimistic

while (!$rst->EOF) 
    echo $rst['TextField']->Value . "<br/>";
    $rst->MoveNext;


$rst->Close();
$con->Close();

我刚刚尝试过,它确实有效。在我看来,从长远来看,避免 PHP 和 Access ODBC 的组合可能会为您节省一些挫败感。

【讨论】:

以上是关于Access ODBC 无法读取名称中包含多个双引号的表的主要内容,如果未能解决你的问题,请参考以下文章

Access 2010:根据特定组合框条件过滤字段中包含多个值的报表

无法使用 ODBC 连接从 .Net Core 3.0 访问

如何编写一个查询以从SQL Server中包含类似名称的多个表中获取数据

R 中的 ODBC 连接字符串和/或 DSN

来自 Access ODBC 驱动程序的无效日期时间格式异常

如何评估访问查询中另一个字段中包含的字段名称?