Программная передача параметра в отчет о доступе

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
15
0
85 043
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

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

Это

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

Я считаю, что это самый чистый способ сделать это.

John Mo 30.12.2008 07:09

АГА! Это то, что я искал! Спасибо, Ремо.

Electrons_Ahoy 07.01.2009 20:00

Я использую Access 2003, и свойство «WhereCondition» на самом деле является четвертым параметром, поэтому в приведенном выше примере вам нужны только две запятые, а именно: DoCmd.OpenReport «rptReport», acViewPreview ,, «ID =» и Me.ID

John T 07.09.2012 02:10

Этот ответ следует улучшить, чтобы исключение параметра «FilterName» было менее неоднозначным. Т. е. поскольку большинство отчетов имеют существующий или встроенный запрос, в качестве «источника записи», «условия», это все, что необходимо передать в отчет. Параметр OpenArgs также является излишним при использовании для открытия отчета, поскольку для его реализации требуется гораздо больше усилий, и он чаще используется с DoCmd.OpenForm.

tahwos 20.01.2018 18:15

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

(select reportID from control)

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

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

  1. сохраните источник записей вашего отчета без параметров.

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

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

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

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

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

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

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

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

Вы делаете очень много ненужных конкатенаций. Все, что вам действительно нужно, это: "[Regional Office] = '" & cmboOffices.Value & "'". И будьте осторожны, если [Региональный офис] может включать символ "'". В Access нормально использовать двойные кавычки для строк, поэтому: "[Regional Office] = " & Chr (34) & cmboOffices.Value & Chr (34)

David-W-Fenton 25.06.2010 00:23

Кроме того, вам следует прекратить использование пробелов в именах объектов (а также не буквенно-цифровых символов). Поскольку вы можете, многие люди делают это, но это потому, что они не обращают внимания на тот факт, что имя поля и его заголовок могут быть установлены отдельно, поэтому поле RegionalOffice может иметь свойство Caption «Региональный офис». Это означает, что когда вы перетаскиваете его в форму или отчет, оно автоматически будет иметь понятный для человека заголовок (с пробелами), а имя поля является дружественным к SQL (т. Е. Не требует скобок).

David-W-Fenton 25.06.2010 00:25

Другие вопросы по теме