Access 2000 中缺少操作员错误?

Posted

技术标签:

【中文标题】Access 2000 中缺少操作员错误?【英文标题】:Missing Operator Error in Access 2000? 【发布时间】:2012-11-05 09:31:29 【问题描述】:

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

如果名称字段中的值包含撇号等特殊字符,我该如何摆脱这个错误?

请帮我解决这个问题。

【问题讨论】:

请参阅***.com/q/199889/603855 并考虑使用参数化查询,而不是将“'”(单引号)替换为“''”(两个单引号)。 参数只有一个小问题,那就是长度超过 255 个字符的数据(备忘录数据类型)。但是,在这种情况下不会有问题。 【参考方案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 语句中的参数周围加上引号,也不必担心您为参数值提供的文本中包含的任何引号。 db 引擎期望接收文本并将其视为这样。

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

【讨论】:

以上是关于Access 2000 中缺少操作员错误?的主要内容,如果未能解决你的问题,请参考以下文章

Access 2010:查询表达式中的语法错误(缺少运算符)

在 MS Access 中的查询表达式中出现语法错误(缺少运算符)

从 Access 2000 访问 SQL Server 2005 的一般网络错误

odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 查询表达式中的语法错误(缺少运算符)

OleDb 进入 Access 数据库的查询表达式中缺少运算符

带有触发器错误的 Microsoft Access 链接表 (ASE)