Как передать параметр в отчет о доступе программно?
У меня есть существующий 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"
введите описание изображения здесь