THE*_*HEn 18 recursion ms-access hierarchy
我有一张job桌子
Id
ParentID
jobName
jobStatus
Run Code Online (Sandbox Code Playgroud)
根ParentID为0.
是否可以在Access中创建查询以查找给定的根job?数据库是MDB,没有链接表.Access版本是2003.A job可以是几个级别的盛大孩子.
poi*_*ter 26
在Access中可以创建查询以查找给定作业的根.不要忘记VBA功能的强大功能.您可以在VBA模块中创建递归函数,并将其结果用作查询中的输出字段.
例:
Public Function JobRoot(Id As Long, ParentId As Long) As Long
If ParentId = 0 Then
JobRoot = Id
Exit Function
End If
Dim Rst As New ADODB.Recordset
Dim sql As String
sql = "SELECT Id, ParentID FROM JobTable WHERE Id = " & ParentId & ";"
Rst.Open sql, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
If Rst.Fields("ParentID") = 0 Then
JobRoot = Rst.Fields("Id")
Else
JobRoot = JobRoot(Id, Rst.Fields("ParentID")) ' Recursive.
End If
Rst.Close
Set Rst = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
您可以使用查询构建器或仅在查询字段中使用参数键入函数名称,从查询中调用此递归函数.
它会产生根.
(我认为OP现在已经有一年了,但是当每个人都说出不可能的事情时,我不得不回答).
不,不是.SServer 2005之后SQL Server支持递归查询,但Access中不支持.
如果您事先知道级别数,则可以编写查询,但它不是递归查询.
在SQL Server中,使用CTE(SQL扩展):请参阅http://blog.crowe.co.nz/archive/2007/09/06/Microsoft-SQL-Server-2005---CTE-Example-对的一simple.aspx
但是常规SQL没有Recursivity支持.