1

我在组合字段的 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.中给出错误3075语法错误(缺少运算符)。雷迪的实验室。';'

那是如果名称字段中的值包含撇号等特殊字符。我怎样才能摆脱这个错误?

请帮我解决这个问题。

4

1 回答 1

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 语句中的参数周围包含引号,也不必担心您为参数值提供的文本中包含的任何引号。db 引擎希望接收文本并将其视为这样。

我还使用了方括号,[Name]因为它是保留字。在这种情况下,这似乎不是问题。作为预防措施,我经常将这些名称括起来。

于 2012-11-05T09:43:05.017 回答