如何将 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() & "'"
我正在尝试将 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() & "'"