Как использовать «И» при печати отчета с несколькими параметрами?

Должны ли где-нибудь быть скобки, чтобы «И» работало?

И SpecialistSearch, и SupplierSearch являются несвязанными полями со списком. Они работают индивидуально для отчета.

Когда я добавляю «И», отчет терпит неудачу.

DoCmd.OpenReport "Order Report", acPreview, , "[Specialist] = " & Chr(34) & Me!SpecialistSearch & Chr(34) And "[Supplier] = " & Chr(34) & Me!SupplierSearch & Chr(34)

Я получаю сообщение об ошибке.

Несоответствие типов

Но не показывает мне, что не так.

Попробуйте переместить «И» внутри скобки вот так "And [Supplier] = ".

Brian M Stafford 21.12.2020 19:49

Спасибо @BrianMStafford, это сработало! Всегда так сложно со всеми этими цитатами.

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

Ответы 2

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

Самый правильный способ, имхо, это использовать параметры.

DoCmd.SetParameter "pSpecialist", Me!SpecialistSearch.Value
DoCmd.SetParameter "pSupplier", Me!SupplierSearch.Value
DoCmd.OpenReport "Order Report", acPreview, , "[Specialist] = pSpecialist And [Supplier]=pSupplier"

В качестве альтернативы вы можете создать допустимый оператор SQL, что означает в кавычках И с начальным пробелом в кавычках.

DoCmd.OpenReport "Order Report", acPreview, , "[Specialist] = " & Chr(34) & Me!SpecialistSearch & Chr(34) " And [Supplier] = " & Chr(34) & Me!SupplierSearch & Chr(34)

Этот второй вариант открывает вам SQL-инъекцию, что может показаться незначительным, потому что для баз данных Access мы обычно полностью доверяем пользователю, но это также может привести к раздражающим ошибкам, например, если ваш поставщик — Джек «Гигант». Стулья, это может привести к поломке оператора SQL и сбоям в работе приложения.

Отличный лучший ответ в MS Access! Я всегда забываю SetParameter.

Parfait 21.12.2020 22:12

Последующий вопрос: как бы я использовал «И» и «ИЛИ» в этом утверждении? Что, если пользователю нужен только поставщик или специалист? Я заметил, что мой отчет не загружается, если выбран только один.

SharonIsKaren 22.12.2020 15:25

@SharonIsKaren Я не уверен, что понимаю тебя. Если вы хотите, чтобы поле не имело значения, когда оно пустое, вы можете попробовать ([Specialist] = pSpecialist OR pSpecialist & '' = '') AND [Supplier]=pSupplier OR pSupplier & '' = '') в своем WHERE состоянии.

Erik A 22.12.2020 17:23

В качестве альтернативы рассмотрите возможность использования сохраненного запроса, который указывает непосредственно на элементы управления формы. Затем обновите или используйте этот запрос в качестве источника записи отчета в VBA. Обратите внимание: форма должна быть открыта (но не запрос), чтобы элементы управления формы читались как параметры. Это позволяет избежать необходимости использования кавычек или амперсандов.

SQL (настроить myForm имя)

SELECT Col1, Col2, Col3
FROM myTable
WHERE [Specialist] = Forms!myForm!SpecialistSearch 
  AND [Supplier] = Forms!myForm!SupplierSearch

VBA

Использование вышеуказанного запроса в качестве источника записи

DoCmd.OpenReport "Open Report", acPreview

Обновление источника записи для вышеуказанного запроса

DoCmd.OpenReport "Order Report", acViewReport                     ' OPEN IN REPORT VIEW
Reports("Order Report").Report.RecordSource = "mySavedQuery"      ' ADJUST RECORDSOURCE

DoCmd.OpenReport "Open Report", acPreview                         ' OPEN IN PREVIEW MODE

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