Параметризованный запрос в 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

Конечная функция

Другие вопросы по тегам