Ошибка времени выполнения "3061". Слишком мало параметров. Ожидаемый 1. (Access 2007)
У меня есть следующая строка 'set recordset'
, с которой я не могу работать. Параметры кажутся правильными в соответствии со всей доступной помощью, которую я могу найти по этому вопросу.
Появится сообщение об ошибке:
"Ошибка времени выполнения '3061'. Слишком мало параметров. Ожидаемый 1."
Вот строка кода:
Set rs = dbs.OpenRecordset("SELECT Centre_X, Centre_Y FROM [qry_all_details]
WHERE ID = " & siteID & ";", dbOpenSnapshot)
Where rs is the recordset (Dim rs As Recordset) and dbs = CurrentDb()
Любая помощь будет оценена.
Я попытался удалить причину WHERE
без эффекта, а также использовать одинарные кавычки между двойными кавычками, но без радости.
Большое спасибо.
Ответы
Ответ 1
"Ошибка времени выполнения '3061'. Слишком мало параметров. Ожидаемый 1."
Я считаю, что это происходит, когда имена полей в вашем sql-запросе не соответствуют имени (-ам) поля таблицы, то есть имя поля в запросе неверно или, возможно, в таблице вообще отсутствует поле.
Ответ 2
у вас есть:
WHERE ID = " & siteID & ";", dbOpenSnapshot)
вам нужно:
WHERE ID = "'" & siteID & "';", dbOpenSnapshot)
Обратите внимание на дополнительные цитаты ('
)., это убивает меня каждый раз
Изменить: добавлена отсутствующая двойная кавычка
Ответ 3
Моя проблема также была решена одиночными кавычками вокруг имени переменной
Ответ 4
(Для тех кто читает все ответы). Мой случай был просто тот факт, что я создал выражение SQL, используя формат Forms! Table! Control. Этот формат в запросе одобрен, но DAO его не распознает. Я удивлен, что никто не прокомментировал это.
Это не работает:
Dim rs As DAO.Recordset, strSQL As String
strSQL = "SELECT * FROM Table1 WHERE Name = Forms!Table!Control;"
Set rs = CurrentDb.OpenRecordset(strSQL)
Хорошо:
Dim rs As DAO.Recordset, strSQL, val As String
val = Forms!Table!Control
strSQL = "SELECT * FROM Table1 WHERE Name = '" & val & "';"
Set rs = CurrentDb.OpenRecordset(strSQL)
Ответ 5
Моя проблема оказалась, я изменил таблицу, чтобы добавить столбец с именем Char
.
Поскольку это зарезервированное слово в MS Access, ему нужны квадратные браксеты (одинарная или двойная кавычка не подходят), чтобы оператор alter работал до Затем я смогу обновить вновь созданный столбец.
Ответ 6
Убедитесь, что [qry_all_details] существует и выполняется. Я подозреваю, что это или какой-либо запрос, который он использует, отсутствует параметр.
Ответ 7
Я получил такое же сообщение об ошибке раньше.
в моем случае это было вызвано литьем типа.
проверьте, является ли siteID строкой, если это вы должны добавить простые кавычки.
надеюсь, что это вам поможет.
Ответ 8
Я получил ту же ошибку с чем-то вроде:
Set rs = dbs.OpenRecordset _
( _
"SELECT Field1, Field2, FieldN " _
& "FROM Query1 " _
& "WHERE Query2.Field1 = """ & Value1 & """;" _
, dbOpenSnapshot _
)
Я исправил ошибку, заменив "Query1" на "Query2"
Ответ 9
Имеет ли запрос больше, чем параметр siteID, потому что, если вы хотите запустить запрос, один параметр все еще не заполнен, что дает вам ошибку
Ответ 10
В моем случае я получил эту ошибку, когда попытался использовать в запросе новый столбец, который я добавил в таблицу MySQL (связанную с MS Access), но не обновил ее внутри MS Access.
Чтобы обновить связанную удаленную таблицу:
- Откройте вкладку "Связанный менеджер таблиц" (вкладка "Внешние данные" на ленте);
- Установите флажок рядом с таблицей, которую хотите обновить,
- Нажмите кнопку "ОК".
Ответ 11
В моем случае я просто изменил способ создания таблицы и непреднамеренно изменил имя поля, которое я пытался запросить. Убедитесь, что имена полей, которые вы ссылаетесь в запросе, действительно существуют в запросе таблицы/запроса.
Ответ 12
Это сообщение также можно открыть, если в полях, в которых вы определяете соединение, есть опечатка
Ответ 13
Спасибо за решение Джона Доу, которое очень помогло. Мой очень похож с некоторой разницей, используя TempVars
Вместо:
strSQL = "SELECT * FROM Table1 WHERE Name = Forms!Table!Control;"
Я использовал:
strSQL = "SELECT * FROM Query1" , Query1 being common for other usage
Query1 as:
"Select Field1, Field2 from Table1 where Id= [TempVars]![MyVar]
И, аналогично, удаление [TempVars]![MyVar]
из поля зрения решило проблему.
Ответ 14
В моем случае у меня был INSERT INTO TableA (_, _, _) SELECT _, _, _ из TableB, ошибка времени выполнения 33061 была ошибкой поля. Как упомянул @david. Либо это была ошибка поля: то, что я написал в операторе SQL как имя столбца, не совпадало с именами столбцов в реальных таблицах доступа для TableA или TableB.
У меня также есть ошибка как @DATS, но это была ошибка времени выполнения 3464.