Function about_inverted_comma()
Dim rs As New ADODB.Recordset
Dim strSQL As String
strSQL = "select * from 表1 where g=''"
'其實非常簡單,如果要匹配空字符,可以連續(xù)用兩個單引號 ''
'如果要匹配 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編譯器把它解釋為字符串a(chǎn)bc。而當(dāng)您需要表示一個單引號 ' 的時候,如果只用三個引號 ''',JET SQL的編譯器會無法解析辨認(rèn)中間的引號是一個正常的字符還是一個特殊字符(如果是特殊字符,編譯器會認(rèn)為和左右的兩個引號之間有關(guān)系)
為了解決這種情況,JET SQL中使用轉(zhuǎn)義字符(其他語言中也有這個概念)對特殊字符進(jìn)行轉(zhuǎn)義。在 '''' 中:第一個和第四個引號高速編譯器中間是字符串,第二個引號是一個轉(zhuǎn)義字符,表示后面的第三個 ' 不是一個特殊字符,而是一個普通的引號!所以'''' 經(jīng)過JET SQL引擎編譯后的輸出是一個普通的單引號 '
另,關(guān)于 VBA 中的字符串表達(dá)式也有相同的概念
在VBA中,為了表示字符串,首先我們需要用兩個引號把字符串引起來。例如 "abc", VBA編譯器把它解釋為字符串a(chǎn)bc。而當(dāng)您需要表示一個單引號 " 的時候,如果只用三個引號 """,VBA的編譯器會無法解析辨認(rèn)中間的引號是一個正常的字符還是一個特殊字符(如果是特殊字符,編譯器會認(rèn)為和左右的兩個引號之間有關(guān)系)
為了解決這種情況,VBA中使用轉(zhuǎn)義字符(其他語言中也有這個概念)對特殊字符進(jìn)行轉(zhuǎn)義。在 """" 中:第一個和第四個引號高速編譯器中間是字符串,第二個引號是一個轉(zhuǎn)義字符,表示后面的第三個 " 不是一個特殊字符,而是一個普通的引號!所以"""" 經(jīng)過VBA編譯器編譯后的輸出是一個普通的雙引號 "
在日常操作中,為了避免出現(xiàn)雙引號的問題,我們還可以直接寫一個函數(shù)來解決問題
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 = "帶 ' (單引號)的條件"
strSQL = "select * from 表1 where g='" & strCondition & "'"
'上述語句可能導(dǎo)致 JET SQL 錯誤,下面使用函數(shù)過濾單引號
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
Dim rs As New ADODB.Recordset
Dim strSQL As String
strSQL = "select * from 表1 where g=''"
'其實非常簡單,如果要匹配空字符,可以連續(xù)用兩個單引號 ''
'如果要匹配 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編譯器把它解釋為字符串a(chǎn)bc。而當(dāng)您需要表示一個單引號 ' 的時候,如果只用三個引號 ''',JET SQL的編譯器會無法解析辨認(rèn)中間的引號是一個正常的字符還是一個特殊字符(如果是特殊字符,編譯器會認(rèn)為和左右的兩個引號之間有關(guān)系)
為了解決這種情況,JET SQL中使用轉(zhuǎn)義字符(其他語言中也有這個概念)對特殊字符進(jìn)行轉(zhuǎn)義。在 '''' 中:第一個和第四個引號高速編譯器中間是字符串,第二個引號是一個轉(zhuǎn)義字符,表示后面的第三個 ' 不是一個特殊字符,而是一個普通的引號!所以'''' 經(jīng)過JET SQL引擎編譯后的輸出是一個普通的單引號 '
另,關(guān)于 VBA 中的字符串表達(dá)式也有相同的概念
在VBA中,為了表示字符串,首先我們需要用兩個引號把字符串引起來。例如 "abc", VBA編譯器把它解釋為字符串a(chǎn)bc。而當(dāng)您需要表示一個單引號 " 的時候,如果只用三個引號 """,VBA的編譯器會無法解析辨認(rèn)中間的引號是一個正常的字符還是一個特殊字符(如果是特殊字符,編譯器會認(rèn)為和左右的兩個引號之間有關(guān)系)
為了解決這種情況,VBA中使用轉(zhuǎn)義字符(其他語言中也有這個概念)對特殊字符進(jìn)行轉(zhuǎn)義。在 """" 中:第一個和第四個引號高速編譯器中間是字符串,第二個引號是一個轉(zhuǎn)義字符,表示后面的第三個 " 不是一個特殊字符,而是一個普通的引號!所以"""" 經(jīng)過VBA編譯器編譯后的輸出是一個普通的雙引號 "
在日常操作中,為了避免出現(xiàn)雙引號的問題,我們還可以直接寫一個函數(shù)來解決問題
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 = "帶 ' (單引號)的條件"
strSQL = "select * from 表1 where g='" & strCondition & "'"
'上述語句可能導(dǎo)致 JET SQL 錯誤,下面使用函數(shù)過濾單引號
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