Vba 如何从查询中用作参数的函数返回多个值?

Vba 如何从查询中用作参数的函数返回多个值?,vba,ms-access,parameters,Vba,Ms Access,Parameters,我想查找一些值, 这些值以字符串形式从全局函数“getColors”返回 这是我的疑问: 选择颜色。* 来自颜色 其中((Colors.Description)位于(getColors())中 这就是函数: 公共函数getColors()作为字符串 getColors=“蓝色,绿色” 结束功能 当我从“getColors()”返回一个单词字符串作为“BLUE”时, 查询结果为一条记录, 但当我返回多个单词时,如“BLUE,GREEN”,查询将返回一个空记录, 问题在哪里 你不能。函数只能返回

我想查找一些值,
这些值以字符串形式从全局函数“getColors”返回

这是我的疑问:

选择颜色。*
来自颜色
其中((Colors.Description)位于(getColors())中

这就是函数:

公共函数getColors()作为字符串
getColors=“蓝色,绿色”
结束功能

当我从“getColors()”返回一个单词字符串作为“BLUE”时,
查询结果为一条记录,
但当我返回多个单词时,如“BLUE,GREEN”,查询将返回一个空记录,

问题在哪里

你不能。函数只能返回单个变量。虽然可以返回数组,但SQL不支持。相反,将要比较的值作为参数传递给函数,并返回布尔值

例如:

选择颜色*
从颜色
其中CheckColors(Colors.Description)
然后,作为代码:

Public Function CheckColors(strColor As String) As Boolean
    If strColor = "Blue" Or strColor = "Green" Then
        CheckColors = True
    Else
        CheckColors = False
    End If
End Function

如果
getColors
返回一个字符串,例如“Blue”甚至“Blue、Purple、Green”,您可以使用
INSTR
进行检查。
如果您的值作为单个字段中的记录返回,则将使用SQL关键字中的

SELECT *
FROM   Colors
WHERE  InStr("Green,Purple", Description)>0  
或者在您的情况下:

SELECT *
FROM   Colors
WHERE  InStr(getColors(), Description)>0 
编辑:
如果看不到您的功能代码,很难判断,但@ErikvonAsmuth给出的答案可能更合适-使用
InStr
将为问题“我的颜色在这张颜色列表中是真还是假?”

Eriks answer在函数中进行检查(虽然我会使用
选择大小写
),而您的函数返回颜色,然后检查是否正确。

函数代码是什么?我重新编辑了问题,添加了函数代码。非常有帮助的回答,它现在可以正常工作了,InStr()函数完成了这项工作,谢谢Darren,我希望我能投票,但我的声誉不到15,对不起。也许你误解了我,我的函数返回一个字符串变量,但这个字符串包含多个值,Darren建议的InStr()函数就可以了。我完全理解你的问题。Darren的解决方案是脏的,并且会导致名称重叠的问题(例如,绿色将匹配绿色)。我的观点是,应该在用户定义的函数中进行比较,而不是在SQL中。那你就没有这个问题了。你可能会注意到,即使Darren说他更喜欢我的解决方案,虽然他会调整它一位,但我会比较很多值,而且如果我做你的解决方案,我将不得不做一个循环来执行每个布尔结果的查询。对于每个函数返回,好的,我会处理重叠,我感谢您的努力,谢谢。