Guardar los datos del treeview en tabla accees
Gracias por adelantado, mi pregunta es la siguiente:
dispongo de una tabla: Encuesta; Capitulo;Subcapitulo;Tema ( padre, hijo, nieto..)
Dependiendo de la elección de cada una de las opciones de las tablas. Tendría unas preguntas con sus respectivas respuestas ( esto iría en un subformulario )
Hice un treeview para mostrás las categorías y subcategorías ( hasta 4 niveles) de 4 tablas enlazadas. Encontré un ejemplo y desarrolle más o menos el treeview ( parece que funciona porque aparece el árbol en el desplegable).
Mi problema son 2:
1-No me muestra el contenidofinal de la consulta la cual tiene que ir filtrada por los nodos que voy seleccionando.
2-¿Cómo puedo integrar los valores de los nodos seleccionados en una tabla?
Añado el código:
----------------------------------------------------------------------------------------------
Option Compare Database
Option Explicit
Private Sub Form_Load()
Dim rst As DAO.Recordset, _
strSQL As String
On Error GoTo Form_Load_TratamientoErrores
AjustarTamaño Me
' vacio el treeview
Me.Treeview.Nodes.Clear
' añado las categorias
strSQL = "SELECT Id_TipoEncuesta, TipoEncuesta, DescripcionTipoEncuesta"
strSQL = strSQL & " FROM TipoEncuesta "
strSQL = strSQL & " ORDER BY DescripcionTipoEncuesta"
' construyo el arbol con las categorias
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me.Treeview.Nodes.Add , , "C" & rst!Id_TipoEncuesta, rst!DescripcionTipoEncuesta
Me.Treeview.Nodes("C" & rst!Id_TipoEncuesta).Tag = "Id_TipoEncuesta = " & rst!Id_TipoEncuesta
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
rst.Close
strSQL = "SELECT capitulo,id_capitulo, Id_TipoEncuesta, Descripcioncapitulo"
strSQL = strSQL & " FROM capitulo"
strSQL = strSQL & " ORDER BY capitulo"
' añado los capitulos
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me.Treeview.Nodes.Add "C" & rst!Id_TipoEncuesta, tvwChild, "CS" & rst!id_capitulo, rst!Descripcioncapitulo
Me.Treeview.Nodes("CS" & rst!id_capitulo).Tag = "id_Capitulo = " & rst!id_capitulo
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
rst.Close
strSQL = "SELECT SubCapitulo.ID_Capitulo, SubCapitulo.ID_Subcapitulo, SubCapitulo.Subcapitulo, SubCapitulo.DescripcionSubcapitulo"
strSQL = strSQL & " FROM SubCapitulo"
strSQL = strSQL & " ORDER BY DescripcionSubcapitulo"
' añado los subcapitulos
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me.Treeview.Nodes.Add "CS" & rst!id_capitulo, tvwChild, "CSP" & rst!ID_subcapitulo, rst!DescripcionsubCapitulo
Me.Treeview.Nodes("CSP" & rst!ID_subcapitulo).Tag = "id_subCapitulo = " & rst!ID_subcapitulo
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
rst.Close
strSQL = "SELECT Tema.IDSubcapitulo, Tema.ID_Tema, Tema.DescripcionTema"
strSQL = strSQL & " FROM Tema"
strSQL = strSQL & " ORDER BY DescripcionTema"
' añado los temas
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me. Treeview. Nodes.Add "CSP" & rst! IDSubcapitulo, tvwChild, "CSPT" & rst! ID_Tema, rst!DescripcionTema
Me.Treeview.Nodes("CSPT" & rst!iD_Tema).Tag = "ID_tema = " & rst!iD_Tema
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
' selecciono el primer registro
Set Me.Treeview.SelectedItem = Me.Treeview.Nodes
' sincronizo el subformulario con la selección del treeview para mostrar los productos de esa categoria
treeview_NodeClick (Me.Treeview.Nodes)
Me.Treeview.SetFocus
Form_Load_Salir:
CierraRecordsetDAO rst
On Error GoTo 0
Exit Sub
Form_Load_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: Form_Load de Documento VBA: Form_frmTreeview (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Form_Load_Salir
End Sub ' Form_Load
Private Sub treeview_NodeClick(ByVal Node As Object)
Dim strSQL As String, _
strTabla As String
On Error GoTo treeview_NodeClick_TratamientoErrores
' cambio el origen del registro para mostrar los productos de la categoria/subcategoria seleccionada
strSQL = "SELECT pregunta, Respuesta,Id_TipoEncuesta,id_Capitulo, id_subCapitulo, id_tema"
strSQL = strSQL & " FROM Preguntas Consulta"
strSQL = strSQL & " WHERE " & Node.Tag
Me.PreguntasConsulta.Form.RecordSource = strSQL
' extraigo el nombre de la tabla del Tag del nodo del treeview
strTabla = Mid(Node.Tag, 3, InStr(1, Node.Tag, "=") - 4) & "s"
treeview_NodeClick_Salir:
On Error GoTo 0
Exit Sub
treeview_NodeClick_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: treeview_NodeClick de Documento VBA: Form_treeview (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume treeview_NodeClick_Salir
End Sub ' treeview_NodeClick
----------------------------------------------------------------------------------------
Si ves algo que no cuadra, por favor dímelo
Muchas gracias de nuevo
dispongo de una tabla: Encuesta; Capitulo;Subcapitulo;Tema ( padre, hijo, nieto..)
Dependiendo de la elección de cada una de las opciones de las tablas. Tendría unas preguntas con sus respectivas respuestas ( esto iría en un subformulario )
Hice un treeview para mostrás las categorías y subcategorías ( hasta 4 niveles) de 4 tablas enlazadas. Encontré un ejemplo y desarrolle más o menos el treeview ( parece que funciona porque aparece el árbol en el desplegable).
Mi problema son 2:
1-No me muestra el contenidofinal de la consulta la cual tiene que ir filtrada por los nodos que voy seleccionando.
2-¿Cómo puedo integrar los valores de los nodos seleccionados en una tabla?
Añado el código:
----------------------------------------------------------------------------------------------
Option Compare Database
Option Explicit
Private Sub Form_Load()
Dim rst As DAO.Recordset, _
strSQL As String
On Error GoTo Form_Load_TratamientoErrores
AjustarTamaño Me
' vacio el treeview
Me.Treeview.Nodes.Clear
' añado las categorias
strSQL = "SELECT Id_TipoEncuesta, TipoEncuesta, DescripcionTipoEncuesta"
strSQL = strSQL & " FROM TipoEncuesta "
strSQL = strSQL & " ORDER BY DescripcionTipoEncuesta"
' construyo el arbol con las categorias
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me.Treeview.Nodes.Add , , "C" & rst!Id_TipoEncuesta, rst!DescripcionTipoEncuesta
Me.Treeview.Nodes("C" & rst!Id_TipoEncuesta).Tag = "Id_TipoEncuesta = " & rst!Id_TipoEncuesta
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
rst.Close
strSQL = "SELECT capitulo,id_capitulo, Id_TipoEncuesta, Descripcioncapitulo"
strSQL = strSQL & " FROM capitulo"
strSQL = strSQL & " ORDER BY capitulo"
' añado los capitulos
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me.Treeview.Nodes.Add "C" & rst!Id_TipoEncuesta, tvwChild, "CS" & rst!id_capitulo, rst!Descripcioncapitulo
Me.Treeview.Nodes("CS" & rst!id_capitulo).Tag = "id_Capitulo = " & rst!id_capitulo
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
rst.Close
strSQL = "SELECT SubCapitulo.ID_Capitulo, SubCapitulo.ID_Subcapitulo, SubCapitulo.Subcapitulo, SubCapitulo.DescripcionSubcapitulo"
strSQL = strSQL & " FROM SubCapitulo"
strSQL = strSQL & " ORDER BY DescripcionSubcapitulo"
' añado los subcapitulos
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me.Treeview.Nodes.Add "CS" & rst!id_capitulo, tvwChild, "CSP" & rst!ID_subcapitulo, rst!DescripcionsubCapitulo
Me.Treeview.Nodes("CSP" & rst!ID_subcapitulo).Tag = "id_subCapitulo = " & rst!ID_subcapitulo
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
rst.Close
strSQL = "SELECT Tema.IDSubcapitulo, Tema.ID_Tema, Tema.DescripcionTema"
strSQL = strSQL & " FROM Tema"
strSQL = strSQL & " ORDER BY DescripcionTema"
' añado los temas
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF And Not rst.BOF Then
Do While Not rst.EOF
Me. Treeview. Nodes.Add "CSP" & rst! IDSubcapitulo, tvwChild, "CSPT" & rst! ID_Tema, rst!DescripcionTema
Me.Treeview.Nodes("CSPT" & rst!iD_Tema).Tag = "ID_tema = " & rst!iD_Tema
Me.Treeview.Font.Size = 9
Me.Treeview.Font.Bold = True
rst.MoveNext
Loop
End If
' selecciono el primer registro
Set Me.Treeview.SelectedItem = Me.Treeview.Nodes
' sincronizo el subformulario con la selección del treeview para mostrar los productos de esa categoria
treeview_NodeClick (Me.Treeview.Nodes)
Me.Treeview.SetFocus
Form_Load_Salir:
CierraRecordsetDAO rst
On Error GoTo 0
Exit Sub
Form_Load_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: Form_Load de Documento VBA: Form_frmTreeview (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Form_Load_Salir
End Sub ' Form_Load
Private Sub treeview_NodeClick(ByVal Node As Object)
Dim strSQL As String, _
strTabla As String
On Error GoTo treeview_NodeClick_TratamientoErrores
' cambio el origen del registro para mostrar los productos de la categoria/subcategoria seleccionada
strSQL = "SELECT pregunta, Respuesta,Id_TipoEncuesta,id_Capitulo, id_subCapitulo, id_tema"
strSQL = strSQL & " FROM Preguntas Consulta"
strSQL = strSQL & " WHERE " & Node.Tag
Me.PreguntasConsulta.Form.RecordSource = strSQL
' extraigo el nombre de la tabla del Tag del nodo del treeview
strTabla = Mid(Node.Tag, 3, InStr(1, Node.Tag, "=") - 4) & "s"
treeview_NodeClick_Salir:
On Error GoTo 0
Exit Sub
treeview_NodeClick_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: treeview_NodeClick de Documento VBA: Form_treeview (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume treeview_NodeClick_Salir
End Sub ' treeview_NodeClick
----------------------------------------------------------------------------------------
Si ves algo que no cuadra, por favor dímelo
Muchas gracias de nuevo
1 respuesta
Respuesta de xavi -ae soft-
1