NET.doc
-
Upload
oscarin696 -
Category
Documents
-
view
213 -
download
0
Transcript of NET.doc
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.