我在组合字段的onchange事件中使用vba代码。代码如下
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
这工作正常,但它在查询表达式'Name ='博士中给出错误3075语法错误(缺少运算符)雷迪的实验室。';'
如果name字段中的值包含撇号等特殊字符,我该怎样才能摆脱这个错误?
请帮我解决这个问题。
答案 0 :(得分:2)
使用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]
周围使用了方括号,因为它是一个保留字。在这种情况下,这似乎不是一个问题;作为预防措施,我经常将这些名称括起来。