我正在尝试使用自定义VBA函数来填充访问SQL查询的WHERE IN函数的列表,但是我似乎无法使其正常工作。查询的简化版本如下所示
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的load事件表单已经在后台运行查询。
由于
答案 0 :(得分:1)
我不认为这会起作用。您的函数返回一个单字符串值,因此WHERE
子句实际上会出现(取决于您的DCOUNT
函数的结果):
WHERE CoachingReason = "'Performance', 'ReDeployment'"
或
WHERE CoachingReason = "'Performance', 'ReDeployment', 'Absence'"
也许你可以试试
WHERE getList() Like "*" & CoachingReason & "*"
答案 1 :(得分:1)
@Skippy是对的。必须在运行查询之前解析in-values。
你可以这样做:
SELECT
staffNo, [Staff Member], CoachingStage
FROM
tblCoachingStages
WHERE
CoachingReason IN ('Performance', 'ReDeployment')
OR
CoachingReason = Nz(DLookup("'Absence'", "[tblAdmin]", "[CDP] = '" & Environ("username") & "'"))
答案 2 :(得分:0)
在具有public关键字的bas模块中声明函数getList,以便可以使用Access Queries访问它。为了测试从VBA代码立即窗口调用函数,如?getlist()并按Enter键。这应该返回结果而不是错误。 使用函数返回值的硬编码值运行查询后,确保函数返回字符串时查询语法和SQL正常。