访问使用VBA功能选择IN

时间:2018-02-07 22:22:58

标签: vba ms-access access-vba

所以我有这个SQL查询

SELECT *
FROM [Employee To Manager]
WHERE [Employee To Manager].[Manager UID] In(getMyTeamUserNames());

其中有一个VBA函数getMyTeamUserNames()

Public Function getMyTeamUserNames() As String
Dim rs As DAO.Recordset
Dim dbs As DAO.Database
Set dbs = CurrentDb
getMyTeamUserNames = commaDelimitArray(getTeamUserNames(getUserName, dbs))
End Function

Public Function commaDelimitArray(arrayStr) As String
Dim sepStr As String
sepStr = "','"
commaDelimitArray = "'" & Join(arrayStr, sepStr)

End Function
Public Function getTeamUserNames(username, dbs) As String()

Dim sqlstatement As String
sqlstatement = "SELECT * FROM [Employee to Manager] WHERE [Employee to 
Manager].[Manager UID] = '" & username & "'"
Set rs = dbs.OpenRecordset(sqlstatement, dbOpenSnapshot)
Dim ComputerUsernames() As String
Dim FindRecordCount As Integer
   If rs.EOF Then
  FindRecordCount = 0
  Exit Function
  Else
  rs.MoveLast
  FindRecordCount = rs.RecordCount
  End If
   ReDim ComputerUsernames(FindRecordCount) As String
   Dim i As Integer
   i = 0
   rs.MoveFirst
    Do Until rs.EOF = True
      ComputerUsernames(i) = rs("Computer Username")
        If (ComputerUsernames(i) <> "") Then
                i = i + 1
        End If
    If (ComputerUsernames(i - 1) <> username) Then
      Dim recurResult() As String
      recurResult = getTeamUserNames(ComputerUsernames(i - 1), dbs)

      Dim resultSize As Integer
      If Len(Join(recurResult)) > 0 Then
      resultSize = UBound(recurResult) - LBound(recurResult) + 1
      ReDim Preserve ComputerUsernames(UBound(ComputerUsernames) + resultSize)
      For Each resultStr In recurResult
      ComputerUsernames(i) = resultStr
        If (ComputerUsernames(i) <> "") Then
                i = i + 1
        End If
      Next resultStr
      End If
    End If
      rs.MoveNext
Loop
ReDim Preserve ComputerUsernames(i - 1)
getTeamUserNames = ComputerUsernames
End Function

查询运行,我没有数据。 但是,如果我从getMyTeamUserNames()获取结果并将其放入查询中,则可以正常工作。 getMyTeamUserNames()结果从可能的2个结果变为40个(递归地从树中获取下属)。

1 个答案:

答案 0 :(得分:0)

所以C Perkins特别指出这将永远不会有效,所以我用其他一些查询重建了查询。