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中包含类似名称的多个表中获取数据