Как передать параметр в отчет о доступе программно?

У меня есть существующий Access MDB. Я добавляю кнопку команды в существующую форму, которая запускает существующий отчет. Сделано изменение заключается в том, что этой кнопке необходимо передать параметр, содержащий идентификатор записываемой записи - в настоящее время отчет выполняется для каждой записи в MDB.

Я изменил запрос, в котором работает отчет, для использования параметра для значения идентификатора, так что теперь, когда нажимается кнопка, запрашивает запрос на идентификатор записи для отчета, и отчет отображается так, как должен.

Однако, я не могу на всю жизнь понять, как передать параметр в отчет для использования запроса. Как я могу это сделать?

Ответы

Ответ 1

Метод DoCmd.OpenReport имеет различные аргументы, один из которых - оператор Where:

DoCmd.OpenReport"rptReport", acViewPreview,,"ID=" & Me.ID

Это

expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)

Ответ 2

Мой общий подход к этой проблеме заключается в том, чтобы сохранить критерии в базе данных, как правило, контрольную таблицу с одной строкой. Затем, чтобы ссылаться на ваши критерии, вы помещаете запрос в paranthesis, который возвращает одно значение, из критериев, которые вы хотите. В вашем случае это будет что-то вроде:

(select reportID from control)

Преимущество этого метода заключается в том, что контрольная таблица запоминает настройки для следующего запуска отчета. Конечно, ReportID будет привязан к полю в форме. Мне также нравится, что ваши запросы изолированы от форм; они могут выполняться независимо от форм.

Ответ 3

Предложение Where в файле docmd.openreport - это строка, которая использует тот же формат, что и предложение where в инструкции SQL.

Поводом поставить параметризованный запрос в docmd вместо RecordSource отчета является гибкость. Возможно, вам нужно открыть отчет без каких-либо пареметров/вернуть все записи или иметь возможность фильтровать в разных полях.

Ответ 4

Почему все хотят сделать это настолько сложным, я не знаю.

  • сохранить источник отчетов без параметров.

  • как было предложено Remou, передать критерии в соответствующем аргументе DoCmd.OpenReport.

Попытка сделать это любым другим способом будет заключаться в том, чтобы противостоять естественным методам выполнения задач в Access.

Ответ 5

Я знаю, что это старый пост, но это меня немного. Ошибка была "Недопустимое использование parren", однако проблема была в названии поля. Я создавал отчет из db, что кто-то делал распространенную ошибку, пробелы.

Чтобы передать параметр в запрос через предложение where, когда поле базы данных имеет пробел, используйте этот пример:

DoCmd.OpenReport "rptByRegionalOffice", acViewPreview, , "[" & "Regional Office" & "]" & "=" & "'" & cmboOffices.Value & "'"

Если вы подумаете об этом, вы увидите, что это приведет к созданию where [Regional Office]='string value' так же, как вы ожидаете в доступе к sql.

Ответ 6

Я сделал это так же, как описывает Фионуала. Но параметр идет не в отчет. Вместо этого появляется сообщение, в котором запрашивается значение фильтра.

DoCmd.OpenReport ReportName:="SalaryRangeByFilter", View:=acViewPreview, WhereCondition:="FamilyCode=ENS"

введите описание изображения здесь