vba查詢 - vba sql教學




ms access 2003中使用vba進行參數化查詢 (2)

好。 我想要使​​用參數化查詢來避免在數據中處理嵌入式雙引號或單引號(“或”)。

舉一個簡單的例子,VBA代碼對於這個參數化版本來說會是什麼樣的?

Dim qstr as String

Dim possiblyDangerousString as String

qstr = "SELECT MyTable.LastName from MyTable WHERE MyTable.LastName = '" & possiblyDangerousString & "';"

我沒有從我的代碼中剪切和粘貼(現在在另一個框中),所以可能會出現拼寫錯誤。

一旦我找出這個簡單的例子,我需要移動到更複雜的語句(多個參數和連接)。 感謝您的任何建議


使用Replace函數的唯一的麻煩是,任何有“”“的地方,即使你已經用單引號在單引號之後限定了單引號,它也會替換為”“”,“''”變成“'''' “ (等等)。

您可以創建一個過程或函數來檢查“ [!'] ”字符串,並使用Like來替換這些字符串:

公共職能QualifySingleQuote(myStr作為字符串)作為字符串

If myStr Like "*'[!']*" Then
    QualifySingleQuote = Replace(myStr, "'", "''")
Else
    QualifySingleQuote = myStr
EndIf

結束功能


在VBA中,你可以使用如下的東西:

Dim db As DAO.Database
Dim qdf As QueryDef
Dim strSQL as String

Set db = CurrentDb
strSQL = "PARAMETERS txtLastName Text(150); " _
    & "SELECT LastName FROM MyTable " _
    & "WHERE LastName=txtLastName"

''Create a temporary query 
Set qdf = db.CreateQueryDef("", strSQL)

qdf.Parameters!txtLastName = Trim(possiblyDangerousString)

這個例子沒什麼用處,因為你現在要做什麼查詢? 請注意,您可以存儲參數查詢並將參數分配到VBA中。 還要注意備註字段成為一個問題,因為一個參數只能接受255個字符。





parameterized