параметризованный запрос в MS Access 2003 с использованием VBA - PullRequest
2 голосов
/ 23 февраля 2010

Хорошо. Я хочу использовать параметризованные запросы, чтобы избежать использования двойных или одинарных кавычек ("или") в моих данных.

В качестве простого примера, как будет выглядеть код VBA для параметризованной версии этого?

Dim qstr as String

Dim possiblyDangerousString as String

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

Я не вырезал и не вставил это из своего кода (сейчас в другом окне), поэтому возможна опечатка.

Как только я разберусь с этим простым примером, мне нужно перейти к более сложным операторам (несколько параметров и объединений). Спасибо за любой совет

Ответы [ 2 ]

4 голосов
/ 23 февраля 2010

В 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 голосов
/ 28 августа 2010

Единственная проблема, связанная с использованием функции замены, заключается в том, что в любом месте, где есть «», он будет заменен на «», даже если вы уже указали одинарную кавычку с другой одинарной кавычкой после нее: '' '"(и т. д.).

Вы можете создать процедуру или функцию для проверки строк " '[!'] " и заменить их с помощью Like:

Открытая функция QualifySingleQuote (myStr as string) As String

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

Функция завершения

...