Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически)
Текущее время: 27.11.2024 13:48

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Условие IN в запросе
СообщениеДобавлено: 29.04.2020 19:28 
Не в сети

Зарегистрирован: 15.12.2014 16:50
Сообщения: 106
Добрый день. Нам надо в свойствах поля, в выборе значений из списка привязать выбор к таблице с запросом, чтобы сразу фильтр включался. Селект см.на картинке 1, в нём хочу указать IN, потому что сравниваемое поле CategoryCalc имеет несколько значений, через запятую, например: "Товар, Услуга, Компонент", а поле ProductCategory всегда указывается одно значение, либо Товар, либо Услуга, либо Компонент. Но выдается ошибка, см.рис.2. Подскажите, как правильно написать такой запрос?


Вложения:
Pic2.png
Pic2.png [ 31.25 КБ | Просмотров: 21096 ]
Pic1.png
Pic1.png [ 40.95 КБ | Просмотров: 21096 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Условие IN в запросе
СообщениеДобавлено: 29.04.2020 22:32 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
А закладка в угловых скобках <CategoryCalc> на что ссылается? В какой конкретно таблице есть поле вычисляемое поле CategoryCalc на желтом фоне?

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Условие IN в запросе
СообщениеДобавлено: 29.04.2020 22:40 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Получаем довольно конкретное сообщение об ошибке.
Что означает, что формула
Select * From qdfProducts Where ProductCategory IN <CategoryCalc>
не верна, а верно должно быть так:
Select * From qdfProducts Where ProductCategory IN (<CategoryCalc>)

Но тут возникает вопрос - а зачем здесь использовать IN когда можно просто поставить =
IN используют, когда перечисляют значения через запятую. Например

Select * From qdfProducts Where CategoryID IN (1, 2, 3)
или
Select * From qdfProducts Where ProductCategory IN ('Category1', 'Category2', 'Category3')

и всегда в круглых скобках.


Вложения:
Pic1.jpg
Pic1.jpg [ 113.25 КБ | Просмотров: 21084 ]

_________________
2B OR NOT 2B = TRUE
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Условие IN в запросе
СообщениеДобавлено: 29.04.2020 22:53 
Не в сети

Зарегистрирован: 15.12.2014 16:50
Сообщения: 106
Ivan писал(а):
А закладка в угловых скобках <CategoryCalc> на что ссылается? В какой конкретно таблице есть поле вычисляемое поле CategoryCalc на желтом фоне?


В таблице qdfOrdersProducts, где собственно и пишется запрос. Именно здесь в поле CategoryCalc прописываются значения через запятую, т.е. "Товар, услуга, компонент". А в таблице qdfProducts, куда идет запрос, в поле ProductCategory значение всегда одно, либо это Товар, либо это Услуга и т.д. Поэтому условие = здесь не работает, но и IN в скобках тоже, см.рис.1


Вложения:
Pic1.png
Pic1.png [ 35.33 КБ | Просмотров: 21083 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Условие IN в запросе
СообщениеДобавлено: 29.04.2020 23:16 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Обычная проблема. На SQL SERVER решается достаточно просто, на Access нужны костыли, причем без оператора IN...
А в этом виде не работает, потому что оператору IN нужен список значений, разделенных запятой, а в переменной <CategoryCalc> у Вас одно строковое значение, в котором просто где-то есть запятые. Поэтому в Вашем случае используйте в запросе функцию InStr:
Код:
SELECT * FROM qdfProducts WHERE InStr(<CategoryCalc>, ProductCategory) > 0

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Условие IN в запросе
СообщениеДобавлено: 29.04.2020 23:30 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Спасибо, что сообщаете о проблемах. Проблема обнаружена и исправлена, доработка программы выполнена. Теперь этот случай учитывается как особый. Вы можете обновить вашу версию.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB