Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: Ever Cerna 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.
(http://s17.postimg.org/j7piqsifj/image.png) (http://postimg.org/image/g0uz75xzf/)subir fotos a internet (http://postimage.org/index.php?lang=spanish)
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:
(http://s9.postimg.org/7gj42plbz/image.png) (http://postimg.org/image/ewidoi917/)subir fotos online (http://postimage.org/index.php?lang=spanish)
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
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
-
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
-
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
TreeView
ImageList1
Agregar los iconos correspondiente al ImageList
Asi es como queda
(https://snag.gy/UEJPzI.jpg)
En un Modulo
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
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
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
-
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.