2012-06-19 4 views
4

Я пытаюсь получить доступ к запросу с помощью кода VBA. Кажется, я сделал это так 100 раз. Мой код (на командной кнопке) начинается так:Ошибка при использовании QueryDefs для возврата Recordset

Dim rstDocCount As Recordset 

Set rstDocCount = CurrentDb.QueryDefs("DocCount").OpenRecordset 

rst.MoveFirst 

Я получаю сообщение об ошибке:

Ошибка выполнения «3061»: Слишком мало параметров. Ожидаемые 1.

Линия Set rstDocCount подсвечена желтым цветом.

Что я делаю неправильно? Единственным параметром должно быть имя запроса, и я это четко понимаю.

+1

Открыть запрос в окне базы данных. Он покажет вам, какое поле неверно или какой параметр отсутствует. – Fionnuala

+1

Нет проблем с запросом. Я могу открыть его, пока форма открыта, из которой этот код работает. В запросе есть параметр Forms! Boxing! BoxID (Бокс - текущая форма). Мое подозрение в том, что vba по какой-то причине не может прочитать это поле. Я обнаружил, что если я заменю запрос другими запросами, использующими параметр в форме бокса, я получаю ту же ошибку. Если я заменил его более простым запросом, проблем не будет. Поэтому я думаю, что мне нужно, чтобы запрос показывал каждую запись, а затем прокручивал их, чтобы получить тот, который соответствует BoxID в моей форме. –

+0

Вам просто нужно установить параметр. Смотри ниже. – Fionnuala

ответ

6

Понадобится:

Dim rstDocCount As Recordset 
Dim qdf As QueryDef 

    Set qdf = CurrentDb.QueryDefs("DocCount") 

    qdf.Parameters("Forms!Boxing!BoxID") = Forms!Boxing!BoxID 
    Set rstDocCount = qdf.OpenRecordset 

    rstDocCount.MoveFirst 
+0

Это полностью сработало! Благодаря! –

1

«Единственный параметр должен быть имя запроса и я ясно указал, что

Метод OpenRecordset принимает 3 параметра: Type; Options; и LockEdit. Однако все 3 из этих параметров являются необязательными, поэтому «Слишком мало параметров» ошибка не о параметрах OpenRecordset.

Вместо этого, как отметил Remou, ваш QueryDef включает в себя что-то (часто выражение поля), которое механизм db не может найти в исходной таблице запроса. В этой ситуации он рассматривает недостающее что-то как параметр и требует значения для этого параметра.

+0

См. Мой комментарий выше, отвечая на вопрос Remou. –

Смежные вопросы