一尘不染

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

sql

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

该字符串由以下函数创建:

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

后端本身是从userform的下拉框中派生的,一个表中有两个条目,其中有两个不同的地址,一个分别用于实时数据库和开发数据库。选择后,下拉框将设置“环境”变量。

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()';

我想象它很简单,但是凝视了这么久,我还是看不到它。

谢谢你。


阅读 146

收藏
2021-03-17

共1个答案

一尘不染

通常,您可以执行所需的操作-使用函数提供参数字符串。

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() & "'"
2021-03-17