我在组合字段的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 ='Dr.雷迪的实验室。';'
那是名称字段中的值包含postrophe等特殊字符等。如何摆脱此错误?
请帮助我解决此问题。
使用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语句中包含参数周围的引号,也不需要您为参数值提供的文本中包含的任何引号。DB Engine希望收到文本,并将其对待。
我还使用了[Name]
周围的方括号,因为它是一个保留的单词。在这种情况下,这似乎不是问题。我通常将这样的名字作为预防措施。