Access 2007 Runtime Ошибка - PullRequest
       16

Access 2007 Runtime Ошибка

0 голосов
/ 16 июня 2011

Я не уверен, что это правильный сайт для публикации этого вопроса, но здесь он идет ...

В Access 2007 я получаю сообщение об ошибке «Ошибка времени выполнения« 3061 »: слишком мало параметров.Ожидаемый 1 "на этом фрагменте кода VBA:

Private Sub btnCheck_Click()

    Dim rs As Recordset
    Dim db As Database
    Dim id As String
    Dim query As String
    MsgBox ("one")
    Set db = CurrentDb()
    id = Me.UniqueID.Value
    query = "SELECT [Unique_ID] from tblPatients WHERE [Unique_ID] =" & id
    MsgBox (id)
    Set rs = db.OpenRecordset(query) <<<<<HIGHLIGHTED LINE

    If IsNull(rs) Then
        Me.lblCheck.Caption = "NEW"
    Else
        Me.lblCheck.Caption = "EXISTS"
    End If

End Sub

Источником данных является таблица, а не запрос.Любая помощь будет высоко ценится!

Ответы [ 3 ]

5 голосов
/ 16 июня 2011

В вашей таблице нет поля с именем Unique_ID tblPatients.Если вы опубликовали весь свой код, то это единственное возможное объяснение.

РЕДАКТИРОВАТЬ : Ваш комментарий подтвердил мои подозрения:

Я только что трижды проверил: PИмя таблицы: tblPatients Имя столбца: Уникальный идентификатор

Вы добавили подчеркивание в коде, которого не было в имени вашего поля.Вы правильно используете квадратные скобки, но правильный код должен быть:

query = "SELECT [Unique ID] from tblPatients WHERE [Unique ID] =" & id

Обратите внимание на удаленные подчеркивания.В качестве альтернативы (и я бы сказал, что желательно, если вы находитесь на ранних стадиях разработки), вы можете переименовать поле в таблице на Unique_ID или UniqueID и избавить себя от многих хлопот.

1 голос
/ 17 июня 2011

Я предлагаю вам добавить оператор Debug.Print в ваш код следующим образом:

query = "SELECT [Unique_ID] from tblPatients WHERE [Unique_ID] =" & id
Debug.Print "query: " & query

Причиной такого предложения является то, что Debug.Print напечатает ваш оператор SQL в Immediate Window.(Вы можете использовать сочетание клавиш Ctrl + g, чтобы попасть в окно «Немедленно».) Затем вы можете просмотреть завершенную строку, которую вы просите использовать OpenRecordset.Часто просто видя эту строку (а не пытаясь представить, как она должна выглядеть), вы сможете определить проблему.Если нет, вы можете скопировать строку из окна Immediate и вставить ее в представление SQL нового запроса ... конструктор запросов может помочь вам точно определить синтаксические ошибки ... или в этом случае, я думаю, он может предупредить вас о том, какиеэлемент в вашем запросе, который механизм базы данных не распознает, и поэтому он должен быть параметром.И если этот шаг по-прежнему не решает проблему, вы можете вставить строку в свой вопрос о переполнении стека.

Наконец, я думаю, что у вас может быть логическая ошибка с IsNull (rs) ... потому что rsбыл объявлен набором записей, он никогда не будет нулевым.В следующем примере инструкция SELECT не возвращает записей.И оператор Debug.Print сообщает IsNull(rs): False как до, так и после OpenRecordset.

Public Sub RecordsetIsNeverNull()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSql As String

    strSql = "SELECT * FROM tblFoo WHERE 1 = 2;"
    Set db = CurrentDb

    Debug.Print "IsNull(rs): " & IsNull(rs)
    Set rs = db.OpenRecordset(strSql)
    Debug.Print "IsNull(rs): " & IsNull(rs)

    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

Редактировать : в соответствии с Имена проблем и зарезервированные слова в Access , query - слово, зарезервированное для доступа.На самом деле я не думаю, что это является причиной вашей проблемы, но предлагаю вам все равно ее изменить ... возможно strQuery .

1 голос
/ 16 июня 2011

Мало что может вызвать эту ошибку. Распространенная ошибка - имена таблиц и полей с ошибками. Я хотел бы проверить, правильно ли написано tblPatients или что не требуется предварительный суффикс, такой как dbo.tblPatients, если таблица связана с соединением с сервером. Также мы предполагаем, что id - это число, а не текстовое поле, которое может вызвать ошибку, если у вас нет правильных кавычек. то есть. было бы вместо этого читать query = "SELECT [Unique_ID] из tblPatients WHERE [Unique_ID] = '" & id & "';" *

Наконец, попробуйте разместить ";" как я делал в строке выше.

...