Is it possible to create a recursive query in Access?

前端 未结 7 2021
有刺的猬
有刺的猬 2020-11-27 19:12

I have a job table

Id
ParentID
jobName
jobStatus

The root ParentID is 0.

Is it possible in Access to create a query to

7条回答
  •  孤街浪徒
    2020-11-27 19:33

    This cannot be done using pure SQL in Access, but a little VBA goes a long way.

    Add a reference to the Microsoft Scripting Runtime (Tools -> References...).

    This assumes that the ID is unique, and that there are no cycles: e.g. A's parent is B, but B's parent is A.

    Dim dict As Scripting.Dictionary
    
    Function JobRoot(ID As Long) As Long
        If dict Is Nothing Then
            Set dict = New Scripting.Dictionary
            Dim rs As DAO.Recordset
            Set rs = CurrentDb.OpenRecordset("SELECT ID, ParentID FROM Job", dbOpenForwardOnly, dbReadOnly)
            Do Until rs.EOF
                dict(rs!ID) = rs!ParentID
                rs.MoveNext
            Loop
            Set rs = Nothing
    
            Dim key As Variant
            For Each key In dict.Keys
                Dim possibleRoot As Integer
                possibleRoot = dict(key)
                Do While dict(possibleRoot) <> 0
                    possibleRoot = dict(possibleRoot)
                Loop
                dict(key) = possibleRoot
            Next
        End If
        JobRoot = dict(ID)
    End Function
    
    Sub Reset() 'This needs to be called to refresh the data
        Set dict = Nothing
    End Sub
    

提交回复
热议问题