2010-02-23 72 views
2

好的。我想使用參數化查詢,以避免與嵌入式雙或單引號(」或「)在我的數據處理。使用vba訪問2003的參數化查詢

舉一個簡單的例子,會是什麼VBA代碼看起來像這樣的參數優化版本?

Dim qstr as String 

Dim possiblyDangerousString as String 

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

我絲毫沒有削減和(現在在不同的盒子)從我的代碼粘貼此,所以有可能是一個錯字。

一旦我弄清楚這個簡單的例子,我需要移動到更復雜報表(多個參數和連接) 感謝您的任何建議

回答

4

在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個字符。

3

使用Replace函數的唯一問題是,任何有「」的地方都會用「''」代替,即使你已經用單引號限定了單引號,「''」變成了「 ''''「 (等等)。

您可以創建一個過程或函數來檢查 「'[!']」 字符串,並取代那些使用LIKE:

公共功能QualifySingleQuote(myStr中的字符串)作爲字符串

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

結束功能