Microsoft
Software
Hardware
Network
Question : TreeView BOM
I am attempting to populate a Treeview to display a Build of Materials.
I used the code from Microsoft which works well to display Employee-Supervisor Relationships. However when a Part# is used in different subassemblies I get the error #: 35602 - Key is not unique. (==> in the code below is where the error occurs)
Could an expert please assist me in pointing out the changes I need to make in the code.
I have a form with 2 controls:
that displays a
that a user can select to display its expanded BOM. The 2nd control is the
TreeView control.
Private Sub cmbLookForID_AfterUpdate()
Dim cTableQueryName As String
cTableQueryName = "qProduct"
Dim db As DAO.Database, rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset(cTableQue
ryName, dbOpenDynaset, dbReadOnly)
Dim ctl As Control, oTree As TreeView
Set ctl = Me!xTree
Set oTree = ctl.Object
oTree.Nodes.Clear
SbAddBranch rs:=rs, _
cPointerField:="ParentID",
_
cIDField:="ChildID", _
cTextField:="ChildName"
End Sub
'================= AddBranch Sub Procedure ======================
' Recursive Procedure to add branches to TreeView Control
' rs: Self-referencing Recordset containing the data
' cPointerField: Name of field pointing to parent's primary key
' cIDField: Name of parent's primary key field
' cTextField: Name of field containing text to be displayed
'=========================
==========
==========
==========
======
'
Sub SbAddBranch(rs As Recordset, cPointerField As String, cIDField As String, cTextField As String, Optional vReportToID As Variant)
On Error GoTo ErrAddBranch
Dim ndCurrent As Node, oTree As TreeView
Dim strCriteria As String, cText As String, cKey As String
Dim ndParent As Node, bk As String
' -- Identify the TreeView Object
Set oTree = Me!xTree.Object
If IsMissing(vReportToID) Then
strCriteria = cPointerField & "=" & Me![cmbLookForID]
Else
strCriteria = BuildCriteria(cPointerFiel
d, rs.Fields(cPointerField).T
ype, "=" & vReportToID)
Set ndParent = oTree.Nodes("k" & vReportToID)
End If
rs.FindFirst strCriteria
Do Until rs.NoMatch
' -- Create a string with LastName.
cText = rs(cTextField)
cKey = "k" & rs(cIDField)
' -- Add new node to the parent
If Not IsMissing(vReportToID) Then
==> Set ndCurrent = oTree.Nodes.Add(ndParent, tvwChild, cKey, cText)
' -- Add new node to the root.
Else
==> Set ndCurrent = oTree.Nodes.Add(, , cKey, cText)
End If
bk = rs.Bookmark
SbAddBranch rs, cPointerField, cIDField, cTextField, rs(cIDField)
rs.Bookmark = bk
rs.FindNext strCriteria
Loop
ExitAddBranch:
Exit Sub
ErrAddBranch:
MsgBox "Can't add child: " & Err.Number & ": " & Err.Description, vbCritical, "AddBranch Error:"
Resume ExitAddBranch
End Sub
Structure of the
which is the datasource is displayed below:
ParentID ChildID ChildName
200-001 200-002
200-001 200-005
200-001 200-030
200-001 200-031
200-001 950-030
200-001 950-055
200-002 200-012
200-002 200-018
200-002 200-026
200-002 200-029
200-018 200-019
200-018 200-020
200-018 200-022
200-018 999-047
200-026 200-011
200-026 200-012
200-026 200-013
200-026 200-025
200-025 200-011
200-025 200-012
200-025 200-013
200-025 200-024
200-024 200-007
200-024 200-008
200-024 200-011
200-024 200-012
200-024 200-013
200-024 200-018
200-024 200-023
200-030 001-058
200-030 200-003
001-058 001-048
001-048 001-057
200-031 200-004
Sample Treeview that should be displayed, BUT I cannot is displayed below. The counter, and code in parenthesis and * for end-nod are just for illustration - I just need the parts to display in a tree-view hierarchial fashion.
200-001 (#142)
(1) 200-002 (#143)
(1) 200-012 (#036) *
(2) 200-018 (#230)
(1) 200-019 (#128) *
(2) 200-020 (#134) *
(3) 200-022 (#004) *
(4) 999-047 (#044) *
(3) 200-026 (#234)
(1) 200-011 (#127) *
(2) 200-012 (#036) *
(3) 200-013 (#099) *
(4) 200-025 (#233)
(1) 200-011 (#127) *
(2) 200-012 (#036) *
(3) 200-013 (#099) *
(4) 200-024 (#232)
(1) 200-007 (#094) *
(2) 200-008 (#100) *
(3) 200-011 (#127) *
(4) 200-012 (#036) *
(5) 200-013 (#099) *
(6) 200-018 (#230)
(1) 200-019 (#128) *
(2) 200-020 (#134) *
(3) 200-022 (#004) *
(4) 999-047 (#044) *
(7) 200-023 (#098) *
(4) 200-029 (#364) *
(2) 200-005 (#157) *
(3) 200-030 (#372)
(1) 001-058 (#236)
(1) 001-048 (#148)
(1) 001-057 (#235) *
(2) 200-003 (#147) *
(4) 200-031 (#466)
(1) 200-004 (#149) *
(5) 950-030 (#218) *
(6) 950-055 (#288) *
Answer : TreeView BOM
I followed the thread you recommended but still do not know how to make the necessary changes - I know what is causing the issue, the
must be unique in the entrie tree. Any help would be greatly appreciated. Thanks, GC
Random Solutions
word 2003, the password is forgotten, how open the document
Default Message Required Field
Feed query results from one form to another
Create a WCF object on client side
How to format tag right?
Microsoft SQL 2005
Infopath Data to SQL
C# ,framework 2.0 , bindingsource filter question
Announcement Webpart to show on all sites
Password for installed application?