如何将 VBA 变量用于 MS-ACCESS 查询的 IN 'SourceDB' 子句

How to use VBA variable for IN 'SourceDB' clause of MS-ACCESS query

我正在尝试将 vba 字符串变量传递给查询构建器视图中 SQL 语句的 IN 子句。

字符串由以下函数创建:

Public Function GetBackEnd()
    If Len(GetBackEnd) = 0 Then GetBackEnd = BackEnd
End Function

后端本身源自用户表单中的下拉框,table 中有两个条目,具有两个不同的地址,一个用于实时数据库和开发数据库。下拉框根据选择设置“环境”变量。

Property Get BackEnd() As String
    Select Case Environment
        Case Is = "Development"
            BackEnd = DLookup("VariableValue", "Globals", "Variable= 'TestEnvironment'")
        Case Else
            BackEnd = DLookup("VariableValue", "Globals", "Variable= 'Backend'")
    End Select
End Property

我尝试了以下几种变体,但每次都出现错误。

SELECT *
FROM TableName IN 'GetBackEnd()';

我想象的很简单,但是看了这么久我就是看不出来。

谢谢。

SQL 查询中缺少 WHERE 子句?比方说

SELECT *
FROM TableName 
WHERE Name = GetBackEnd;

一般情况下,您可以为所欲为-使用函数提供参数字符串。

Public Function GetName() As String
    GetName = "foo"
End Function
SELECT * FROM bar WHERE floo = GetName()

但在某些部分/情况下,您不能使用变量。 IN两个子句都在其中。

这些都行不通:

GetInList = "'x', 'y', 'z'"
SELECT * FROM bar WHERE floo IN (GetInList())

并且您的用例也不可能:

GetDbPath = "C:\path\myDb.accdb"
SELECT * FROM bar IN GetDbPath()

您将不得不即时构建整个 SQL:

Db.QueryDefs("myQuery").SQL = "SELECT * FROM TableName IN '" & GetBackEnd() & "'"