各位乡亲父老,欢迎大家来捧场!江湖卖艺,生活不易!技艺交流(投稿、打广告、链接交换),请搓这里

  access中过滤特殊字符"["引起的错误

2022/3/20 18:17:23管理员 1971
- N +
今天在做一个简单工具的时候,有个表全查没有问题,但在使用了like查询后始终会报SQL错误,然后就开始了各种漫长的排错之路,各种怀疑,各种排除。网上搜到最多的也是说ACCESS的LIKE和数据库中查询的SQL通配符不一致的问题,都有点黔驴技穷,完全没有向字段数据怀疑的方向上去想,因为数据也是通过手工成功搞入了库中的。最终还是搜到了一篇说ACCESS的“[”问题成功引起了我的注意和抱着试一试的态度将数据进行比对和处理后,果然问题解决了。下面引用了部分小部分该文章的内容,是为了大家更好的理解问题的症结点:
        今导入数据库的时候发现出错了,数据库访问失败,以为是程序的问题最后发现是采集回来的数据有问题,主要是Access里的特殊字字符“[”在搞鬼。

原来数据里面有个单独的“[”而没有“]”(不包含引号),于是我修改一下把缺少]加上就能导入了,原来是采集的数据少了个]。

我用Access打开数据库想把数据名称里面的[ 和 ] 全都去掉,没想到问题又来啦。查找替换]没问题很快搞定,结果这个]竟然不能查找,说“此模式字符串无效”

后来幸好网上找到一个网友的博客里有提此问题,是Access的特殊字条,松了口气问题搞定。

        今天在生成一个新站的静态页面时系统报错, 看了一下, 问题出在查询时的"like '[马'"这一句上了, 到数据库里把那一条中的"["删除就没问题了, 但保险起见, 又从Access中用"过滤"功能看了一下, 确实没有包含"["的记录了,就重新生成.
        不想生成中又发现问题了, 还是同样的问题: "["符号! 明明没有了的呀, 定位到出错的那条记录, 竟然真有!!!
        新建一条查询, 查了一下, 竟然查不到那条记录!
在OFFICE 2007的HELP中搜了半天, 终于发现: 原来, "["符号在ACCESS的过滤或查询中是作为特殊字符出现的, 用法有点象简单的正则表达式, 象"[1-9]"就是表示1-9之间的数字, 所以遇到查询或过滤中出现"["时Access都会把它当作不完整的区间表达式而报错了.
试了一下, 发现在Access中用过滤或查询找包含"["的记录时不能用"like '['"作为条件, 而应该用"like '[[]'", 即用一对中括号"[]"把这半个中括号"["括起来才行。
        之后又研究了下通配符的应用,要查找很多数据中的很多用中括号[]包含的数据并删除掉,比如:电影名[全集] 、电影名[高清] 、电影名[完结]。要把最后面的都删除掉,只需要在Access里查找[[]*]并替换成空就行了。
类似下面这个语句,update movie set name=replace(name,'[[]*','')
如果不想删除这些内容,只有将这个特殊符号换成中文的制表符号来处理,语句如下
UPDATE movie SET name = replace(name,chr(91),'「');
UPDATE movie SET name = replace(name,chr(93),'」');
总结下,这个坑应该是属于ACCESS独有的,问题的关键点就在于ACCESS把此作为了关键字,数据库内容中有此内容如果是全库查询还好,SQL执行是没问题的,通过库中的查询分析器也可以使用Like模糊查询,但是使用外部语句访问则会造成报错因而无返回,最简单的方法就是将字段中含有特殊关键字的匹配字符替换为全角的或其它类似的中文符号(不是保留的符号或通配符)既可解决问题,否则产生莫名其它的问题,会造成找问题都会找半天,使用字段的原理也是如此,不能用相关数据库的保留关键字,否则也会出现各种问题,在此码出来也是方便大家以后在使用相关数据库的时候避过这个坑,避免掉坑里,把时间浪费在这G血的事情上(为了解决和找到这个问题的原因【开始连原因都找不到,在SQL语句上转悠了大半天】,我都搞了2天,而且也是网上各种查资料找原因,还好最终解决了!)
1人赞 分享 二维码 赏一个
选择分享方式
移步手机端
文章手机二维码

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
选择打赏方式
微信赞助

打赏