Используйте строку (многозначное поле из таблицы) как условие where в запросе SQL - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь переопределить SQL-запрос с VBA, чтобы включить содержимое многозначного поля таблицы в качестве предложения where, но я не могу заставить его работать.

Сначала я собираю все значения из определенногомногозначное поле (отформатировано как текст, не может использовать числа из-за ограничений при импорте)

BLPN_Query = DLookup("Kostenstellen_Report", "Optionen_Reportgenerierung", "ID=1")

MsgBox вернет это (обратите внимание на пробел между ";" и следующим текстом): 34;44

Эта строка может содержать несколько различных текстовых записей.Я хотел бы использовать строку "BLPN_Query" в качестве условия предложения where.Пока что у меня есть следующее:

"WHERE (PROKALK.NK_STK>0) AND (PROKALK.TERMIN>{d '" & Startjahr & "-01-01'}) AND (PROKALK.BLPNR='" & BLPN_Query & "')"

Если есть только одна запись, она работает, но если их несколько, она не будет работать (очевидно).Не уверен, но я предполагаю, что пробел между точкой с запятой и следующим текстом является проблемой, так как я должен использовать «IN» вместо «=», но я не знаю, как это сделать.

Решение(спасибо Андре!)

1.) Получить данные из таблицы (выглядит как: 34; 35; 36), удалить пробелы и заменить точку с запятой запятой, включая одинарные кавычки между элементами для предложения IN,Теперь это выглядит так: 34 ',' 35 ',' 36

BLPN_Query = DLookup("Kostenstellen_Report", "Optionen_Reportgenerierung", "ID=1")
BLPN_Query = Replace(BLPN_Query, " ", "")
BLPN_Query = Replace(BLPN_Query, ";", "','")

2.) Включите строку в предложение where (и добавьте одиночную кавычку до и после строки) -> Final string: '34', '35', '36'

AND (PROKALK.BLPNR IN ('" & BLPN_Query & "'))"

это не красиво, но поможет нам, пока мы наконец не получим новую ERP-систему и не сможем заменить все старые вещи

1 Ответ

1 голос
/ 21 июня 2019

IN (...) ожидает запятую, поэтому вам нужно сделать:

BLPN_Query = Replace(BLPN_Query, ";", ",")

и затем в предложении WHERE:

"WHERE ... AND (PROKALK.BLPNR IN (" & BLPN_Query & "))"

Лишние пробелы не повредят. Это также работает, если BLPN_Query содержит одно значение, но не если оно пустое.

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