Autor Tema: Agrupar datos de una BD en un TreeView VB 6.0  (Leído 2855 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Ever Cerna

  • Megabyte
  • ***
  • Mensajes: 113
  • Reputación: +1/-1
  • anarkia99-Soft.
    • Ver Perfil
Agrupar datos de una BD en un TreeView VB 6.0
« en: Septiembre 25, 2016, 01:12:33 pm »
Buenos días amigos,

Pues bien, la duda que tengo es de como poder llenar unos datos que tengo una BD y cargarlos en un TreeView, ya eh logrado cargar los datos en el control TreeView lo que no logro es agruparlo, les muestro como me muestra los resultados en el TreeView a continuación.

subir fotos a internet

Pues bien, como verán me cargan los datos, hasta allí todo OK, pero el detalle es de que me repite los Nro. De Ventas, aparte de eso tiene otro NODO que me muestra el detallado de dicha Venta, les muestro en la imagen siguiente:

subir fotos online

Es así como me cargan los datos. Todo esta OK pero lo que trato de hacer es de que me agrupen los datos, ya se habrán dado cuenta de lo que trato de hacer, deberían de cargarme los datos de esta manera.

- GRACIELA MORENO CALVO

   --- Numero: 3 - Fecha: 01/03/2010

           --- Cant: 1 - Cartuchos HP 1100 Remanufacturado

           --- Cant: 10 - Teclado PS2 "Genius"

   --- Numero: 7 - Fecha: 15/03/2010

            :

            :

Quiero que me agrupe de esa manera, les dejo el código en la parte que cargo los datos, para ver en que parte tengo que agregar o midificar el codigo, gracias

Código: [Seleccionar]
Option Explicit

Private Enum ObjectType
    otNone = 0
    otFactory = 1
    otGroup = 2
    otPerson = 3
    otFactory2 = 4
    otGroup2 = 5
    otPerson2 = 6
End Enum

Private Sub Form_Load()

    CARGAR_CONSULTA_NOMBRE

End Sub

Sub CARGAR_VENTA_SEGUN_NOMBRE(ByVal strQuery As String)
   
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Conectar la Base Datos con ADO
        Call ConectarBDD
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
               
    Dim i As Long
   
   
    Dim FACTORY As Node
    Dim GROUP As Node
    Dim ARTICULO As Node
   
    Dim TIPO_ORDEN As String
   
    StrSQL = strQuery
    RST.Open StrSQL, CN, adOpenStatic, adLockOptimistic, adCmdText

    Do While Not RST.EOF
   
        With TreeView1.Nodes
                   
            .Clear
            Set FACTORY = .Add(, , , RST!NOMBRE_CLI, otFactory, 1)
       
            For i = 1 To RST.RecordCount

                Set GROUP = .Add(FACTORY, tvwChild, , "Número: " & RST!IDVenta & " - " & "Fecha: " & RST!Fecha_Venta, otGroup, 2)
                Set ARTICULO = .Add(GROUP, tvwChild, , "Cant.: " & RST!Cantidad & " - " & RST!Nombre, 3)
               
                RST.MoveNext
                FACTORY.Expanded = True
           
            Next i
       
        End With
       
    Loop
   
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Cerrar la base de datos y liberar la memoria
        Call CerrarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
   
End Sub

'+----------------------------------------------------------------------------------------------
'// Consulta para mostrar los datos en el TreeView segun ID del cliente...
'+----------------------------------------------------------------------------------------------
Sub CARGAR_CONSULTA_NOMBRE()

    StrSQL = "SELECT VENTAS.IDVenta, VENTAS.Fecha_Venta, VENTAS_DETALLES.Cantidad, TBArticulos.Nombre, TBClientes.NOMBRE_CLI"
    StrSQL = StrSQL & " FROM (TBClientes INNER JOIN VENTAS ON TBClientes.NCLI = VENTAS.NCLI) INNER JOIN (TBArticulos INNER JOIN VENTAS_DETALLES ON TBArticulos.IDArticulo = VENTAS_DETALLES.IDArticulo) ON VENTAS.IDVenta = VENTAS_DETALLES.IDVenta"
    StrSQL = StrSQL & " WHERE ((TBClientes.NCLI=" & FrmGestionClientes.LvConsultClientes.SelectedItem & "))"
   
    Call CARGAR_VENTA_SEGUN_NOMBRE(StrSQL)
       
End Sub
« última modificación: Septiembre 25, 2016, 01:51:14 pm por Ever Cerna »

Ever Cerna

  • Megabyte
  • ***
  • Mensajes: 113
  • Reputación: +1/-1
  • anarkia99-Soft.
    • Ver Perfil
Re:Agrupar datos de una BD en un TreeView VB 6.0
« Respuesta #1 en: Septiembre 29, 2016, 06:44:07 pm »
Alguna idea amigos de que puedo estar asiendo mal?? ya le llevo varios dias dando vuelta y no logro agruparlos... espero me den una manito,

Gracias

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Agrupar datos de una BD en un TreeView VB 6.0
« Respuesta #2 en: Octubre 12, 2016, 05:45:56 pm »
Hola amigo un poco tarde en responder pero hace como 3 a 4 meses que ya no entre al foro. Hice esto

Agregar en el Formulario
Código: (VB) [Seleccionar]
TreeView
ImageList1
Agregar los iconos correspondiente al ImageList

Asi es como queda




En un Modulo

Código: (VB) [Seleccionar]
Public cnADO As ADODB.Connection    '// Conexion ADO
Public rsADO As ADODB.Recordset     '// RecordSet ADO

Public rsAux As ADODB.Recordset     '// RecordSet ADO
Public rsAux_2 As ADODB.Recordset     '// RecordSet ADO

Public StrSQL As String             '// Parametro para MySQL
Public StrSQLAux As String          '// Parametro para MySQL
Public StrSQLAux_2 As String          '// Parametro para MySQL

Public StrSQL1 As String            '// Parametro para MySQL
Public ComandoSQL As String         '// Comando MySQL

Public xImpresora As String
Public xPass As String



Public Sub ConectarADO()
   
    On Error GoTo ErrorHandler
   
    Set cnADO = New ADODB.Connection    '// Crear la nueva conexion
   
    Set rsADO = New ADODB.Recordset     '// Crear nuevo recordset
    Set rsAux = New ADODB.Recordset    '// Crear nuevo recordset
    Set rsAux_2 = New ADODB.Recordset    '// Crear nuevo recordset
   
    rsADO.CursorLocation = adUseClient  '// Tipo de cursor a utilizar
    rsAux.CursorLocation = adUseClient  '// Tipo de cursor a utilizar
    rsAux_2.CursorLocation = adUseClient  '// Tipo de cursor a utilizar
   
    cnADO.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=trabajos; User=root;Password=;Option=3;"
    cnADO.Open                          '// Abrir la nueva conexion
           
ErrorHandler:
   
    If Err <> 0 Then
        MsgBox "Error Nº: " & Format(Err.Number, "##,###0") & vbCrLf & vbCrLf & Err.Source & vbCrLf & vbCrLf & Err.Description, vbCritical, "Error"
    End If

End Sub

Public Sub CerrarADO()
   
    If Not cnADO Is Nothing Then
   
    Else
        cnADO.Close            '// Cerrar la conexion
        Set cnADO = Nothing    '// Liberar conexion de la memoria
        Set rsADO = Nothing    '// Liberar recorset de la memoria
    End If
   
End Sub


Public Function ADORecordCount(ByRef MySet As ADODB.Recordset) As Long

  Dim BkMark As Variant
  Dim RC     As Long

   On Local Error Resume Next

   With MySet
      BkMark = .Bookmark
      .MoveLast
      RC = .RecordCount
   End With 'MySet

   If RC = 1 Then
      If IsNull(MySet.Fields(0)) Then
         RC = 0
      End If

   End If
   ADORecordCount = RC
   MySet.Bookmark = BkMark
   On Local Error GoTo 0

End Function

En el Formulario Esto

Código: (VB) [Seleccionar]
Dim lngid       As String

Private Enum ObjectType
    otNone = 0
    otFactory = 1
    otGroup = 2
    otPerson = 3
    otFactory2 = 4
    otGroup2 = 5
    otPerson2 = 6
End Enum

Private Sub Command2_Click()

    Dim FACTORY As Node
    Dim GROUP As Node
    Dim ARTICULO As Node
 
    TreeView1.Nodes.Clear
    TreeView1.Refresh
   
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Conectar la Base Datos con ADO
        Call ConectarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
   
        MySQL = "SELECT * FROM pab GROUP BY cedula order by id"
        rsADO.Open MySQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText
       
        If ADORecordCount(rsADO) Then
       
            Do 'Until rsADO.EOF
       
                cedula = rsADO.Fields("cedula")
                xnfactura = rsADO.Fields("nfactura")
               
                xcliente = rsADO.Fields("cliente")
                Set FACTORY = TreeView1.Nodes.Add(, , , xcliente, 1)

                MySQLaux = "SELECT * FROM pab WHERE cedula='" & cedula & "' GROUP BY nfactura"
                rsAux.Open MySQLaux, cnADO, adOpenStatic, adLockOptimistic, adCmdText
                               
                If ADORecordCount(rsAux) Then

                    Do
                       
                        Set GROUP = TreeView1.Nodes.Add(FACTORY, tvwChild, , "Nº Factura : " & rsAux.Fields("nfactura"), 2)
                        GROUP.Expanded = True
                           
                            MySQLaux_2 = "SELECT * FROM pab WHERE cedula='" & cedula & "' and nfactura='" & xnfactura & "'"
                            rsAux_2.Open MySQLaux_2, cnADO, adOpenStatic, adLockOptimistic, adCmdText
                       
                            If ADORecordCount(rsAux_2) Then
                               
                                Do

                                    Set ARTICULO = TreeView1.Nodes.Add(GROUP, tvwChild, , rsAux_2.Fields("cantidad") & "|" & rsAux_2.Fields("detallearticulo"), 3)
                                    rsAux_2.MoveNext
                               
                                Loop Until rsAux_2.EOF
                               
                            End If
                           
                            FACTORY.Expanded = True
                            rsAux.MoveNext
   
                            rsAux_2.Close
                           
                    Loop Until rsAux.EOF
                   
                End If

                rsAux.Close
                rsADO.MoveNext
               
            Loop Until rsADO.EOF

        End If
           
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Cerrar la Base Datos y liberar la memoria
        Call CerrarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
       

End Sub

Scrip MySQL

Código: (SQL) [Seleccionar]
CREATE TABLE `pab` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cedula` varchar(20) DEFAULT NULL,
  `cliente` varchar(50) DEFAULT NULL,
  `nfactura` varchar(50) DEFAULT NULL,
  `idarticulo` varchar(20) DEFAULT NULL,
  `detallearticulo` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Ever Cerna

  • Megabyte
  • ***
  • Mensajes: 113
  • Reputación: +1/-1
  • anarkia99-Soft.
    • Ver Perfil
Re:Agrupar datos de una BD en un TreeView VB 6.0
« Respuesta #3 en: Octubre 15, 2016, 10:41:24 am »
Gracias ENTER por tu gran ayuda, pero te soy sincero me marie con todo esto ya que la info lo sacó de varias tablas como habrás visto en el code tengo varias tablas y todas esas estan relacionadas entonces intente aserlo mas o menos con tu ejemplo y me perdí  :-X haber si me hechas mas o menos la mano en el code un poco mas profundo, de igual manera gracias amigo.

Igual ya tengo un poco claro sobre este control del Treeview.

Salu2.