Как передать параметр в отчет о доступе программно? - PullRequest
15 голосов
/ 30 декабря 2008

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

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

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

Ответы [ 5 ]

21 голосов
/ 30 декабря 2008

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

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

То есть

expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
3 голосов
/ 30 декабря 2008

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

(select reportID from control)

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

2 голосов
/ 02 февраля 2009

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

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

1 голос
/ 24 июня 2010

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

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

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

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

1 голос
/ 02 января 2009

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

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

  2. как предложено Рему, передайте критерии в соответствующем аргументе DoCmd.OpenReport.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...