0

我正在尝试使用来自 ComboBox 选择结果的字符串变量从 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

如果条件是字符串,请将条件括在引号中。IE

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

正如 Wayne 已经建议的那样,您可以将变量的值而不是其名称连接到 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 回答