| 网站首页 | 新闻 | 新书 | 专家 | 技巧 | 源码作品 | 工具/资源 | 商城 | 风采 | 留言 | 论坛 | 网址 | 承接 | 
您现在的位置: Access/Office中国 >> 技巧 >> Access >> 查询视图 >> 文章正文 用户登录 新用户注册
JET SQL字符串中单引号的问题         ★★★
JET SQL字符串中单引号的问题
作者:cg1 文章来源:Access911 点击数: 本日:{$DayHits} 更新时间:2005-2-4 18:11:56

原文:http://access911.net/71FAB01E10DCEFF3.htm

Function about_inverted_comma()
    Dim rs As New ADODB.Recordset
    Dim strSQL As String
    strSQL = "select * from 表1 where g=''"
    '其实非常简单,如果要匹配空字符,可以连续用两个单引号 ''
    '如果要匹配 g 字段中得一个单引号,你可以将要匹配得单引号乘以 2 ,
    '而两边仍然以一边一个单引号将字符包含起来,表示这是匹配字符串。
    '比如我要匹配一个单引号就用以下代码:
    strSQL = "select * from 表1 where g=''''"
    '要匹配2个单引号用以下代码:
    strSQL = "select * from 表1 where g=''''''"
    rs.CursorLocation = adUseClient
    rs.Open strSQL, CurrentProject.Connection, 1, 1
    Debug.Print rs.RecordCount
    rs.Close
End Function

 

说明:
在JET SQL中,为了表示字符串,首先我们需要用两个引号把字符串引起来。例如 'abc', JET SQL编译器把它解释为字符串abc。而当您需要表示一个单引号 ' 的时候,如果只用三个引号 ''',JET SQL的编译器会无法解析辨认中间的引号是一个正常的字符还是一个特殊字符(如果是特殊字符,编译器会认为和左右的两个引号之间有关系)

为了解决这种情况,JET SQL中使用转义字符(其他语言中也有这个概念)对特殊字符进行转义。在 '''' 中:第一个和第四个引号高速编译器中间是字符串,第二个引号是一个转义字符,表示后面的第三个 ' 不是一个特殊字符,而是一个普通的引号!所以'''' 经过JET SQL引擎编译后的输出是一个普通的单引号 '

另,关于 VBA 中的字符串表达式也有相同的概念
在VBA中,为了表示字符串,首先我们需要用两个引号把字符串引起来。例如 "abc", VBA编译器把它解释为字符串abc。而当您需要表示一个单引号 " 的时候,如果只用三个引号 """,VBA的编译器会无法解析辨认中间的引号是一个正常的字符还是一个特殊字符(如果是特殊字符,编译器会认为和左右的两个引号之间有关系)

为了解决这种情况,VBA中使用转义字符(其他语言中也有这个概念)对特殊字符进行转义。在 """" 中:第一个和第四个引号高速编译器中间是字符串,第二个引号是一个转义字符,表示后面的第三个 " 不是一个特殊字符,而是一个普通的引号!所以"""" 经过VBA编译器编译后的输出是一个普通的双引号 "

在日常操作中,为了避免出现双引号的问题,我们还可以直接写一个函数来解决问题
Function CheckSQL(ByVal strSQL As String) As String
    If IsNull(strSQL) = False Then
        strSQL = Replace(strSQL, "'", "''")
    Else
        strSQL = ""
    End If
    CheckSQL = strSQL
End Function

 

该函数应用如下:
Function CheckSQL(ByVal strSQL As String) As String
    If IsNull(strSQL) = False Then
        strSQL = Replace(strSQL, "'", "''")
    Else
        strSQL = ""
    End If
    CheckSQL = strSQL
End Function

Function about_inverted_comma()
    Dim rs As New ADODB.Recordset
    Dim strSQL As String
    Dim strCondition As String
   
    strCondition = "带 ' (单引号)的条件"
    strSQL = "select * from 表1 where g='" & strCondition & "'"
    '上述语句可能导致 JET SQL 错误,下面使用函数过滤单引号
    strSQL = "select * from 表1 where g='" & CheckSQL(strCondition) & "'"
    rs.CursorLocation = adUseClient
    rs.Open strSQL, CurrentProject.Connection, 1, 1
    Debug.Print rs.RecordCount
    rs.Close
End Function

 

文章录入:tmtony    责任编辑:tmtony 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    Sql Server 和 Access 操
    SQL在存储过程中使用递归
    SQL Server 7.0数据库的
    精妙SQL语句 值得推敲
    SQL Delete
    SQL Update
    SQL Insert Into
    SQL Truncate Table
    SQL Drop Table
    SQL Create Table
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)