asp+access 备注类型字段特殊字符模糊查询的问题

我的access数据库有一个表tmyq,类型是备注型的,里面含有特殊字符,我用asp进行模糊查询总是出错。例如查询数据库里面含有“请打开[xls-2.xls]文件”的记录... 我的access数据库有一个表tmyq,类型是备注型的,里面含有特殊字符,我用asp进行模糊查询总是出错。
例如查询数据库里面含有“请打开[xls-2.xls]文件”的记录总是出错,求高人解答,可以追加悬赏,先谢谢了!!!
展开
 我来答
小狂中E
2013-12-30 · TA获得超过1418个赞
知道大有可为答主
回答量:1514
采纳率:66%
帮助的人:1024万
展开全部
select * from t1 where f2 like '*请打开[[]xls-2.xls]文件*'
注意:串中的*、?、#、[、-均要用[]括在中间
access文档中有描述:
下表演示如何使用 Like 来测试不同模式的表达式。

匹配类型
模式
匹配(返回 True)
不匹配(返回 False)

多个字符 a*a aa、aBa 和 aBBBa aBC
*ab* abc、AABB 和 Xab aZb 和 bac
特殊字符 a[*]a a*a aaa
多个字符 ab* abcdefg 和 abc cab 和 aab
单个字符 a?a aaa、a3a 和 aBa aBBBa
单个数字 a#a a0a、a1a 和 a2a aaa 和 a10a
字符范围 [a-z] f、p 和 j 2 和 &
范围之外 [!a-z] 9、& 和 % b 和 a
非数字值 [!0-9] A、a、& 和 ~ 0、1 和 9
复合值 a[!b-m]# An9、az0 和 a99 abc 和 aj0

pattern 中的字符
expression 中的匹配项

? 或 _(下划线) 任意单个字符
* 或 % 零个或多个字符
# 任何单个数字 (0 - 9)
[charlist] 在 charlist 中的任何单个字符。
[!charlist] 不在 charlist 中的任何单个字符。
可以使用一组由中括号 ([]) 括起来的一个或多个字符 (charlist) 来匹配 expression 中的任何单个字符,并且 charlist 几乎可以包含 ANSI 字符集中的所有字符(包括数字)。只有当左方括号 ([)、问号 (?)、数字号 (#) 和星号 (*) 等特殊字符位于括号中时,才能使用这些字符直接与其自身进行匹配。不能在组中将右方括号与其自身匹配,但可以将其作为单个字符用于组外。
除了括在方括号中的简单字符列表外,charlist 可以通过使用连字符号 (-) 来分隔范围的上界和下界。例如,在 pattern 中使用 [A-Z] 时,如果 expression 中相应的字腔乎符包含了任何在 A 到 Z 范围之间的大写字符,就能实现匹配。可以在方括号中包含多个范围而不必为范围划界。例如,[a-zA-Z0-9] 可以匹配任何字母数字字符。
要注意的重要事项是,ANSI SQL 通配符 (%) 和 (_) 只能用于 Microsoft® Jet 4.X 版和 Microsoft OLE DB Provider for Jet。如果用于凳消 Microsoft Access 或 DAO,则被视为文本。
用于模式匹配的其他重要规则如下所示:

charlist 开头的感叹号 (!) 表示:如果在 expression 中发现的字符不在 charlist 中,则进行匹配。感叹号用在方括号外面时,将与自身匹配。
可以将连字符 (-) 用于 charlist 的开头(如果用了感叹号,则放在感叹号之后)或末尾以便与其自身匹配。如果用于任何其他位置,则标识 ANSI 字符的范伍粗悉围。
指定一系列字符时,这些字符必须以升序排序次序显示(A-Z 或 0-100)。[A-Z] 是有效模式,而 [Z-A] 是无效模式。
将忽略字符顺序 [ ];该顺序被视为一个零长度字符串 ("")。
注册到抓狂
2013-12-30 · TA获得超过655个赞
知道小有建树答主
回答量:1410
采纳率:72%
帮助的人:336万
展开全部

关于你的这个问题,处理起来比较复杂,其主要原因是带了一对括号."[  ]" 这个,在Access中是通配符.

要解决你的这个问题有两种方法

第一:在数据入库前就进行字符替换.这个就目前来说,显然不是你所需要的.

第二:就是遍历数据记录,在记录循环中使用instr进行查找

例如:

tests="请打开[xls-2.xls]文件"
    梁告Set Rs=Server.CreateObject("Adodb.Recordset")
    Sql="Select * From [ProductList]"
    Rs.Open Sql,Conn,1,1
    If Not(Rs.bof and Rs.eof) Then
        Do While Not Rs.eof 
       岩渣磨     If Instr(Rs("product"),tests) Then
                response.Write Rs("product")
            End If
  粗斗      Rs.Movenext
        Loop
    End If
    Rs.close
    Set Rs=nothing
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式