Поэтому у меня есть запрос, когда я выбираю поле и устанавливаю критерии, чтобы он выбирал только записи, основанные на текущем значении определенного поля в моей форме. Критерии выглядят так.
[Forms]![FORMAL_CERT_REVIEW_CHECK_FORM]![REVIEW_CHECK_ID]
Довольно простой материал. Но я столкнулся с проблемой, когда, когда я запускаю запрос, я получаю подсказку, в которой говорится, что мне нужно ввести значение. Я знаю, что это обычно происходит, когда вы устанавливаете критерии для чего-то, что может не существовать, или вы пишете его неправильно, но я проверил все это, и кажется, что все выглядит нормально.
Мне было любопытно, есть ли что-то, чего я мог бы потерять, как собственность на поле или что-то, о чем я не думал.
Когда вы напрямую открываете запрос, который включает ссылку на элемент управления формой, Access может извлекать значение параметра запроса из этого элемента управления в открытой форме.
Однако, если вы попытаетесь использовать тот же запрос, что и источник для набора записей, Access не разрешит параметр запроса из открытой формы.
Например, это мой запрос, qryREVIEW_CHECK_ID .
SELECT f.id, f.datetime_field, f.some_text FROM tblFoo AS f WHERE f.id=[Forms]![FORMAL_CERT_REVIEW_CHECK_FORM]![REVIEW_CHECK_ID];
Когда FORMAL_CERT_REVIEW_CHECK_FORM открывается, все работает нормально, когда я открываю форму напрямую … например, это …
DoCmd.OpenQuery "qryREVIEW_CHECK_ID"
Однако использование этого запроса в качестве источника для набора записей вызывает ошибку 3061, «Слишком мало параметров. Ожидаемый 1.»
Dim db As DAO.database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("qryREVIEW_CHECK_ID")
Обходным путем является открытие набора записей из объекта QueryDef
. И Eval()
чтобы Access разрешил параметр, используя имя параметра.
Dim qdf As DAO.QueryDef Set qdf = db.QueryDefs("qryREVIEW_CHECK_ID") qdf.Parameters(0) = Eval(qdf.Parameters(0).Name) Set rs = qdf.OpenRecordset
В вашем описании не указывается, является ли ваша форма простой формой или подформой. Я столкнулся с одной и той же проблемой и понял, что я только вводил имя подформы в критерии.
Предполагая, что у вас есть подформа FORMAL_CERT_REVIEW_CHECK_FORM в PARENT_FORM, ваши критерии должны читать
[Формы]! [PARENT_FORM]! [FORMAL_CERT_REVIEW_CHECK_FORM]! [REVIEW_CHECK_ID]
Надеюсь, это поможет вам или другим. Используется в Access 2016.