net.doc

73
PRACTICA NET - 0001 Ahora usaremos la Base de Datos : NorthWind Crear los siguientes procedimientos almacenados en el SQL use northwind go ---------- Listado_Cliente----------------------------------------------- create Procedure Listado_Empleado as select EmployeeID,LastName + ' , '+ FirstName as Nombre_apellido from Employees go ----------Facturas vendidas--------------------------------------------- create Procedure Facturas_Empleado @codven int as select OrderID,convert(char(10),OrderDate,103) Fecha,ShipCountry from Orders where EmployeeID=@codven go ----------Facturas vendidas--------------------------------------------- create Procedure Mostrar_Foto @codven int as select Photo from Employees where EmployeeID=@codven go Ahora en Visual NET, diseñar la siguiente Ventana:

Upload: oscarin696

Post on 23-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

PRACTICA NET - 0001

Ahora usaremos la Base de Datos : NorthWindCrear los siguientes procedimientos almacenados en el SQL

use northwindgo----------Listado_Cliente-----------------------------------------------create Procedure Listado_Empleadoasselect EmployeeID,LastName + ' , '+ FirstName as Nombre_apellido from Employeesgo----------Facturas vendidas---------------------------------------------create Procedure Facturas_Empleado@codven intasselect OrderID,convert(char(10),OrderDate,103) Fecha,ShipCountry from Orderswhere EmployeeID=@codvengo----------Facturas vendidas---------------------------------------------create Procedure Mostrar_Foto@codven intasselect Photo from Employees where EmployeeID=@codvengo

Ahora en Visual NET, diseñar la siguiente Ventana:

Lo primero que realizaremos es importar estas 2 librerías

Imports System.Data.SqlClient

Imports System.IO 'MemoryStream

A continuación crearemos nuestra cadena de conexión

Imports System.Data.SqlClientImports System.IO 'MemoryStreamPublic Class ConsultaDim cn As New SqlConnection("Server=(local);Integrated Security =yes; database = northwind")

Ahora programaremos para que cuando cargue el formulario me liste los empleados

Private Sub Consulta_Load(…) Handles MyBase.Load Dim da As New SqlDataAdapter("Listado_Empleado", cn) Dim dt As New DataTable da.Fill(dt) ListBox1.DataSource = dt ListBox1.DisplayMember = "Nombre_apellido" ListBox1.ValueMember = "EmployeeID" 'StretchImage ajusta la imagen al tamaño del PictureBox1 PictureBox1.SizeMode = PictureBoxSizeMode.StretchImageEnd Sub

Crearemos nuestro procedimiento para Mostrar la foto

Sub Mostrar_imagen(ByVal cod As Integer) Dim cmd As New SqlCommand("Mostrar_Foto", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@codven", SqlDbType.Int).Value = cod Dim da As New SqlDataAdapter(cmd) Dim dt As New DataTable da.Fill(dt)

Dim imagen() As Byte imagen = dt.Rows(0)(0) Dim ms As New MemoryStream Dim offset As Integer = 78 'estableciendo un desplazamiento de bytes es un buffer '//donde se debe de comenzar la escritura Escribimos los datos en memoria ms.Write(imagen, offset, imagen.Length - offset) Dim bmp As Bitmap bmp = New Bitmap(ms) 'Bitmap bmp = new Bitmap(ms); ms.Close() 'cierra la secuencia de memoria y libera recursos '//Bitmap es un objeto usado para trabajar con imagenes 'definidas por datos en pixel. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage PictureBox1.Image = bmpEnd Sub

Ahora programaremos en el ListBox, para que cuando seleccionemos uno de los empleados nos visualice las fotos y las facturas vendidas por dicho empleado

Private Sub ListBox1_SelectedIndexChanged(…) Handles ListBox1 .Selected Index Ch anged Try Dim cod As Integer = CInt(ListBox1.SelectedValue) Dim cmd As New SqlCommand("Facturas_Empleado", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@codven", SqlDbType.Int).Value = cod Dim da As New SqlDataAdapter(cmd) Dim dt As New DataTable da.Fill(dt) DataGridView1.DataSource = dt Mostrar_imagen(cod) Catch ex As Exception End TryEnd Sub

Presionamos F5

Ejercicios Propuestos

Realizar el siguiente formulario bajo las siguientes condiciones:

Cuando se dé clic en cualquier RadioButton realizara la búsqueda por las letras comprendidas entre ellas, la caja de texto podrá ser la búsqueda pero solo de los rangos de la letra que han sido seleccionado, mostramos los clientes seleccionados en un Listview, seleccionamos un cliente y nos mostrara las facturas realizadas por ese cliente.

En un Listview nos mostrara todos los proveedores, cuando seleccionamos uno o más proveedores con el botón Mostrar nos listara todos los productos que tienen los proveedores seleccionados

Mostrar en un ListBox las regiones, cuando seleccionamos una región nos mostrara los territorios de dicha región, cuando seleccionamos la región nos mostrara los empleados que viven en dicha región, seleccionamos un empleado y nos mostrara las ventas realizadas por dicho empleado.

Mostrar un listado de categorías, cuando seleccionamos la categoría nos visualizara la foto respectiva, y a la vez nos mostrara los productos que se encuentran en dicha categoría.También nos permitirá hacer un filtrado de las facturas que son mayores al monto ingresado.

Ejercicios Propuestos

Hará uso de la base de datos Northwind

Aplicación 1:

Desarrollara esta aplicación bajo las siguientes consideraciones:

1. Cuando cargue el formulario, se deberá demostrar en un Listbox1 2 campos el código y los nombres de los empleados, tanto el primero como el último nombre del empleado.

2. Al seleccionar un Item del listbox1, se deberá mostrar en un dataGridView1 las 5 órdenes más caras pares, que se hayan emitido en los meses impares del empleado seleccionado. Mostrando en los resultados el total por orden emitida.

3. Y por último se deberá demostrar la suma de toda la columna Total del dataGridView1, en un label.

APLICACIÓN 2:Desarrollar esta aplicación bajos las siguientes condiciones:

1. Cuando cargue el formulario, se deberá demostrar en un comboBox1, todos los países de la tabla Customers.

2. Cuando seleccione un país del ComboBox1, se deberá demostrar en el dataGridView1, todas las ciudades del país seleccionado, y a la vez la cantidad de códigos postales que tiene dicha ciudad.

3. Cuando seleccione una ciudad del dataGridView1, se deberá demostrar en el dataGridView2 todos los clientes que pertenece a esa ciudad. Muestre solo 4 campos.

4. Y por último se deberá de visualizar en un label, la cantidad de clientes que existen por país.

Aplicación 3:

Realice una búsqueda de clientes mediante cadenas en una caja de texto, el resultado los mostrara en un control DataGridView1, el campo Tipo Cliente será Cliente VIP cuando el cliente tenga más de 10 Ordenes compradas, si no será un tipo de cliente Normal. Al seleccionar un cliente en el DataGridview1 mostrara las ordenes vendidas en un Listbox, mostrando los campos concatenados.

Semana 11 Clases y creación de libreríasEjercicio Práctico Nro. 1

Lo primero que vamos a hacer es abrir el Visual Studio 2005.Ahora vamos a crear un Proyecto, para ellos nos vamos a Archivo y luego seleccionamos Nuevo Proyecto

Este será el modelo a desarrollar

Lo primero que vamos a realizar es crear nuestros procedimientos almacenados en el SQLNuestro primer procedimiento almacenado me listara el código y nombre del cliente pero solo de los clientes que tengan facturas

----------Listado_Cliente-----------------------------------------------create Procedure Listado_Clienteasselect cli_codigo,cli_nombre from clientes where cli_codigo

in(select distinct cli_codigo from ac_cabe)go

Ahora crearemos un procedimiento almacenado el cual me listara las facturas del cliente dependiendo del código del cliente

----------Facturas_Cliente----------------create Procedure Facturas_Cliente@cod varchar(5)asselect fac_numero from fac_cabe where cli_codigo=@codgoPor último crearemos un procedimiento el cual nos mostrara el detalle de la factura dependiendo de la factura ingresada----------Detalle de la Factura-----------create procedure Detalle_Factura@fac varchar(5)asselect fac_numero,a.art_codigo,art_nombre,art_precio,art_cantidad, (art_precio* art_cantidad) as Total from Articulos as a, Fac_deta as fdwhere a.art_codigo = fd.art_codigoand fd.fac_numero=@facgo----------Listado_Cliente----------------create Procedure Listado_Clienteasselect cli_codigo,cli_nombre from clientes where cli_codigoin(select distinct cli_codigo from ac_cabe)goAhora crearemos nuestro diseño en el Visual Studio Net el siguiente diseño

Una vez creado el diseño del formulario, ahora vamos agregar una clase a nuestro proyecto, para ello seleccionamos el Proyecto y luego Clic Agregar y finalmente seleccionamos Clase

Ahora a nuestra clase lo llamaremos clsconexion

En esta clase crearemos una función el cual me devuelva mi cadena de conexión, y así poder usarla en todas las demás clases

Imports System.Data.SqlClient

Public Class clsconexion

Function cn() As StringDim cadena As Stringcadena = "Server=(local);Integrated Security=SSPI;"cadena += "Database=bdfactura"Return cadena

End FunctionEnd Class

Ahora crearemos otra clase el cual llamaremos a todos nuestros procedimientos almacenados, además llamaremos a nuestra clase clsconexion ya que en ella está mi conexión

Y ahora programaremos lo siguiente

Imports System.Data.SqlClient

Public Class clsfuncionesDim clase As New clsconexion'clase.cn llamo a mi cadena de conexionDim cn As New SqlConnection(clase.cn)

'Esta funcion me Listara a los clientes q tengan FacturasFunction Lista_Cliente() As DataTableDim da As New SqlDataAdapter("Listado_Cliente", cn)Dim dt As New DataTableda.Fill(dt)Return dtEnd Function

'Esta funcion nos mostrara la facturas del clienteFunction Facturas_Clientes(ByVal cod As String) As DataTableDim cmd As New SqlCommand("Facturas_Cliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cod", SqlDbType.VarChar).Value = codDim da As New SqlDataAdapter(cmd)Dim dt As New DataTableda.Fill(dt)Return dtEnd Function

'Esta funcion nos mostrara el detalle de la facturasFunction Detalle_Factura(ByVal fac As String) As DataTableDim cmd As New SqlCommand("Detalle_Factura", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@fac", SqlDbType.VarChar).Value = facDim da As New SqlDataAdapter(cmd)Dim dt As New DataTableda.Fill(dt)Return dtEnd FunctionEnd Class

Ahora en el formulario vamos a importar

Imports System.Data.SqlClient

Ahora llamaremos a nuestra clase clsfunciones

Imports System.Data.SqlClientPublic Class Form1Dim funcion As New clsfunciones

Ahora programaremos para que cuando cargue el formulario me liste los clientes.

Private Sub Form1_Load(…) Handles MyBase.LoadDim dtcliente As New DataTabledtcliente = funcion.Lista_Cliente'creamos un TreeNode principal el cual'tendra el listado de ClientesDim padre As New TreeNodeTvclientes.Nodes.Clear()For a As Integer = 0 To dtcliente.Rows.Count - 1padre = New TreeNode(dtcliente.Rows(a)(1))Tvclientes.Nodes.Add(padre)'Facturas de cada ClienteDim dt As New DataTable : 'dr(0) tiene el codigo del Clientedt = funcion.Facturas_Clientes(dtcliente.Rows(a)(0))For b As Integer = 0 To dt.Rows.Count - 1'Agregamos las subnodos del padrepadre.Nodes.Add(dt.Rows(b)(0).ToString)NextNextEnd Sub

Ahora programaremos en el Tvclientes

Private Sub Tvclientes_AfterSelect(…) Handles Tvclientes.AfterSelectTryIf (Tvclientes.SelectedNode.Level = 0) Then'si seleccionamos el Cliente limpiamos'el dgfacturasdgfacturas.DataSource = DBNull.ValueEnd If'Si seleccionamos la FacturaIf (Tvclientes.SelectedNode.Level = 1) Then'Capturamos el nro de la Factura seleccionadaDim fac As String = Tvclientes.SelectedNode.Text

Dim dt As New DataTabledt = funcion.Detalle_Factura(fac)dgfacturas.DataSource = dtlblsuma.Text = dt.Compute("sum(Total)", "")End IfCatch ex As ExceptionEnd TryEnd Sub

Finalmente presionamos F5 y nos debe quedar de la siguiente manera

Ejercicio Práctico Nro. 2Lo primero que vamos a hacer es abrir el Visual Studio y crear una aplicacion de Windows

Este será el modelo a desarrollar

Lo primero que vamos a realizar es crear nuestros procedimientos almacenados en el SQLNuestro primer procedimiento almacenado nos listara el código y nombre del cliente pero solo de los clientes que tengan facturas.

----------Listado_Cliente----------------create Procedure Listado_Clienteasselect cli_codigo,cli_nombre from clienteswhere cli_codigo in(select distinct cli_codigo from fac_cabe)go

Ahora crearemos un procedimiento almacenado el cual me listara todas las facturas de todos los clientes, esto dependerá de los códigos que le mandemos como parámetros.

----------Facturas_Varios_Cliente------------------Habilita el uso de las comillasset quoted_identifier off--Creamos Ahora el Procedimientocreate Procedure Facturas_Varios_Cliente@codigos varchar(255)asexec("select fac_numero,c.cli_codigo,cli_nombre "+"from fac_cabe as fc,clientes as c "+"where fc.cli_codigo=c.cli_codigo and "+"c.cli_codigo in(" +@codigos +") "+"order by c.cli_codigo asc")

Go

Ahora vamos a probar como funciona nuestro procedimiento almacenado, como nos daremos cuenta los códigos están dentro de las comillas

Ahora crearemos nuestro diseño en el Visual Studio Net el siguiente diseño

Una vez creado el diseño del formulario, ahora vamos agregar una clase a nuestro proyecto, para ello seleccionamos el Proyecto y luego Clic Agregar y finalmente seleccionamos Clase

Ahora a nuestra clase lo llamaremos clsconexion

En esta clase crearemos una función el cual me devuelva mi cadena de conexión, y así poder usarla en todas las demás clases.

Imports System.Data.SqlClient

Public Class clsconexion

Function cn() As StringDim cadena As Stringcadena = "Server=(local);Integrated Security=SSPI;"cadena += "Database=bdfactura"Return cadenaEnd FunctionEnd Class

Ahora crearemos otra clase el cual llamaremos a todos nuestros procedimientos almacenados, además llamaremos a nuestra clase clsconexion ya que en ella está mi conexión

Imports System.Data.SqlClient

Public Class clsfuncionesDim clase As New clsconexionDim cn As New SqlConnection(clase.cn)'Esta funcion me Listara a los clientes q tengan FacturasFunction Lista_Cliente() As DataTableDim da As New SqlDataAdapter("Listado_Cliente", cn)Dim dt As New DataTableda.Fill(dt)Return dtEnd Function

'Esta funcion nos mostrara las facturas de los clienteFunction Facturas_varios_Clientes(ByVal cod As String) As DataTableDim cmd As New SqlCommand("Facturas_Varios_Cliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@codigos", SqlDbType.VarChar).Value = codDim da As New SqlDataAdapter(cmd)Dim dt As New DataTableda.Fill(dt)Return dtEnd FunctionEnd Class

Ahora volvemos al diseño de nuestro formulario, para ello vamos a importar

Imports System.Data.SqlClient

Ahora llamaremos a nuestra clase clsfuncionesImports System.Data.SqlClientPublic Class Form1Dim clase As New clsfunciones

Ahora programaremos para que cuando cargue el formulario me liste los clientes

Private Sub Form2_Load(…) Handles MyBase.LoadDim dt As New DataTableformato()Dim lstitem As ListViewItemdt = clase.Lista_ClienteFor a As Integer = 0 To dt.Rows.Count - 1lstitem = ListView1.Items.Add(dt.Rows(a)(0))lstitem.SubItems.Add(dt.Rows(a)(1))NextEnd Sub'Procedimiento que le da formato al ListView1Sub formato()With ListView1.CheckBoxes = True 'Mostramos CheckBoxes en el ListView1.View = View.Details 'Vista Detalle.GridLines = True 'Lineas de separacion filas y columnas.Columns.Add("Codigo del Cliente", 120, HorizontalAlignment.Center).Columns.Add("Nombre del Cliente", 300, HorizontalAlignment.Left)End WithEnd Sub

Imports System.Data.SqlClientPublic Class Form1Dim clase As New clsfuncionesImports System.Data.SqlClientAhora vamos a programar en el botón para que nos muestre las facturas de los clientes seleccionado

Private Sub BtnBuscar_Click(…) Handles BtnBuscar.ClickDim cod, codigo As StringDim tamaño As Integercod = ""TryFor a As Integer = 0 To ListView1.Items.Count - 1If (ListView1.CheckedItems(a).Checked = True) Thencod = cod & "'" & ListView1.CheckedItems(a).Text & "',"End IfNextCatch ex As ExceptionEnd Trytamaño = cod.Length 'Tamaño de la cadena'Le quitamos uno por la coma que sobracodigo = Mid(cod, 1, tamaño - 1)Dim dt As New DataTabledt = clase.Facturas_varios_Clientes(codigo)DataGridView1.DataSource = dt'A la columna 2 le damos un ancho de 200DataGridView1.Columns(2).Width = 200End Sub

A continuación presionamos F5

Ejercicio Práctico Nro. 3Lo primero que vamos a realizar es crear nuestros procedimientos almacenados que vamos a utilizar.

use BDfactura--LISTADO de las Facturascreate procedure Lista_Facturasasselect fac_numero, convert(char(10),fac_fecha,103) Fecha from fac_cabego

--Detalle de las Facturas Seleccionadascreate procedure Lista_Detalle@fac varchar(255)asselect fac_numero,a.art_codigo,art_nombre,art_precio,art_cantidad,(art_precio*art_cantidad) Total from articulos as a,fac_deta fdwhere a.art_codigo=fd.art_codigo and fac_numero=@facgo

Ahora a continuación vamos a abrir el Visual Studio 2005,Ahora vamos a crear un Proyecto, para ellos nos vamos a Archivo y luego seleccionamos Nuevo Proyecto CON EL NOMBRE DE

Ahora crearemos el siguiente diseño

Ahora nos vamos al primer DatagridView y en la parte superior, en la esquina y le damos editar columnas

Ahora vamos agregar un LinkColumn y en sus propiedades ponemos

Ahora agregamos un campo para la fecha

Al final nos debe quedar de la siguiente manera

Una vez creado el diseño del formulario, ahora vamos agregar una clase a nuestro proyecto.Ahora a nuestra clase lo llamaremos clsconexionEn esta clase crearemos una función el cual me devuelva mi cadena de conexión, y así poder usarla en todas las demás clases

Imports System.Data.SqlClient

Public Class clsconexion

Function cn() As StringDim cadena As Stringcadena = "Server=(local);Integrated Security=SSPI;"cadena += "Database=bdfactura"Return cadena

End FunctionEnd Class

Ahora crearemos otra clase el cual llamaremos clsfunciones, ahí estarán todos nuestros procedimientos almacenados, además llamaremos a nuestra clase clsconexion.

Imports System.Data.SqlClient

Public Class clsfunciones

Dim clase As New clsconexionDim cn As New SqlConnection(clase.cn)

Function Listado_facturas() As DataTableDim da As New SqlDataAdapter("Lista_Facturas", cn)Dim dt As New DataTableda.Fill(dt)Return dt

End Function

Function Detalle_Facturas(ByVal fac As String) As DataTableDim cmd As New SqlCommand("Lista_Detalle", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@fac", SqlDbType.VarChar).Value = facDim da As New SqlDataAdapter(cmd)Dim dt As New DataTableda.Fill(dt)Return dt

End FunctionEnd Class

Ahora en el formulario vamos a llamar a nuestra clase

Public Class Link_datagridviewDim funciones As New clsfunciones

Ahora programaremos para que cuando cargue el formulario me liste las facturas

Private Sub Link_datagridview_Load(…) Handles MyBase.LoadDim dt As New DataTabledt = funciones.Listado_facturasDataGridView1.DataSource = dt

End Sub

Ahora programaremos en el datagridView1

Private Sub DataGridView1_CellContentClick(…) HandlesDataGridView1.CellContentClick'Pregunto si seleccionamos la 1ra columnaIf (e.ColumnIndex = 0) Then Dim p As Integer

p = DataGridView1.CurrentCell.RowIndex Dim fac As String = DataGridView1(0, p).Value Dim dt As New DataTable dt = funciones.Detalle_Facturas(fac) DataGridView2.DataSource = dtEnd If

End Sub

Finalmente presionamos F5

Ejercicio Práctico Nro. 4Almacenamiento de imágenes mediante carpeta.Paso 1: Creación de Procedimientos Almacenados en una base de datos de su elección.

Create table EmpleadosImagen(Emp_cod char(5) Primary key,Emp_nom varchar(100),)

Create procedure usp_EmpleadosImagenAsSelect * from EmpleadosimagenGo

Create procedure usp_busEmpleadosimagen@Emp_cod char(5)AsSelect * from EmpleadosImagen Where Emp_cod=@Emp_codGo

Create procedure usp_generacodigoEmpleado@Emp_cod varchar(5) OutputAsSet @Emp_cod=(select max(Emp_cod) from EmpleadosImagen)Set @Emp_cod='E'+Right('0000'+ltrim(right(isnull(@Emp_cod,'00000'),4)+1),4)GoDeclare @codigo char(5)exec usp_generacodigoEmpleado @codigo outputprint @codigo

Create procedure usp_insertarEmpleadoimagen@Emp_cod char(5),@Emp_nom varchar(100)AsInsert Into EmpleadosImagen values(@Emp_cod,@Emp_nom)Go

Paso 2: Creación de Proyectos

Paso 3: Crear una carpeta en la unidad C para este ejemplo y guardar las imágenes ahí.Unidad C:\imagenes

Paso 4: Código fuente en el proyecto Librería de Clase LibreriadeNegocio

Clase ClsFunciones.vbImports System.Data

Imports System.Data.SqlClient

Public Class ClsfuncionesPublic cn As New SqlConnection("Server=(local);Integrated Security = SSPI ;Database =Neptuno")

Public Function MostrarEmpleados() As DataTableDim da As New SqlDataAdapter("usp_EmpleadosImagen", cn)Dim tbl As New DataTableda.Fill(tbl)Return tbl

End Function

Public Function BusquedaEmpleado(ByVal emp_cod As String) As DataTable

Dim cmd As New SqlCommand("usp_busEmpleadosimagen", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Emp_cod", SqlDbType.VarChar, 5).Value =

emp_codcn.Open()Dim tbl As New DataTabletbl.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))Return tbl

End Function

Public Function MostrarCodigoGenerado() As StringDim cmd As New SqlCommand("usp_generacodigoEmpleado", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Emp_cod", SqlDbType.VarChar, 5).Direction

= Parame terDirection.Outputcn.Open()cmd.ExecuteNonQuery()cn.Close()Return cmd.Parameters("@Emp_cod").Value

End Function

Public Function GrabarEmpleado(ByVal emp_cod As String, ByVal emp_nom As String) As Integer

Dim cmd As New SqlCommand("usp_insertarEmpleadoimagen", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Emp_cod", SqlDbType.VarChar, 5).Value =

emp_codcmd.Parameters.Add("@Emp_nom", SqlDbType.VarChar, 100).Value

= emp_nomcn.Open()Dim nresp As Integer = cmd.ExecuteNonQuery()cn.Close()Return nresp

End FunctionEnd Class

Paso 5: Creacion de la interfaz de la aplicación, sin olvidar referenciar el proyecto librería de clase al proyecto Aplicación Windows.

Codigo Fuente:

Imports System.data

Public Class Form1Dim obj As New LibreriadeNegocio.ClsfuncionesDim rutafolderimagen As String = ""Dim tblempl As DataTable

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System .Event Args) Handles MyBase.Load

lblcodigo.Text = obj.MostrarCodigoGeneradoMostrarImagen()

End Sub

Sub MostrarImagen()DataGridView1.Columns.Clear()tblempl = obj.MostrarEmpleadosDataGridView1.DataSource = tblemplDim colimag As New DataGridViewImageColumncolimag.ImageLayout = DataGridViewImageCellLayout.NormalDataGridView1.Columns.Add(colimag)DataGridView1.Columns(2).HeaderText = "Foto"For i As Integer = 0 To DataGridView1.Rows.Count - 1 DataGridView1.Item(2, i).Value = Image.FromFile("c:\imagenes\" +

tblempl . Rows(i)(0) + ".jpg")Next

DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells)End Sub

Private Sub CmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdNuevo.Click

lblcodigo.Text = obj.MostrarCodigoGeneradotxtnombres.Clear()PictureBox1.Image = Nothing

End Sub

Private Sub CmdBuscarImagen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdBuscarImagen.Click

Dim fileimagen As New OpenFileDialogfileimagen.Filter = "Archivo imagen(*.bmp,*.jpg,*.gif)|*.jpg"fileimagen.ShowDialog()If String.IsNullOrEmpty(fileimagen.FileName) Then MessageBox.Show("Seleccione una imagen", "Busqueda de

Imagen") Exit SubEnd Ifrutafolderimagen = "c:\imagenes\"Dim nombreimagen As String = fileimagen .FileName .Substring

(fileimagen. FileName.LastIndexOf("\") + 1)PictureBox1.SizeMode = PictureBoxSizeMode.StretchImagePictureBox1.Image = Image.FromFile(nombreimagen)

End Sub

Private Sub CmdGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdGrabar.ClickTry

If String.IsNullOrEmpty(txtnombres.Text) Then MessageBox.Show("Ingrese un nombre del Empleado", "Empleado") Exit SubEnd IfIf PictureBox1.Image Is Nothing Then

MessageBox.Show("Seleccione una imagen", "Imagen") Exit SubEnd IfDim nresp As Integer = obj.GrabarEmpleado(lblcodigo.Text,

txtnombres.Text)If nresp = 1 Then MessageBox.Show("El empleado ha sido registrado", "Registro")End If MostrarImagen()

Catch ex As Exception MessageBox.Show(ex.Message)

End TryEnd Sub

Private Sub CmdBusqueda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdBusqueda.Click

Dim codigo As String = InputBox("Ingrese un codigo", "Busqueda de Empleados"

, "E0001")If String.IsNullOrEmpty(codigo) Then MessageBox.Show("Ingrese un codigo de Empleado", "Busqueda de

Empleado") Exit SubEnd IfDim tbl As DataTable = obj.BusquedaEmpleado(codigo)lblcodigo.Text = tbl.Rows(0)(0).ToStringtxtnombres.Text = tbl.Rows(0)(1).ToStringDim mostrarimagen As String = ""If rutafolderimagen = "" Then mostrarimagen = "c:\imagenes\" + tbl.Rows(0)(0).ToString + ".jpg"Else mostrarimagen = rutafolderimagen + tbl.Rows(0)(0).ToString +

".jpg"End IfPictureBox1.SizeMode = PictureBoxSizeMode.StretchImagePictureBox1.Image = Image.FromFile(mostrarimagen)

End Sub

Private Sub CmdCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdCerrar.Click

If MessageBox.Show("Desea Salir", "Imagenes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = 6 Then

Exit SubEnd If

End SubEnd Class

Ejercicios Propuestos

Desarrollar la siguiente aplicación con estas consideraciones:

Ejercicio 1:

Cuando cargue el formulario, se deber de mostrar en un listos 2 campos el código y los nombres de los empleados.

Al seleccionar un ítem del listbox debe mostrar en el datagridview las 5 órdenes más caras pares, que se han emitido en los meses impares del empleado seleccionado mostrando el total por orden emitida.

También debe mostrar la suma de toda la columna total del datagridview en un label.

Ejercicio 2:

Cuando se cargue el formulario, se debe mostrar en un combobox, todos los países de la tabla customers.

Cuando seleccione el país mostrara en un datagridview todas las ciudades del país así como la cantidad de códigos postales de dicha ciudad.

Cuando seleccione la ciudad del datagridview debe mostrar en otro datagridview todos los clientes que pertenecen a esa ciudad. (trabajar solo con 4 campos ).

Ejercicio 3.

Realizar una búsqueda de clientes por una o más letras coincidentes. El cual mostrara como resultado todos los clientes con su cantidad de órdenes emitidas, al seleccionar una orden, deberá mostrar la cantidad de órdenes en un listbox.

Semana 12 LIBRERÍA DE CLASES CON BD

Primero vamos a crear los procedimientos almacenados que vamos a utilizar en el sql.

use bdfacturago----------Listado_Cliente----------------create Procedure Listado_Clienteasselect cli_codigo,cli_nombre from Clientesgo----------Facturas_Cliente----------------create Procedure Facturas_Cliente@cod varchar(5)asselect fac_numero from fac_cabe where cli_codigo=@codgo----------Detalle de la Factura-----------create procedure Detalle_Factura@fac varchar(5)asselect fac_numero,a.art_codigo,art_nombre,art_precio,art_cantidad,(art_precio* art_cantidad) as Totalfrom Articulos as a, Fac_deta as fdwhere a.art_codigo = fd.art_codigoand fd.fac_numero=@facgo

Lo primero que vamos a hacer es abrir el Visual Studio 2005,Ahora crearemos una solución en blanco el cual contendrá 2 proyectos

Ahora crearemos una librería de clases, para ello agregaremos a la solución un proyecto de librería de clases

Y ahora seleccionaremos

Ahora a nuestra clase le llamaremos clsclase

Ahora programaremos lo siguiente.

Imports System.Data.SqlClient

Public Class clsclaseDim cn As New SqlConnection("Server=(local);Integrated Security= SSPI;Database = bdfactura")

'Esta funcion me Listara a los clientes en el ComboFunction Lista_Cliente() As SqlDataReader Dim dr As SqlDataReader : Dim cmd As New SqlCommand("Listado_Cliente", cn) cmd.CommandType = CommandType.StoredProcedure cn.Open() : dr = cmd.ExecuteReader : Return drEnd Function

'Esta funcion nos mostrara la facturas del cliente

Function Facturas_Clientes(ByVal cod As String) As DataTable'Si la conexion esta Abierta La cerramosIf (cn.State = ConnectionState.Open) Then

cn.Close()End IfDim cmd As New SqlCommand("Facturas_Cliente", cn)

cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cod", SqlDbType.VarChar).Value =

codDim da As New SqlDataAdapter(cmd) : Dim dt As New

DataTableda.Fill(dt) : Return dt

End Function

'Esta funcion nos mostrara el detalle de la facturasFunction Detalle_Factura(ByVal fac As String) As DataTable

'Si la conexion esta Abierta La cerramosIf (cn.State = ConnectionState.Open) Then

cn.Close()End IfDim cmd As New SqlCommand("Detalle_Factura", cn)

cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@fac", SqlDbType.VarChar).Value = fac

Dim da As New SqlDataAdapter(cmd) : Dim dt As New DataTable : da.Fill(dt)

Return dtEnd FunctionEnd Class

Una vez terminado de crear todas las funciones vamos a generar la DLL

Si nos damos cuenta, nuestro proyecto ha generado una DLL,

A continuación vamos agregar un Proyecto Windows en nuestra solución

Al cual le llamaremos Mi_Proyecto

A continuación agregaremos a nuestro proyecto la DLL que hemos creado, para ello vamos agregar una referencia

Ahora buscamos nuestra DLL y le damos OK

Ahora importamos a nuestro Proyecto

Imports System.DataPublic Class Form1

Ahora instanciaremos el nombre de nuestra librería

Imports System.DataPublic Class Form1Dim milibreria As New Libreria_Clases.clsclase

Ahora programaremos para que cuando cargue mi formulario me liste los clientes

Private Sub Form1_Load(…) Handles MyBase.LoadDim dr As SqlDataReaderdr = milibreria.Lista_ClienteWhile (dr.Read)

Cbocliente.Items.Add(dr(0) & " " & dr(1))End WhileCbocliente.SelectedIndex = 0

End Sub

Ahora programaremos en el combo

Private Sub Cbocliente_SelectedIndexChanged(…) Handles Cbocliente.SelectedIndexChangedTry Dim cod As String 'Extraemos los 5 Primeros caracteres cod = Mid(Cbocliente.Text, 1, 5) 'Ahora LLenaremos las Facturas del Cliente Dim dt As New DataTabledt = milibreria.Facturas_Clientes(cod)With Lstcliente

.DataSource = dt

.ValueMember = "fac_numero"

.DisplayMember = "fac_numero"

.SelectedIndex = 0End With'Llamamos al Evento de Lstcliente_SelectedIndexChangedLstcliente_SelectedIndexChanged(sender, e)

Catch ex As ExceptionEnd TryEnd Sub

Y Finalmente programaremos en el Listbox

Private Sub Lstcliente_SelectedIndexChanged(…) Handles Lstcliente. SelectedIndex Changed.

Try'Capturamos el Valor del ListBox(Lstcliente)

Dim fac As String = Lstcliente.SelectedValueDim dt As New DataTabledt = milibreria.Detalle_Factura(fac)dgfacturas.DataSource = dt

Catch ex As ExceptionEnd Try

End Sub

Finalmente presionamos F5 y nos debe salir de la siguiente manera:

Ejercicio PropuestoUsando la base de datos VentasProyecto Aplicación Windows

Utilizando la base de datos ventas, creara una aplicación que permita realizar un cálculo de hora trabajadas de los empleados.

Tablas : Empleado, Empl_hor y días.

En el cálculo de horas usted considerara los minutos trabajados también.Por ejemplo: Si el empleado Pedro trabajo los siguientes días:

Lunes: 8:10 AM – 15:30 PM -- Hora trabajadas: 7 horas y 20 minutos.

Martes: 8:20 AM – 15:30 PM – Horas trabajadas: 7 horas y 10 minutos.

Total de horas trabajadas: 14 horas 30 minutos.

Formulario Propuesto:

Nota: Para este ejemplo de la base de datos ventas, los empleados no tienen minutos de tardanza y de salida. Pero usted considerara en su programación los minutos trabajados. (Dado que en eso se basara la revisión del trabajo, modifique la tabla empl_hor, agregando minutos de trabajos para ver el resultado).

Semana 13 y 14 Aplicaciones con 3 Capas

Ejercicio Práctico Nro. 1

Lo primero que vamos a realizar es crear los procedimientos almacenados en SQL.

use BDFACTURAgo----------Listado_Cliente----------------create Procedure Listado_Clienteasselect cli_codigo,cli_nombre,cli_telefono,cli_ruc,cli_direccionfrom Clientesgo----------Genera_Codigo----------------Create procedure Genera_Codigo@cod_cli char(5) OutputAS

Set @cod_cli=(Select Max(Cli_codigo) From Clientes)set @cod_cli=isnull(@cod_cli,'0000')Set @cod_cli='C'+right('0000'+rtrim(right(@cod_cli,4)+1),4)Go--Vamos a comprobar el ProcedimientoDeclare @codigo char(5)Exec Genera_Codigo @codigo Outputprint @codigogo----------Grabar_Cliente----------------create procedure Grabar_Cliente@cod varchar(5),@nom varchar(25),@tel int,@ruc varchar(11),@dir varchar(30)asinsert into clientes values(@cod,@nom,@tel,@ruc,@dir)go----------Actualizar_Cliente----------------create procedure Actualizar_Cliente@cod varchar(5),@nom varchar(25),@tel int,@ruc varchar(11),@dir varchar(30)asupdate clientes set cli_nombre=@nom,cli_telefono=@tel,cli_ruc=@ruc,cli_direccion=@dir where cli_codigo=@codgo

----------Eliminar_Cliente----------------create procedure Eliminar_Cliente@cod varchar(5)asdelete from clientes where cli_codigo=@codgo

Ahora vamos a crear una solución en blanco a la cual la llamaremos Solucion 1Ahora le agregamos una biblioteca de clases le llamaremos Capa De DatosPor defecto este proyecto nos crea una clase, nosotros le cambiaremos de nombre y lo llamaremos capa de datos

Ahora programaremos lo siguiente.

Imports System.Data.SqlClient

Public Class Capa_DatosDim cn As New SqlConnection("Server=(local);Integrated Security=yes;Database=bdfa ctura")

Function D_Listado_Clientes() As DataTableDim da As New SqlDataAdapter("Listado_Cliente", cn)Dim dt As New DataTableda.Fill(dt)Return dt

End Function

Function D_Grabar_Cliente(ByVal cod As String, ByVal nom As String, ByVal tel As Integer, ByVal ruc As String, ByVal dir As String) As Integer

Dim cmd As New SqlCommand("Grabar_Cliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cod", SqlDbType.VarChar).Value = codcmd.Parameters.Add("@nom", SqlDbType.VarChar).Value = nomcmd.Parameters.Add("@tel", SqlDbType.Int).Value = telcmd.Parameters.Add("@ruc", SqlDbType.VarChar).Value = ruccmd.Parameters.Add("@dir", SqlDbType.VarChar).Value = dircn.Open()Dim p As Integer = 0p = cmd.ExecuteNonQueryReturn p

End Function

Function D_Actualizar_Cliente(ByVal cod As String, ByVal nom As String, ByVal tel As Integer, ByVal ruc As String, ByVal dir As String) As Integer

Dim cmd As New SqlCommand("Actualizar_Cliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cod", SqlDbType.VarChar).Value = codcmd.Parameters.Add("@nom", SqlDbType.VarChar).Value = nomcmd.Parameters.Add("@tel", SqlDbType.Int).Value = telcmd.Parameters.Add("@ruc", SqlDbType.VarChar).Value = ruccmd.Parameters.Add("@dir", SqlDbType.VarChar).Value = dircn.Open()Dim p As Integer = 0p = cmd.ExecuteNonQueryReturn p

End Function

Function D_Eliminar_Cliente(ByVal cod As String) As IntegerDim cmd As New SqlCommand("Eliminar_Cliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cod", SqlDbType.VarChar).Value = codcn.Open()Dim p As Integer = 0p = cmd.ExecuteNonQueryReturn p

End Function

Function D_Genera_Codigo() As StringDim cmd As New SqlCommand("Genera_Codigo", cn)cmd.CommandType = CommandType.StoredProcedureDim paramResultado As SqlParameter = New

SqlParameter("@cod_cli", SqlDb Type.Char, 5)paramResultado.Direction = ParameterDirection.Outputcmd.Parameters.Add(paramResultado)cn.Open()cmd.ExecuteReader()cn.Close()

Return paramResultado.ValueEnd FunctionEnd Class

Ahora vamos a generar el proyecto

Ahora a la solución que creamos anteriormente, ahora agregaremos otro proyecto

Ahora a este proyecto le llamaremos Capa de Negocio

Al final debe quedar de la siguiente manera

Ahora al proyecto capa de negocio hay que agregar una referencia, para ello seleccionamos Capa_Negocio y le damos clic derecho

Ahora seleccionamos la DLL generada en la capa de datos

Ahora en la capa de negocio programaremos lo siguiente.

Imports System.Data.SqlClient

Public Class Capa_Negocio'Ahora referenciamos a la capa de datosDim objdatos As New Capa_Datos.Capa_Datos

Function N_Listado_Clientes() As DataTableReturn objdatos.D_Listado_Clientes()

End Function

Function N_Grabar_Cliente(ByVal cod As String, ByVal nom As String, ByVal tel As Integer, ByVal ruc As String, ByVal dir As String) As Integer

Return objdatos.D_Grabar_Cliente(cod, nom, tel, ruc, dir)End Function

Function N_Actualizar_Cliente(ByVal cod As String, ByVal nom As String, ByVal tel As Integer, ByVal ruc As String, ByVal dir As String) As Integer

Return objdatos.D_Actualizar_Cliente(cod, nom, tel, ruc, dir) End Function

Function N_Eliminar_Cliente(ByVal cod As String) As IntegerReturn objdatos.D_Eliminar_Cliente(cod)

End Function

Function N_Genera_Codigo() As StringReturn objdatos.D_Genera_Codigo()

End FunctionEnd Class

Ahora a la solución agregaremos un proyecto y lo llamaremos Capa de Presentación.

Ahora en la capa de presentación agregaremos la referencia

Seleccionamos

Ahora tenemos que configurar para que se ejecute desde la capa de presentación

Ahora agregaremos un

Ahora vamos a editar el ToolStrip, para ello seleccionamos el ToolStrip y le damos clic derecho

Ahora agregaremos 5 botones

En sus propiedades a cada botón escogeremos

Al final nos debe quedar de la siguiente manera

Ahora vamos a importar a la capa de negocio

Public Class Form1Dim objnegocio As New Capa_Negocio.Capa_Negocio

Ahora programaremos para que cuando cargue el formulario me liste los Clientes

Private Sub Form1_Load(…) Handles MyBase.Loadlistado()

End Sub

Sub listado()Dim dt As New DataTabledt = objnegocio.N_Listado_ClientesDataGridView1.DataSource = dt

End Sub

Ahora programaremos en el botón Nuevo

Private Sub btnnuevo_Click(…) Handles btnnuevo.ClickDim ctrl As New Control'recorremos todos los controles que estan dentro del GroupBox1For Each ctrl In GroupBox1.Controls

'Preguntamos si es TextBoxIf TypeOf ctrl Is TextBox Then

ctrl.Text = ""End If

NextDim codigo As String : codigo = objnegocio.N_Genera_Codigolblcod.Text = codigo : txtnom.Focus()

End Sub

Ahora programaremos en el botón Grabar

Private Sub btnGrabar_Click(…) Handles btnGrabar.ClickIf (MsgBox("Desea Grabar", 4 + 32, "Mensaje Sistema") = 6) Then

Dim cod, nom, ruc, dir As String : Dim tel As Integercod = lblcod.Text : nom = txtnom.Text : ruc = txtruc.Textdir = txtdir.Text : tel = CInt(txttel.Text) : Dim p As Integerp = objnegocio.N_Grabar_Cliente(cod, nom, tel, ruc, dir)

If (p > 0) ThenMsgBox("Se Grabo Correctamente", 32, "Mensaje del

Sistema")listado()

ElseMsgBox("Error al Grabar", 4, "Mensaje del Sistema")

End IfEnd If

End Sub

Ahora programaremos para que cuando seleccionemos el DataGridView1 pasen los datos a las cajas de textos.

Private Sub DataGridView1_CellClick(…) Handles DataGridView1.CellClickTry

Dim f As Integer'capturamos la fila seleccionadaf = DataGridView1.CurrentCell.RowIndex

lblcod.Text = DataGridView1(0, f).Value : txtnom.Text = DataGridView1(1, f).Valuetxttel.Text = DataGridView1(2, f).Value : txtruc.Text = DataGridView1(3, f).Value

txtdir.Text = DataGridView1(4, f).ValueCatch ex As ExceptionEnd TryEnd Sub

Ahora programaremos en el botón Modificar

Private Sub btnmodificar_Click(…) Handles btnmodificar.ClickIf (MsgBox("Desea Modificar", 4 + 32, "Mensaje") = 6) Then

Dim cod, nom, ruc, dir As String : Dim tel As Integercod = lblcod.Text : nom = txtnom.Textruc = txtruc.Text : dir = txtdir.Text : tel = CInt(txttel.Text)Dim p As Integerp = objnegocio.N_Actualizar_Cliente(cod, nom, tel, ruc, dir)

If (p > 0) ThenMsgBox("Se Modifico Correctamente", 32, "Mensaje Sistema")Listado()

ElseMsgBox("Error al Modificar", 4, "Mensaje Sistema")

End IfEnd If

End Sub

Ahora programaremos en el botón Eliminar

Private Sub btneliminar_Click(…) Handles btneliminar.ClickIf (MsgBox("Desea Eliminar", 4 + 32, "Mensaje") = 6) Then

Dim cod As Stringcod = lblcod.TextDim p As Integer

p = objnegocio.N_Eliminar_Cliente(cod) If (p > 0) Then

MsgBox("Se Elimino Correctamente", 32, "Mensaje")Listado()

ElseMsgBox("Error al Elimino", 4, "Mensaje")

End IfEnd If

End Sub

Y por ultimo programaremos en botón Salir

Private Sub btnSalir_Click(…) Handles btnSalir.ClickMe.Close()

End Sub

Finalmente le damos F5

Ejercicio Práctico Nro. 2Lo primero que vamos a realizar es crear los procedimientos almacenados en SQL.

use BDfactura----Facturas Realizadascreate procedure Lista_Facturasasselect fac_numero, convert(char(10),fac_fecha,103) Fechafrom fac_cabego--Detalle de las Facturas Seleccionadasset quoted_identifier offgocreate procedure Lista_Detalle@fac varchar(255)

asexec("select fac_numero,a.art_codigo,art_nombre,art_precio,art_cantidad,(art_precio*art_cantidad) Totalfrom articulos as a,fac_deta fd where a.art_codigo=fd.art_codigoand fac_numero in ("+@fac+")")go--probamos el procedimientoLista_Detalle "'F0001','F0002','F0003'"

Ahora en el visual Studio vamos a crear una nueva solución en blanco la cual le ponemos el nombre de Consulta_Solucion.Dentro de la solución, ahora agregaremos un proyecto de biblioteca de clases, la cual llamaremos Capa de Datos

Ahora programaremos lo siguiente.

Imports System.Data.SqlClient

Public Class Capa_DatoDim cn As New SqlConnection("Server=(local);Integrated Security=yes; Database=bdfactura")

Function D_Facturas_Clientes() As DataTableDim da As New SqlDataAdapter("Lista_Facturas", cn)Dim dt As New DataTable : da.Fill(dt) : Return dt

End Function

Function D_Detalle_Facturas(ByVal fac As String) As DataTableDim cmd As New SqlCommand("Lista_Detalle", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@fac", SqlDbType.VarChar).Value = facDim da As New SqlDataAdapter(cmd) : Dim dt As New DataTable :

da.Fill(dt)Return dt

End Function

End Class

Y una vez generado la capa de datos, ahora a la solución agregaremos un proyecto y lo llamaremos capa_negocio

Ahora al proyecto capa de negocio agregaremos una referencia que es la Capa_Datos

Ahora programaremos lo siguiente

Public Class Capa_NegocioDim objdatos As New Capa_Datos.Capa_Dato

Function N_Facturas_Clientes() As DataTableReturn objdatos.D_Facturas_Clientes()

End Function

Function N_Detalle_Facturas(ByVal fac As String) As DataTableReturn objdatos.D_Detalle_Facturas(fac)

End FunctionEnd Class

Una vez generado la capa de negocio, ahora agregaremos un proyecto a la solución, la llamaremos Capa de presentación

Ahora realizaremos el siguiente diseño

A continuación a la capa de presentación le agregaremos una referencia que es la Capa_Negocio

Lo primero que debemos hacer es realizar la referencia de la capa de negocio

Public Class Form1Dim objnegocio As New Capa_Negocio.Capa_Negocio

Ahora programaremos para que cuando cargue el formulario nos liste las facturas realizadas

Private Sub Form1_Load(…) Handles MyBase.LoadDim dt As New DataTabledt = objnegocio.N_Facturas_Clientes()CheckedListBox1.MultiColumn = TrueFor a As Integer = 0 To dt.Rows.Count - 1

CheckedListBox1.Items.Add(dt.Rows(a)(0))Next

End Sub

Ahora programaremos en el botón Ver Facturas

Private Sub btnver_Click(…) Handles btnver.ClickDim cod, codigo, fac As StringDim tamaño As Integerfac = "" : cod = ""

For a As Integer = 0 To CheckedListBox1.Items.Count - 1 If (CheckedListBox1.GetItemChecked(a) = True) Then fac += "'" & CheckedListBox1.Items.Item(a).ToString.Trim & "'," End IfNexttamaño = fac.Length 'Tamaño de la cadenaIf (tamaño > 0) Then 'Le quitamos uno por la coma que sobra codigo = Mid(fac, 1, tamaño - 1) Dim dt As New DataTable dt = objnegocio.N_Detalle_Facturas(codigo) DataGridView1.DataSource = dt

End IfEnd Sub

Finalmente presionamos F5

Ejercicio Práctico Nro. 3Lo primero que vamos a realizar es crear los procedimientos almacenados en SQL.

use bdfacturacreate procedure Lista_Ranking@cant intasif @cant=0 --Si es Cero nos mostrara todos los Clientes con--sus respectivas cantidades de Facturasselect c.cli_codigo,cli_nombre,count(fac_numero) Total_ventas from clientes as c, fac_cabe as fc where c.cli_codigo=fc.cli_codigo group by c.cli_codigo,cli_nombreorder by Total_ventas descelse--Nos mostrar solo las cantidades de clientes que se le envia como parametroselect top (@cant) with ties c.cli_codigo,cli_nombre, count(fac_numero) Total_ventas from clientes as c, fac_cabe as fc where c.cli_codigo=fc.cli_codigogroup by c.cli_codigo,cli_nombre order by Total_ventas descgo

-----Mostrar las Facturas por Clientecreate procedure Mostrar_Facturas@cod varchar(5)asselect fac_numero,convert(char(10),fac_fecha,103) Fecha,fac_totalfrom fac_cabe as fc,clientes as c where c.cli_codigo=fc.cli_codigo and c.cli_codigo=@codgo

Ahora en el visual Studio vamos a crear una nueva solución en blanco llamada Consulta_Solucion Dentro de la solución, ahora agregaremos un proyecto de biblioteca de clases, la cual llamaremos Capa de Datos

Ahora a la capa de datos vamos a crear una clase la cual contendrá mi conexión a la BD

Y lo llamaremos Clsconexion Ahora programaremos lo siguiente

Imports System.DataPublic Class Clsconexion

Public Function conexion_SQL() As StringDim cn As Stringcn = "Server=(local);Integrated Security=yes;Database=bdfactura"Return cn

End FunctionEnd Class

Ahora agregaremos una clase más a la biblioteca Capa_Datos y la llamaremos D_datosY ahora programaremos lo siguiente.

Imports System.Data.SqlClient

Public Class D_DatosDim cone As New Clsconexion'cone.conexion_SQL llamamos a la Cadena de conexion que hicimos

„en la clase ClsconexionDim cn As New SqlConnection(cone.conexion_SQL)

Function D_Muestra_Ranking(ByVal cant As Integer) As DataTableDim cmd As New SqlCommand("Lista_Ranking", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cant", SqlDbType.Int).Value = cantDim da As New SqlDataAdapter(cmd) : Dim dt As New DataTableda.Fill(dt) : Return dt

End Function

Function D_Facturas_Cliente(ByVal codcli As String) As DataTableDim cmd As New SqlCommand("Mostrar_Facturas", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cod", SqlDbType.VarChar).Value = codcli

Dim da As New SqlDataAdapter(cmd) : Dim dt As New DataTableda.Fill(dt) : Return dtEnd FunctionEnd Class

Ahora en la solución creada vamos agregar otra biblioteca de clases la llamaremos capa_Negocio

Ahora en la capa de negocio agregaremos una referencia que vine de la capa de Datos

Ahora programaremos lo siguiente

Public Class Capa_NegocioDim objdato As New Capa_Datos.D_Datos

Function N_Muestra_Ranking(ByVal cant As Integer) As DataTableReturn objdato.D_Muestra_Ranking(cant)End Function

Function N_Facturas_Cliente(ByVal codcli As String) As DataTableReturn objdato.D_Facturas_Cliente(codcli)End Function

End Class

Luego de haber generado la capa de negocio, ahora a la solución agregaremos un proyecto y la llamaremos capa Presentación

A continuación realizaremos el siguiente diseño

Ahora en la capa de presentación agregaremos la referencia de la capa_Negocio

Lo primero que debemos hacer en el formulario es hacer la referencia de la capa_Negocio

Public Class Form1Dim objnegocio As New Capa_Negocio.Capa_Negocio

Ahora vamos a programar para darle valores máximos y mínimos del NumericUpDown1

Private Sub Form1_Load(…) Handles MyBase.Load'Vamos a darle El maximo y minimo valor al NumericUpDown1NumericUpDown1.Maximum = 10NumericUpDown1.Minimum = 1End Sub

Ahora programaremos en el botón Filtrar

Private Sub btnfiltrar_Click(…) Handles btnfiltrar.ClickDim cant As IntegerIf (rbtodos.Checked = True) Thencant = 0Elsecant = NumericUpDown1.ValueEnd IfDim dt As New DataTabledt = objnegocio.N_Muestra_Ranking(cant)DataGridView1.DataSource = dtEnd Sub

Ahora programaremos en el DatagridView1 para que cuando le demos Clic nos muestre las facturas en el DatagridView2

Private Sub DataGridView1_CellClick(…) Handles DataGridView1.CellClickDim p As Integerp = DataGridView1.CurrentCell.RowIndexDim cod As String = DataGridView1(0, p).ValueDim dt As New DataTabledt = objnegocio.N_Facturas_Cliente(cod)DataGridView2.DataSource = dtEnd Sub

Ahora presionamos F5

Ejercicio Práctico Nro. 4Lo primero que vamos a realizar es crear los procedimientos almacenados en SQL

use bdfacturago----------Listado_Cliente-----------------------------------------------------------Creamos Ahora el Procedimientocreate Procedure Listado_Clienteasselect cli_codigo,cli_nombre from clientes where cli_codigo in(select distinct cli_codigo from fac_cabe)go----------Facturas_Varios_Cliente-----------------------------------------------------------Habilita el uso de las comillasset quoted_identifier offgo--Creamos Ahora el Procedimientocreate Procedure Facturas_Varios_Cliente@codigos varchar(255)asexec("select fac_numero,c.cli_codigo,cli_nombre "+"from fac_cabe as fc,clientes as c where fc.cli_codigo=c.cli_codigo and "+"c.cli_codigo in(" +@codigos +") "+"order by c.cli_codigo asc")

go--Probamos el Proc AlmacenadoFacturas_Varios_Cliente "'C0001','C0002','C0003'"

Ahora en el visual Studio vamos a crear una nueva solución en blanco llamada Consulta_Solucion.Dentro de la solución, ahora agregaremos una biblioteca de clases, la cual llamaremos Capa de DatosAhora a la capa de datos vamos a crear una clase la cual contendrá mi conexión a la BD con el nombre de Clsconexion

Ahora programaremos lo siguiente

Imports System.Data

Public Class ClsconexionPublic Function conexion_SQL() As StringDim cn As Stringcn = "Server=(local);Integrated Security=yes;Database=bdfactura"Return cnEnd FunctionEnd Class

Ahora agregaremos una clase más a la biblioteca y la llamaremos D_datosY ahora programaremos lo siguiente

Imports System.Data.SqlClientPublic Class D_DatosDim cone As New Clsconexion'cone.conexion_SQL llamamos a la Cadena de conexion que hicimos „en la clase ClsconexionDim cn As New SqlConnection(cone.conexion_SQL)Function D_Lista_Cliente() As DataTableDim da As New SqlDataAdapter("Listado_Cliente", cn)Dim dt As New DataTableda.Fill(dt)Return dtEnd FunctionFunction D_Fact_Cli_Varios(ByVal codcli As String) As DataTableDim cmd As New SqlCommand("Facturas_Varios_Cliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@codigos", SqlDbType.VarChar).Value = codcliDim da As New SqlDataAdapter(cmd)Dim dt As New DataTableda.Fill(dt)Return dtEnd FunctionEnd Class

Una vez generada la capa de datos, Ahora en la solución creada vamos agregar otra biblioteca de Clases y la llamaremos capa_NegocioAhora en la capa de negocio agregaremos una referencia que vine de la capa de DatosAhora programaremos lo siguiente

Public Class Capa_NegocioDim objdato As New Capa_Datos.D_DatosFunction N_Lista_Cliente() As DataTableReturn objdato.D_Lista_Cliente()End Function

Function N_Fact_Cli_Varios(ByVal codcli As String) As DataTableReturn objdato.D_Fact_Cli_Varios(codcli)End FunctionEnd Class

Luego de haber generado la capa de negocio, ahora a la solución agregaremos un proyecto y la llamaremos capa Presentación

A continuación realizaremos el siguiente diseño

Ahora en la capa de presentación agregaremos la referencia de la capa_NegocioAhora realizaremos una referencia a la capa de Negocio

Public Class Form1Dim objnegocio As New Capa_Negocio.Capa_Negocio

Ahora programaremos para Listar los clientes a penas cargue el formulario

Private Sub Form1_Load(…) Handles MyBase.LoadDim dt As New DataTableformato()Dim lstitem As ListViewItemdt = objnegocio.N_Lista_Cliente()For a As Integer = 0 To dt.Rows.Count - 1lstitem = ListView1.Items.Add(dt.Rows(a)(0))lstitem.SubItems.Add(dt.Rows(a)(1))NextEnd SubSub formato() 'Formato del ListView1With ListView1.CheckBoxes = True 'Mostramos CheckBoxes en el ListView1.View = View.Details 'Vista Detalle.GridLines = True 'Muestre Lineas de separacion entre filas y columnas.Columns.Add("Codigo del Cliente", 120, HorizontalAlignment.Center).Columns.Add("Nombre del Cliente", 250, HorizontalAlignment.Left)End WithEnd Sub

Ahora programaremos en el Botón Ver Facturas

Private Sub Btnver_Click(…) Handles Btnver.ClickDim cod, codigo As StringDim tamaño As Integercod = ""TryFor a As Integer = 0 To ListView1.Items.Count - 1If (ListView1.CheckedItems(a).Checked = True) Thencod = cod & "'" & ListView1.CheckedItems(a).Text & "',"End IfNextCatch ex As ExceptionEnd Trytamaño = cod.Length 'Tamaño de la cadena'Le quitamos uno por la coma que sobracodigo = Mid(cod, 1, tamaño - 1)Dim dt As New DataTable : dt = objnegocio.N_Fact_Cli_Varios(codigo)DataGridView1.DataSource = dt'A la columna 2 le damos un ancho de 200DataGridView1.Columns(2).Width = 200End Sub

Finalmente presionamos F5

Ejercicios PropuestosAplicación 1:Realizar el siguiente programa siguiente las siguientes consideraciones:Cuando inicie el programa, se deberá demostrar en el Combobox1 (CboAño) los años que fueron emitidas todas las ordenes, a la vez agregara los elementos al Lisbox1 (A-C,E-G,H-KI,L-O,P-S,T-Z), el cual se deberá demostrar por columnas, y por ultimo creara la estructura del Listview1 con los campos (ProductID,CompanyName,UnitPrice,Quantity,Total).Cuando seleccione ambos parámetros un año y un rango de letras y haga clic en el botón Buscar Clientes por …, se deberá demostrar en el Listbox2 los clientes que le fueron emitidas sus órdenes.Cuando seleccione un cliente del Listbox2, se deberá demostrar en el Listbox3 las ordenes pares que le fueron emitidas al cliente seleccionado, mostrara los siguientes campos concatenados (OrderID,OrderID,ShippedDate,Dias_Envio (Diferencia en días de ambos campos fechas)).Y cuando seleccione un elemento del Listbox3, deberá de capturar la orden emitida, y deberá demostrar en el Listview1, su detalle de venta de esa orden.

Aplicación 2:Se pide a usted que cree una aplicaron que permita realizar una consulta de datos bajo las siguientes consideraciones:Cuando seleccione cualquier Radiobuttons, deberá demostrar todos los Customers que se encuentran mediante el rango de letras seleccionado.Antes de presionar el botón Búsqueda de Ordenes, deberá de tener como parámetro el código del Customers seleccionado, y las fechas ingresadas. Y deberá demostrar como resultado en el ListView1, todas las Ordenes emitidas por los parámetros dados, mostrando los siguientes campos bajo las siguientes consideraciones:El campo OrderID.El campo RequiredDate, que es la fecha que se requería el producto.Creara un campo TotalVenta, que es la suma del producto de UnitPrice * Quantity.Creara un campo DiasEnvio, que es la diferencia de ShippedDate – OrderDate.Creara un campo EstadoEnvio, que viene a mostrar un mensaje bajo el siguiente criterio:Si los días de envió es mayor o igual a 10, entonces “Fuera de fecha”.Si los días de envió es menor de 10, entonces “Entrega inmediata”.Y por ultimo al seleccionar una fila del ListView1, deberá de capturar el número de orden, que le servirá como parámetro para mostrar todos los productos vendidos por esa orden seleccionada en el ListView2, mostrando los campos de la imagen.