Поиск в таблице для поиска определенного идентификатора: ошибка 80040e10 нет значения для одного или нескольких параметров - PullRequest
3 голосов
/ 10 октября 2011

В Access 2007 я ищу таблицу, чтобы найти определенный идентификатор.Идентификационный адрес задается в текстовом поле пользователем IDTxt.
Я получаю ошибку 80040e10 без значения для одного или нескольких параметров.

Private Sub Search_Click()

 'here a new part I'm not sure about...
Dim cn As ADODB.Connection
Dim rsQ As ADODB.Recordset

Set cn = CurrentProject.Connection
Set rsQ = New ADODB.Recordset

Dim strSQL As String

Dim ID_number As Integer
Dim blnExists As Boolean
blnExists = False
ID_number = IDTxt.Value

strSQL = "SELECT * FROM Table1  WHERE ID = ID_number;"
rsQ.Open strSQL, cn, adOpenStatic

If rsQ.RecordCount <> 0 Then
     ' Found it
    blnExists = True
    MsgBox "found"
Else
    MsgBox "not found"
End If

End Sub

Ответы [ 3 ]

3 голосов
/ 10 октября 2011

Это должно быть:

rSQL = "SELECT * FROM Table1 WHERE ID = " & ID_number

[Примечание: было бы лучше использовать параметризованный запрос для защиты от внедрения SQL.]

2 голосов
/ 10 октября 2011

Предложение: используйте объект Command для предоставления значения параметра, например,

Dim cn As ADODB.Connection
Dim rsQ As ADODB.Recordset

Set cn = .ActiveConnection

Set rsQ = New ADODB.Recordset

Dim strSQL As String

Dim ID_number As Integer
Dim blnExists As Boolean
blnExists = False
ID_number = IDTxt.Value

strSQL = "SELECT * FROM Table1  WHERE ID = ID_number;"

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
    Set .ActiveConnection = cn
    .NamedParameters = True
    .CommandType = adCmdText
    .CommandText = strSQL
    .Parameters.Append .CreateParameter("ID_number", adInteger, , , ID_number)
    Set rsQ = .Execute
End With

If rsQ.RecordCount <> 0 Then
     ' Found it
    blnExists = True
    MsgBox "found"
Else
    MsgBox "not found"
End If
2 голосов
/ 10 октября 2011

Передача строки без подстановки значения;

strSQL = "SELECT * FROM Table1  WHERE ID = ID_number;"

должно быть

strSQL = "SELECT * FROM Table1  WHERE ID = " & ID_number

как ID_number только в контексте переменной VBA вне строки.

(Вы также не выполняете проверку типа на ID_number, поэтому текст в неограниченном текстовом поле может быть ошибочным, а для строковых параметров - уязвимость внедрения)

Также обратите внимание, что RecordCount может возвращать -1 в зависимости от расположения / типа курсора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...