2017-02-10 42 views
0

我想使用自定义VBA函数来填充访问SQL查询的WHERE IN函数的列表,但是我似乎无法得到它的工作。查询的简化版本如下所示如何在WHERE IN条件中使用自定义VBA函数

SELECT staffNo, [Staff Member], CoachingStage, 
FROM tblCoachingStages 
WHERE CoachingReason IN (getList()) 

代码为的GetList()函数是

Function getList() As String 

If DCount("[CDP]", "[tblAdmin]", "[CDP] = '" & Environ("username") & "'") = 0 Then 
     getList= "'Performance', 'ReDeployment'" 
Else 
     getList= "'Performance', 'ReDeployment', 'Absence'" 
End If 

End Function 

我曾尝试与像的情况下,这个失踪的领先和最终报价的报价打转转是由编译器添加的,但我无法得到它的工作。

我试图避免使用queryDef来更改查询的SQL,因为窗体加载在数据库的打开和查询填充子窗体,所以如果我更改表单的加载事件上的sql它已经在后台运行查询。

谢谢

+0

你得到什么错误?如果添加sql字符串的debug.print,你会得到什么? – Minty

回答

1

我不认为这是行得通的。你的函数返回你单一字符串值,所以WHERE子句有效地出来(取决于你DCOUNT函数的结果)为两种:

WHERE CoachingReason = "'Performance', 'ReDeployment'" 

WHERE CoachingReason = "'Performance', 'ReDeployment', 'Absence'" 

也许你可以试试

WHERE getList() Like "*" & CoachingReason & "*" 
+0

对于我的回复中的延误表示歉意,我在星期五离开办公室,然后再回答。这很出色,我没有想过这样做。非常感谢你 – Leroy

0

声明函数getList,在一个带有public关键字的bas模块中它可以通过Access查询访问。对于测试,从VBA代码即时窗口中调用该函数,如?getlist()并按回车。这应该返回给你一个结果,而不是错误。 一旦用函数返回值的硬编码值运行查询,以确保查询语法和SQL在函数返回字符串时正常。

+0

嗨深。是的,查询运行正确的硬编码值。我试图让它作为查询的一部分与函数一起运行。我现在要和Skippy的答案一起去,谢谢 – Leroy

1

@Skippy是对的。运行查询之前,必须先解析输入值。

你可以这样做:

SELECT 
    staffNo, [Staff Member], CoachingStage 
FROM 
    tblCoachingStages 
WHERE 
    CoachingReason IN ('Performance', 'ReDeployment') 
    OR 
    CoachingReason = Nz(DLookup("'Absence'", "[tblAdmin]", "[CDP] = '" & Environ("username") & "'")) 
+0

感谢Gustav,我要去看看Skippy的答案,因为我发布的示例问题有点简化,getlist返回的字符串可以包含很多不同的值,因此更容易只使用通配符。干杯 – Leroy

相关问题