我正在尝试对 Access DB 运行一个简单的语句来查找记录。
记录中的数据验证非常糟糕,我无法对其进行清理。意思是,它必须保持原样。
我需要能够搜索删除了空格和连字符的字符串。以下语句将在 Access 2010 direct 中起作用:
select * from dummy where Replace(Replace([data1],' ',''),'-','') = 'ABCD1234';
不会通过 PHP 从 ODBC 连接运行它。它产生以下错误:
SQL error: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'Replace' in expression., SQL state 37000 in SQLExecDirect
在运行该函数的数据库中创建查询并尝试间接搜索其值会导致相同的错误:
select * from dummy_indirect where Expr1 = 'ABCD1234';
我尝试使用现有的两个 ODBC 驱动程序。ODBCJR32.dll (03/22/2010) 和 ACEODBC.dll (02/18/2007)。据我所知,这些应该是最新的,因为它与完整的 Access 2010 和 Access 2010 数据库引擎一起安装。
欢迎任何有关如何解决此错误并达到相同效果的想法。请注意,我无法更改数据库的方式、形状或形式。该间接查询是在另一个 mdb 文件中创建的,该文件具有从原始数据库链接的原始表。
* 更新 *
OleDB 并没有真正影响任何事情。
$dsn= "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\dummy.mdb;";
我也没有尝试将它用作 Web 后端。我不是施虐狂。
我必须支持一个使用 Access 作为后端的遗留系统。数据来自其他旧系统,我必须将其集成到更现代的系统中。因此,使用 Apache/PHP 创建一个在支持遗留系统的服务器上运行的 API。
我需要能够搜索具有字母数字大小写标识符的表,以获取唯一且与生成器相关联的数字标识符(访问中的自动编号)。用户多年来一直将其用作垃圾箱(数据输入不一致,带有零星符号),因此我唯一的解决方案是从字段值和搜索值中删除除字母数字之外的所有内容,并尝试对其执行 LIKE 比较。
如果不支持访问的 replace(),存在哪些 ODBC 兼容函数可以用来进行相同类型的比较?