Должны ли где-нибудь быть скобки, чтобы «И» работало?
И SpecialistSearch, и SupplierSearch являются несвязанными полями со списком. Они работают индивидуально для отчета.
Когда я добавляю «И», отчет терпит неудачу.
DoCmd.OpenReport "Order Report", acPreview, , "[Specialist] = " & Chr(34) & Me!SpecialistSearch & Chr(34) And "[Supplier] = " & Chr(34) & Me!SupplierSearch & Chr(34)
Я получаю сообщение об ошибке.
Несоответствие типов
Но не показывает мне, что не так.
Спасибо @BrianMStafford, это сработало! Всегда так сложно со всеми этими цитатами.
Самый правильный способ, имхо, это использовать параметры.
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
.
Последующий вопрос: как бы я использовал «И» и «ИЛИ» в этом утверждении? Что, если пользователю нужен только поставщик или специалист? Я заметил, что мой отчет не загружается, если выбран только один.
@SharonIsKaren Я не уверен, что понимаю тебя. Если вы хотите, чтобы поле не имело значения, когда оно пустое, вы можете попробовать ([Specialist] = pSpecialist OR pSpecialist & '' = '') AND [Supplier]=pSupplier OR pSupplier & '' = '')
в своем WHERE
состоянии.
В качестве альтернативы рассмотрите возможность использования сохраненного запроса, который указывает непосредственно на элементы управления формы. Затем обновите или используйте этот запрос в качестве источника записи отчета в 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
Попробуйте переместить «И» внутри скобки вот так
"And [Supplier] = "
.