2024年3月12日发(作者:)

access根据父子节点整理表

在Microsoft Access中,如果你想根据父子节点整理数据,你可以使用递

归查询或者使用一些VBA代码来实现。以下是一个基本的步骤来根据父子

节点整理数据。

1. 创建一个包含父子关系的数据表

首先,你需要一个包含父子关系的表。例如,你可以创建一个名为

"Employees"的表,其中包含以下字段:

EmployeeID (主键)

EmployeeName

ManagerID (外键,指向同一表的EmployeeID)

2. 使用递归查询来整理数据

你可以使用递归查询来整理员工和他们的经理。以下是一个简单的递归查询

示例:

```sql

TRANSFORM First() AS EmployeeName

SELECT , ,

FROM Employees

WHERE ((() Is Not Null))

GROUP BY , ,

PIVOT (Max()) In

( [1], [2], [3], ... , [n] )

```

这个查询会返回一个表,其中每个员工都与其经理一起显示。`[1], [2],

[3], ... , [n]` 是手动输入的,代表可能的最大员工ID。你需要根据你的实际

数据来调整这些值。

3. 使用VBA代码来整理数据

如果你需要更复杂的逻辑或更多的控制,你可能需要使用VBA代码。你可

以编写一个函数来遍历数据并按照父子关系组织数据。

例如:

```vba

Public Sub OrganizeEmployees()

Dim db As

Dim rs As

Dim rsChild As

Dim strSQL As String

Dim strParentID As String

Dim strChildID As String

Dim arrParents As Variant

Dim i As Long

Set db = CurrentDb()

Set rs = ("SELECT EmployeeID, EmployeeName, ManagerID FROM

Employees", dbOpenDynaset)

' 创建一个数组来存储每个员工的子项

arrParents = Array()

Do While Not

strParentID = rs!EmployeeID

strChildID = rs!ManagerID

If IsArray(arrParents) Then

If Not IsError(LBound(arrParents, 1)) Then

If Not IsError((strParentID, arrParents, 0)) Then

ReDim Preserve arrParents(LBound(arrParents) To

UBound(arrParents) + 1)

arrParents(UBound(arrParents)) = strChildID

Else

ReDim Preserve arrParents(LBound(arrParents) To

UBound(arrParents) + 1)

arrParents(UBound(arrParents)) = Array(strParentID,

strChildID)

End If

Else

ReDim Preserve arrParents(LBound(arrParents) To

UBound(arrParents) + 1)

arrParents(UBound(arrParents)) = Array(strParentID,

strChildID)

End If

Else

ReDim Preserve arrParents(LBound(arrParents) To

UBound(arrParents) + 1)

arrParents(UBound(arrParents)) = Array(strParentID,

strChildID)

End If

Loop

Set rs = Nothing

Set db = Nothing

' 接下来,你可以根据arrParents数组来组织你的数据或创建你需要的报

表/视图等。

End Sub

```

这个VBA代码会创建一个数组,其中包含每个员工的子项。然后你可以根

据这个数组来组织你的数据或创建你需要的报表/视图等。