Используйте переменную для выбора записей в наборе записей

Я пытаюсь выбрать записи из таблицы Access, используя переменную String из результата выбора ComboBox. Я подтвердил, что переменная (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

person Karicula    schedule 25.05.2016    source источник


Ответы (2)


Заключите критерии в кавычки, если это строка. то есть

strSQL = "SELECT * FROM tblMember_Contact where id_members = '" & zBEN & "' ORDER BY id_members"
person Wayne G. Dunn    schedule 25.05.2016

Вы можете объединить значение переменной вместо ее имени в текст оператора 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()
person HansUp    schedule 25.05.2016