作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图对 Access DB 运行一个简单的语句来查找记录。
记录中的数据验证非常糟糕,我无法对其进行 sanitizer 。意思是,它必须保持原样。
我需要能够搜索删除了空格和连字符的字符串。以下语句将直接在 Access 2010 中起作用:
select * from dummy where Replace(Replace([data1],' ',''),'-','') = 'ABCD1234';
SQL error: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'Replace' in expression., SQL state 37000 in SQLExecDirect
select * from dummy_indirect where Expr1 = 'ABCD1234';
$dsn= "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\dummy.mdb;";
最佳答案
回顾一下,Access 数据库引擎将无法识别 Replace()
除非您的查询是从 Access 应用程序 session 中运行的。任何来自 Access 外部的尝试都将触发“未定义函数”错误消息。您无法通过从 ODBC 切换到 OleDb 作为连接方法来避免错误。而且你也不能欺骗引擎使用 Replace()
通过将其隐藏在单独的查询中(在同一个或另一个 Access 数据库中)并将该查询用作主查询的数据源。
此行为由 Access' sandbox mode 决定.该链接页面包括默认沙箱模式下可用的功能列表。该页面还介绍了如何更改沙箱模式。如果您绝对必须拥有 Replace()
可用于您的查询,也许最低设置 (0) 将允许它。但是,我不建议您这样做。我自己从来没有做过,所以不知道什么后果。
至于 Replace()
的替代品,这将有助于了解您正在搜索的值的可变性。如果空格或破折号只出现在一个或几个一致的位置,你可以用 Like
做一个模式匹配。表达。例如,如果搜索字段值由 4 个字母、一个可选的空格或破折号组成,后跟 4 个数字,则 WHERE
这样的子句应该适用于“ABCD1234”的变体:
SELECT * FROM dummy
WHERE
data1 = 'ABCD1234'
OR data1 Like 'ABCD[- ]1234';
SELECT * FROM dummy
WHERE
data1 IN ('ABCD1234','ABCD 1234','ABCD-1234');
关于针对 Access 2010 DB 的 SQL 语句不适用于 ODBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538094/
我是一名优秀的程序员,十分优秀!