Access - Treeview

 
Vista:

Treeview

Publicado por Marcelo (1 intervención) el 13/06/2006 06:50:34
Buenas a todos, soy nuevo en este foro, eh buscado por todos lados pero no logro dar con la solucion a mi problema que es el siguiente:Tengo una tabla llamada cuentas, un campo llamado "jerarquia" y otro "Descripcion", en el campo "jerarquia", almaceno los registros jerarquizados de un plan de cuentas en este formato 1000000000, es activo, por ejemplo y 20000000 es pasivo y asi, ahora bien, trato de crear los nodos padres partiendo las cadenas de el campo "jerarquia", para que solo tome 1,2,3... etc, pero no me lo toma, me dice que la clave no es unica en la seleccion , nose ya que hacer este es el codigo que utilizo aver si pueden ayudarme, gracias de antemano por su tiempo y ayuda.-

Function CreaNodoPadres()

Dim Rst As DAO.Recordset, KeyNodoPadre As String
Set Rst = CurrentDb.OpenRecordset("cuentas")
While Rst.EOF = False

KeyNodoPadre = "PA" & Mid(Rst("jerarquia"), 1, 1) ' PROBE TAMBIEN AÑADIENDO & "0", PERO NA...
'anexiono los padres (Registros de la tabla CUENTAS, primera en la jerarquía)
Controltvw.Nodes.Add(, , KeyNodoPadre, "Nombre de la cuenta: " & Rst("descripcion")).Expanded = True
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing

End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Creación de nodos padres en una jerarquía de cuentas

Publicado por Alejandro (4142 intervenciones) el 19/07/2023 19:26:14
La función "CreaNodoPadres" en el código proporcionado intenta crear nodos padres en una jerarquía de cuentas almacenada en la tabla "cuentas" de una base de datos de Access. Sin embargo, está encontrando un error que indica que la clave no es única en la selección.

Una posible solución para este problema podría ser utilizar una colección para realizar un seguimiento de los nodos padres ya creados. De esta manera, se evita crear nodos duplicados en el árbol.

A continuación se muestra una versión modificada del código con esta solución implementada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Function CreaNodoPadres()
    Dim Rst As DAO.Recordset
    Dim KeyNodoPadre As String
    Dim ParentNodes As Collection
 
    Set Rst = CurrentDb.OpenRecordset("cuentas")
    Set ParentNodes = New Collection
 
    While Not Rst.EOF
        KeyNodoPadre = "PA" & Mid(Rst("jerarquia"), 1, 1)
 
        ' Verificar si el nodo padre ya ha sido creado
        If Not NodeExists(ParentNodes, KeyNodoPadre) Then
            ' Añadir el nodo padre a la colección
            ParentNodes.Add KeyNodoPadre, KeyNodoPadre
 
            ' Crear el nodo padre en el control "Controltvw"
            Controltvw.Nodes.Add , , KeyNodoPadre, "Nombre de la cuenta: " & Rst("descripcion")
            Controltvw.Nodes(KeyNodoPadre).Expanded = True
        End If
 
        Rst.MoveNext
    Wend
 
    Rst.Close
    Set Rst = Nothing
    Set ParentNodes = Nothing
End Function
 
Function NodeExists(ByVal NodesCollection As Collection, ByVal Key As String) As Boolean
    On Error Resume Next
    NodeExists = Not IsEmpty(NodesCollection(Key))
    On Error GoTo 0
End Function

En este código, se ha agregado una colección llamada "ParentNodes" para almacenar los nodos padres que ya han sido creados. Antes de crear un nuevo nodo padre, se verifica si ya existe en la colección utilizando la función auxiliar "NodeExists". Si el nodo padre no existe, se agrega a la colección y se crea en el control "Controltvw". Esto garantiza que solo se creen nodos padres únicos en la jerarquía.

Espero que esta solución te ayude a resolver tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar