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] 查询表达式中的语法错误(缺少运算符)