代码之家  ›  专栏  ›  技术社区  ›  fclinton

使用VBA功能访问选择

  •  -1
  • fclinton  · 技术社区  · 7 年前

    所以我有一个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 回复  |  直到 7 年前
        1
  •  0
  •   fclinton    7 年前

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