如何在ms access查询的“sourcedb”子句中使用vba变量

gzjq41n4  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(394)

我正在尝试将vba字符串变量传递给“查询生成器”视图中sql语句的in子句。
字符串由以下函数创建:

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

后端本身是从userform中的一个下拉框派生出来的,在一个表中有两个条目,它们有两个不同的地址,一个用于live数据库,另一个用于developement数据库。下拉框在选择时设置“环境”变量。

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

我想这很简单,但看了这么久我就看不见了。
谢谢您。

4xy9mtcn

4xy9mtcn1#

一般来说,你可以做你想做的-使用一个函数来提供参数字符串。

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() & "'"
bksxznpy

bksxznpy2#

sql查询中缺少where子句?比如说

SELECT *
FROM TableName 
WHERE Name = GetBackEnd;

相关问题