Отсутствует ошибка оператора в Access 2000?

Я использую код VBA в событии onchange поля со списком. код как ниже

Dim db As Database
Dim rs As DAO.Recordset
Dim qrystr As String
Dim cond As String
Dim qrystr_CID As String

'cond = [Forms]![PharmDrug].[Commercial drugs subform2].Form.DrugCompanyName & vbNullString
cond = Me.DrugCompany & vbNullString

'MsgBox cond

Set db = CurrentDb

If cond = vbNullString Then
  ' do nothing
Else
  qrystr = "SELECT DrugCompanyID FROM [Drug Company] WHERE Name ='" & cond & "';"



Set rs = db.openrecordset(qrystr)


qrystr_CID = rs!DrugCompanyID



Me.DrugCompanyID = qrystr_CID

rs.Close
Set rs = Nothing
End If

это работает нормально, но выдает синтаксическую ошибку 3075 (отсутствует оператор) в выражении запроса 'Name= 'Dr. Лаборатория Реди.';'

это если значение в поле имени содержит специальные символы, такие как апостроф и т. д. Как мне избавиться от этой ошибки?

Пожалуйста, помогите мне решить эту проблему.

1 ответ

Решение

Используйте QueryDef для запроса параметров.

Dim qdf As DAO.QueryDef
qrystr = "PARAMETERS which_name TEXT(255);" & vbCrLf & _
    "SELECT DrugCompanyID FROM [Drug Company] WHERE [Name] = [which_name];"
Set qdf = db.CreateQueryDef(vbNullString, qrystr)
qdf.Parameters("which_name") = cond
Set rs = qdf.OpenRecordset

Вам не нужно включать кавычки вокруг параметра в инструкции SELECT, а также не беспокоиться о кавычках, содержащихся в тексте, который вы вводите для значения параметра. Двигатель БД ожидает получения текста и будет обрабатывать его как таковой.

Я также использовал квадратные скобки вокруг [Name] потому что это зарезервированное слово. Это, кажется, не было проблемой в этом случае; Я обычно называю такие имена в качестве меры предосторожности.

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