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 に答える