我尝试用VBA重新定义SQL查询,以将多值表字段的内容作为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子句中(并在字符串前后添加单引号)->最终字符串:'34','35','36'
AND (PROKALK.BLPNR IN ('" & BLPN_Query & "'))"
这不是很漂亮,但是可以帮助我们,直到我们最终获得新的ERP系统并可以替换所有旧的东西
答案 0 :(得分:1)
IN (...)
需要逗号,因此您需要这样做:
BLPN_Query = Replace(BLPN_Query, ";", ",")
,然后在WHERE子句中:
"WHERE ... AND (PROKALK.BLPNR IN (" & BLPN_Query & "))"
多余的空格不会造成伤害。如果BLPN_Query
包含单个值,也可以使用,但是如果为空则不能。