使用字符串(表中的多值字段)作为SQL查询中的where子句

时间:2019-06-21 07:01:29

标签: sql sql-server vba ms-access

我尝试用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系统并可以替换所有旧的东西

1 个答案:

答案 0 :(得分:1)

IN (...)需要逗号,因此您需要这样做:

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

,然后在WHERE子句中:

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

多余的空格不会造成伤害。如果BLPN_Query包含单个值,也可以使用,但是如果为空则不能。