Параметризованный запрос в MS Access 2003 с использованием VBA
Хорошо. Я хочу использовать параметризованные запросы, чтобы избежать использования двойных или одинарных кавычек ("или") в моих данных.
В качестве простого примера, как будет выглядеть код VBA для параметризованной версии этого?
Dim qstr as String
Dim possiblyDangerousString as String
qstr = "SELECT MyTable.LastName from MyTable WHERE MyTable.LastName = '" & possiblyDangerousString & "';"
Я не вырезал и не вставлял это из своего кода (прямо сейчас в другом окне), поэтому возможна опечатка.
Разобравшись с этим простым примером, мне нужно перейти к более сложным операторам (несколько параметров и объединений). Спасибо за любой совет
2 ответа
В 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 символов.
Единственная проблема с использованием функции замены заключается в том, что в любом месте, где есть "", он будет заменен на "", даже если вы уже указали одинарную кавычку с другой одинарной кавычкой после нее: "" становится "" "" " (и так далее).
Вы можете создать процедуру или функцию для проверки строк "'[!']" И заменить их с помощью Like:
Открытая функция QualifySingleQuote(myStr as string) As String
If myStr Like "*'[!']*" Then
QualifySingleQuote = Replace(myStr, "'", "''")
Else
QualifySingleQuote = myStr
EndIf
Конечная функция