Я пытаюсь переопределить 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-систему и не сможем заменить все старые вещи