0

ComboBox 選択の結果から String 変数を使用して、Access テーブルからレコードを選択しようとしています。変数 (zBEN) を選択すると、正しいデータが含まれていることを確認しました。WHEREステートメントの一部に手動でデータを入力すると、完全に機能します。zBEN を使用するとクラッシュします。一重引用符を使用しないとエラーが発生し、引用符を使用すると空のレコード セットが取得されます。エラーは 3061、パラメーターが少なすぎます。予期される 1。このエラーは通常、データ型の不一致またはフィールド名の誤りです。

Private Sub cmdDisplayMembers_Click()
'this displays a record in the dataset - from button click
Dim dbsContacts As DAO.Database
Dim rcdContacts As DAO.Recordset
Dim conArray As Variant              'this is the record array
Dim intArraySize As Integer         'array size
Dim iCtr As Integer                 'counter
Dim zBEN As Variant
Dim zName, strSQL  As String
zBEN = Me.cbxMembersList

Set dbsContacts = CurrentDb
'this statement works: (and has the combobox value manually entered
strSQL = "SELECT * FROM tblMember_Contact where id_members = '201208FEAR' ORDER BY id_members"
'this statement gives an error 3061, 1:
'strSQL = "SELECT * FROM tblMember_Contact where id_members = zBEN ORDER BY id_members"
'this statement gives an empty record set
'strSQL = "SELECT * FROM tblMember_Contact where id_members = 'zBEN' ORDER BY id_members"

Set rcdContacts = dbsContacts.OpenRecordset(strSQL)
If Not rcdContacts.EOF Then
    rcdContacts.MoveFirst              'start the counter at Row #1
    intArraySize = rcdContacts.RecordCount
    iCtr = 1
    ReDim conArray(10)

    Do Until rcdContacts.EOF
        conArray(iCtr) = rcdContacts.Fields("member_info")
        Debug.Print "Item: "; iCtr & " " & conArray(iCtr)

        iCtr = iCtr + 1
        rcdContacts.MoveNext
    Loop
MsgBox ("Error no records")
End If

If IsObject(rcdContacts) Then Set rcdContacts = Nothing
txtCon1 = conArray(1)
txtCon2 = conArray(2)
MsgBox (zBEN)
End Sub
4

2 に答える 2

1

文字列の場合は、条件を引用符で囲みます。すなわち

strSQL = "SELECT * FROM tblMember_Contact where id_members = '" & zBEN & "' ORDER BY id_members"
于 2016-05-25T15:38:04.117 に答える
1

ウェインがすでに提案したように、名前の代わりに変数の値を SQL ステートメントのテキストに連結できます。

strSQL = "SELECT * FROM tblMember_Contact where id_members = '" & zBEN & "' ORDER BY id_members"

ただし、パラメーター クエリ アプローチに切り替える場合は、引用符について気にする必要はありません。

strSQL = "SELECT * FROM tblMember_Contact where id_members = [which_id] ORDER BY id_members"
Dim qdf As DAO.QueryDef
Set qdf = dbsContacts.CreateQueryDef(vbNullString, strSQL )
qdf.Parameters("which_id").Value = Me!cbxMembersList.Value
Set rcdContacts = qdf.OpenRecordset()
于 2016-05-25T15:44:50.960 に答える