2012-11-05 40 views
1

我在組合字段的onchange事件中使用vba代碼。代碼如下在Access 2000中缺少操作員錯誤?

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 

這工作得很好,但在查詢表達式給出錯誤3075語法錯誤(缺少運算符)「名稱=」博士雷迪的實驗室';''

這就是如果名稱字段中的值包含像撇號等特殊字符我怎樣才能擺脫這個錯誤?

請幫我解決這個問題。

+3

請參閱http://stackoverflow.com/q/199889/603855並考慮使用參數化查詢,而不是用「'」(兩個單引號)替換「'」(單引號)。 –

+1

參數只有一個小問題,即數據長度超過255個字符(備註數據類型)。但是,在這種情況下它不會成爲問題。 – Fionnuala

回答

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]附近使用了方括號,因爲它是一個保留字。在這種情況下,這似乎不成問題;爲了預防,我經常使用這些名稱。

+0

這是完美的作品。非常感謝@HansUp – Gopipuli

相關問題