JET SQL字符串中單引號(hào)的問(wèn)題
Function about_inverted_comma()
Dim rs As New ADODB.Recordset
Dim strSQL As String
strSQL = "select * from 表1 where g=''"
'其實(shí)非常簡(jiǎn)單,如果要匹配空字符,可以連續(xù)用兩個(gè)單引號(hào) ''
'如果要匹配 g 字段中得一個(gè)單引號(hào),你可以將要匹配得單引號(hào)乘以 2 ,
'而兩邊仍然以一邊一個(gè)單引號(hào)將字符包含起來(lái),表示這是匹配字符串。
'比如我要匹配一個(gè)單引號(hào)就用以下代碼:
strSQL = "select * from 表1 where g=''''"
'要匹配2個(gè)單引號(hào)用以下代碼:
strSQL = "select * from 表1 where g=''''''"
rs.CursorLocation = adUseClient
rs.Open strSQL, CurrentProject.Connection, 1, 1
Debug.Print rs.RecordCount
rs.Close
End Function
說(shuō)明:
在JET SQL中,為了表示字符串,首先我們需要用兩個(gè)引號(hào)把字符串引起來(lái)。例如 'abc', JET SQL編譯器把它解釋為字符串a(chǎn)bc。而當(dāng)您需要表示一個(gè)單引號(hào) ' 的時(shí)候,如果只用三個(gè)引號(hào) ''',JET SQL的編譯器會(huì)無(wú)法解析辨認(rèn)中間的引號(hào)是一個(gè)正常的字符還是一個(gè)特殊字符(如果是特殊字符,編譯器會(huì)認(rèn)為和左右的兩個(gè)引號(hào)之間有關(guān)系)
為了解決這種情況,JET SQL中使用轉(zhuǎn)義字符(其他語(yǔ)言中也有這個(gè)概念)對(duì)特殊字符進(jìn)行轉(zhuǎn)義。在 '''' 中:第一個(gè)和第四個(gè)引號(hào)高速編譯器中間是字符串,第二個(gè)引號(hào)是一個(gè)轉(zhuǎn)義字符,表示后面的第三個(gè) ' 不是一個(gè)特殊字符,而是一個(gè)普通的引號(hào)!所以'''' 經(jīng)過(guò)JET SQL引擎編譯后的輸出是一個(gè)普通的單引號(hào) '
另,關(guān)于 VBA 中的字符串表達(dá)式也有相同的概念
在VBA中,為了表示字符串,首先我們需要用兩個(gè)引號(hào)把字符串引起來(lái)。例如 "abc", VBA編譯器把它解釋為字符串a(chǎn)bc。而當(dāng)您需要表示一個(gè)單引號(hào) " 的時(shí)候,如果只用三個(gè)引號(hào) """,VBA的編譯器會(huì)無(wú)法解析辨認(rèn)中間的引號(hào)是一個(gè)正常的字符還是一個(gè)特殊字符(如果是特殊字符,編譯器會(huì)認(rèn)為和左右的兩個(gè)引號(hào)之間有關(guān)系)
為了解決這種情況,VBA中使用轉(zhuǎn)義字符(其他語(yǔ)言中也有這個(gè)概念)對(duì)特殊字符進(jìn)行轉(zhuǎn)義。在 """" 中:第一個(gè)和第四個(gè)引號(hào)高速編譯器中間是字符串,第二個(gè)引號(hào)是一個(gè)轉(zhuǎn)義字符,表示后面的第三個(gè) " 不是一個(gè)特殊字符,而是一個(gè)普通的引號(hào)!所以"""" 經(jīng)過(guò)VBA編譯器編譯后的輸出是一個(gè)普通的雙引號(hào) "
在日常操作中,為了避免出現(xiàn)雙引號(hào)的問(wèn)題,我們還可以直接寫一個(gè)函數(shù)來(lái)解決問(wèn)題
Function CheckSQL(ByVal strSQL As String) As String
If IsNull(strSQL) = False Then
strSQL = Replace(strSQL, "'", "''")
Else
strSQL = ""
End If
CheckSQL = strSQL
End Function
該函數(shù)應(yīng)用如下:
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 = "帶 ' (單引號(hào))的條件"
strSQL = "select * from 表1 where g='" & strCondition & "'"
'上述語(yǔ)句可能導(dǎo)致 JET SQL 錯(cuò)誤,下面使用函數(shù)過(guò)濾單引號(hào)
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
(責(zé)任編輯:admin)
- ·sql語(yǔ)句中l(wèi)ike通配符的匯總(*?!#-等含
- ·Access常用sql基本查詢語(yǔ)句匯總
- ·SQL查詢語(yǔ)句的一般格式小結(jié)
- ·聯(lián)合查詢應(yīng)用舉例1
- ·如何取消操作查詢的提示
- ·報(bào)表中先按組再按條件統(tǒng)計(jì)
- ·測(cè)試查詢速度
- ·條件選擇列求和
- ·SQL必知必會(huì)(14)NOT操作符
- ·ACCESS的參數(shù)化查詢-Access數(shù)據(jù)庫(kù)教程
- ·ACCESS的真假:四、"SELECT * INTO 工
- ·在Access中利用搜索窗體中的值生成動(dòng)態(tài)
- ·Access使用查詢
- ·隨機(jī)得到Access數(shù)據(jù)庫(kù)記錄
- ·SQL 高級(jí)使用
- ·交叉表查詢中的累計(jì)
- ·Sql Server 和 Access 操作數(shù)據(jù)庫(kù)結(jié)構(gòu)的常
- ·ACCESS中使用SQL語(yǔ)句應(yīng)注意的地方及幾點(diǎn)技
- ·一個(gè)計(jì)算庫(kù)存及結(jié)轉(zhuǎn)的例子
- ·如何實(shí)現(xiàn)動(dòng)態(tài)查詢余額
- ·如何用sql語(yǔ)句添加刪除主鍵?
- ·SQL中語(yǔ)法錯(cuò)誤(操作符丟失)問(wèn)題
- ·用Between 和 iif 實(shí)現(xiàn)靈活的查詢
- ·如何提取分組取前N條的記錄
- ·DELPHI中操作ACCESS數(shù)據(jù)庫(kù)
- ·Partition,讓你的分組統(tǒng)計(jì)更加得心應(yīng)手