我正在尝试将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()';
我想象它很简单,但是凝视了这么久,我还是看不到它。
谢谢你。
通常,您可以执行所需的操作-使用函数提供参数字符串。
Public Function GetName() As String GetName = "foo" End Function SELECT * FROM bar WHERE floo = GetName()
但是在某些情况下,您不能使用变量。这两个IN子句都在其中。
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() & "'"