Un pequeño proyecto donde vamos hacer uso de una base de datos para llenar un ComboBox y 2 DataGridView.
Base de datos y procedimientos almacenados
La base de datos a trabajar es Neptuno.
Creamos el procedimiento para listar los clientes que irá en el ComboBox, una vez que sea seleccionado el cliente el DataGridView1 mostrará un listado de productos que ha comprado, por lo que en el procedimiento 2 hay un parámetro, por último el procedimiento 3 permitirá listar los empleados que vendieron el producto al cliente y lo mostrará en el DataGridView2.
Use Neptuno Go Create proc pro_1 as select IdCliente, NombreCompañia from Clientes Go Create proc pro_2 @idCliente char(5) as select d.IdProducto, NombreProducto, Sum(Cantidad) as [Nruo. Prod. Comprados] from Pedidos p, [Detalles de pedidos] d, Productos pr where p.IdPedido=d.IdPedido and pr.IdProducto=d.IdProducto and IdCliente=@idCliente group by d.IdProducto, NombreProducto order by d.IdProducto asc go Create proc pro_3 @idproducto int, @idcliente char(5) as select p.IdEmpleado, Apellidos+SPACE(2)+Nombre as [Nombre de empleado], e.Cargo, DATEDIFF(year,FechaContratacion,GETDATE()) as [Año laboral] from Empleados e, Pedidos p, [Detalles de pedidos] d where e.IdEmpleado=p.IdEmpleado and p.IdPedido=d.IdPedido and IdProducto=@idproducto and IdCliente=@idcliente go
Como se trata solo de consultas todo lo podemos hacer en un formulario.
Formulario
Realizamos la conexión al SQL.
Dim cn As New SqlConnection("Server=localhost\SQLEXPRESS;Integrated security=SSPI;Database=Neptuno")
Hacemos uso del primero procedimiento almacenado y a la vez cargamos los datos o clientes en el ComboBox.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim da As New SqlDataAdapter("pro_1", cn) Dim tbl As New DataTable da.Fill(tbl) ComboBox1.DataSource = tbl ComboBox1.DisplayMember="NombreCompañia" ComboBox1.ValueMember = "IdCliente" End Sub
Luego de seleccionar al cliente, el evento SelectedIndexChanged hará uso del segundo procedimiento tomando el idcliente para listar los productos.
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged Try Dim idcliente As String = ComboBox1.SelectedValue Dim cmd As New SqlCommand("pro_2", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@idCliente", SqlDbType.Char, 5).Value = idcliente Dim da As New SqlDataAdapter(cmd) Dim tbl As New DataTable da.Fill(tbl) DataGridView1.DataSource = tbl Catch ex As Exception End Try End Sub
Entonces ya tenemos el id del cliente y el id del producto, el evento CellClick del primer DataGridView1 usará el último procedimiento y los códigos para listar los empleados que vendieron el producto al cliente seleccionado.
Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick Dim idproducto As Integer = CInt(DataGridView1.Item(0, e.RowIndex).Value) Dim cmd As New SqlCommand("pro_3", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@idproducto", SqlDbType.Int).Value = idproducto cmd.Parameters.Add("@idcliente", SqlDbType.Char, 5).Value = ComboBox1.SelectedValue Dim da As New SqlDataAdapter(cmd) Dim tbl As New DataTable da.Fill(tbl) DataGridView2.DataSource = tbl End Sub
Seleccionamos un cliente
El DataGridView1 listará los productos que compro el cliente
El DataGridView2 listará a los empleados que vendieron el producto
- Visual Studio 2019
- Microsoft SQL Server Management Studio 18