lunes, 23 de junio de 2014

Consulta por rango de edades y carga de datos a un ListView desde un DataReader - Pregunta 1 (Ex.Final LPV 4to Ciclo)

En esta oportunidad voy a presentar el desarrollo de la pregunta Nº 1 del examen final del curso de Lenguaje de Programación Visual (4to. Ciclo). El desarrollo ha sido resuelto en Visual Basic. Net 2010. El enunciado es el siguiente:
  • Crear una base de datos con la tabla Alumnos(codalu, nomalu, apealu, edad, ciclo, turno, sexo). Ingresar 10 alumnos y diseñar un formulario que permita ingresar dos edades y visualizar en un ListView el nombre, apellido, ciclo y edad de los alumnos cuya edad este comprendida entre las edades ingresadas.
Solución.

1. Ingresar al SQL Server y crear la base de datos de nombre Universidad con la tabla Alumnos. El script para crearlo es el siguiente:
Create database Universidad;
Go
use universidad;
Go
create table Alumnos
(codalu int,
nomalu varchar (25),
apealu varchar (25),
edad int,
ciclo int,
turno char (1),
sexo char (1),
carrera varchar(35)
)
Go
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (1,'JOSE LUIS','LINARES PORRES',20,4,'D','M','INGENIERIA DE SISTEMAS');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (2,'ANA','TORRES AYQUIPA',18,4,'N','F','INGENIERIA DE SISTEMAS');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (3,'JORGE','ALVAREZ TUNES',24,3,'D','M','ADMINISTRACION');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (4,'AUGUSTO','FLORES CURAHUA',21,7,'D','M','ARQUITECTURA');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (5,'CECILIA ROSA','PAJARES COMILLA',20,2,'N','F','TURISMO Y HOTELERIA');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (6,'LOURDES VIRGINIA','CASTILLO FLORES',19,1,'N','F','ARQUITECTURA');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (7,'TATIANA','PERALES CASMA',23,1,'D','F','CONTABILIDAD');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (8,'HUGO ALFREDO','LOARTE VEGA',17,9,'D','M','INGENIERIA DE SISTEMAS');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (9,'DIONICIO','HUAMAN FLORES',16,7,'N','M','ELECTRONICA');
Insert into Alumnos (codalu, nomalu, apealu, edad, ciclo, turno, sexo, carrera) values (10,'TARYN','ALMONACID FERRI',22,8,'D','F','TURISMO Y HOTELERIA');

Como verán hay un campo adicional que es ‘carrera’ el cual no solicitaron, pero sin embargo lo utilizaremos más adelante en una de los siguientes enunciados.

2. Abrimos el Visual Studio 2010 (Visual Basic .Net) y realizamos los siguientes pasos:
- Archivo, nuevo, proyecto…., Visual Basic
- Seleccionar Aplicación de Windows Forms
- Colocar de nombre al proyecto ConsultaxEdades, desactivar la opción Crear directorio para la solución, aceptar.

3. Vamos a realizar el siguiente diseño de pantalla y agregaremos los controles respectivos.
Nos dirigimos a la ventana de propiedades y a cada objeto le asignamos sus propiedades según la tabla a continuación:

Objeto
Propiedad
Valor
Form1
Name
Text
ConsultaxEdades
Consulta por Rango de Edades
Label1
Text
Edad Mínima
Label2
Text
Edad Maxima
Text1
Name
txtEdadMinima
Text2
Name
txtEdadMaxima
Button1
Text
Name
Consultar
btnConsultar

Procedimientos asociados a eventos de los objetos
Objeto
Evento
Nombre de Procedimiento
Form
Load
ConsultaxEdades_Load
btnConsultar
Click
consultar
---
---llenarListView
Para crear el procedimiento asociado a los eventos de cada control (objeto) debemos de ir a la ventana de propiedades y hacer clic en el icono del truenito, y podemos poner un nombre específico al procedimiento asociado al evento que usaremos. Por ejemplo seleccionamos el control Button (btnConsultar) y en su evento Click creamos un procedimiento de nombre consultar.


4. Comenzamos a programar lo siguiente:

Imports System.Data.SqlClient 'NameSpace que permite usar las clases para interactuar con SQL Server
Public Class consultaxEdades
    'Declaramos un objeto de conexión y un DataReader que servirá de contenedor de datos
    Dim con As SqlConnection
    Dim drd As SqlDataReader

    'El evento Load del formulario
    Private Sub consultaxEdades_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        con = New SqlConnection("integrated security=true;server=COMP-PCW01;database=Universidad")
    End Sub

    'Creamos un procedimiento el cual nos permitira llenar nuesto ListView cada vez que demos click en nuestro botón Consultar
    Private Sub llenarListView()
        Dim fila As New ListViewItem 'Declaramos un objeto del tipo ListViewItem
        While drd.Read 'Bucle que recorre cada una de las filas del objeto DataReader que contiene nuestra información
            'Se inserta cada fila del DataReader en nuestro ListView
            fila = lvwDetalle.Items.Add(drd(0).ToString)
            fila.SubItems.Add(drd(1).ToString)
            fila.SubItems.Add(drd(2).ToString)
            fila.SubItems.Add(drd(3).ToString)
        End While
    End Sub

    'Este es el evento Click de nuestro botón btnConsultar
    Private Sub consultar(sender As System.Object, e As System.EventArgs) Handles btnConsultar.Click
        'Declaramos nuestras variables y le asignamos los valores de cada control
        Dim edad1, edad2 As Integer
        edad1 = Val(txtEdadMinima.Text)
        edad2 = Val(txtEdadMaxima.Text)

        'Validamos que los valores ingresados sean números y que la edad mínima no sea mayor a la edad máxima
        If Not (IsNumeric(txtEdadMinima.Text) Or IsNumeric(txtEdadMinima.Text)) Or edad1 > edad2 Then
            MsgBox("Ingrese un Rango de edades correctos", MsgBoxStyle.Information)
            txtEdadMinima.Focus()
            Return
        End If
        Try
            con.Open() 'Abrimos nuestra conexión
            'Declaramos un objeto del tipo SqlCommand que nos permitira realizar nuestras consultas SQL
            Dim cmd As SqlCommand = New SqlCommand("Select [nomalu],[apealu],[ciclo],[edad] From Alumnos where edad BETWEEN '" + txtEdadMinima.Text + "' AND '" + txtEdadMaxima.Text + "'", con)
            drd = cmd.ExecuteReader() 'Ejecutamos la consulta SQL y obtenemos los datos
            If Not drd.HasRows Then 'Validamos si nuestro contenedor DataReader tiene información
                MsgBox("No existen Alumnos en el Rango de edades Ingresado", MsgBoxStyle.Information)
                txtEdadMinima.Focus()
                con.Close()
                Return
            End If
            lvwDetalle.Clear() 'Limpiamos nuestro ListView antes de agregar los datos
            ' Creamos la cabecera (Títulos) para nuestro ListView
            With lvwDetalle
                .Columns.Add("Nombre", 150, HorizontalAlignment.Left)
                .Columns.Add("Apellidos", 150, HorizontalAlignment.Left)
                .Columns.Add("Ciclo", 50, HorizontalAlignment.Center)
                .Columns.Add("Edad", 50, HorizontalAlignment.Left)
                .View = View.Details
            End With
            'Llamamos a nuestro procedimiento llenarListView para agregar la información a nuestro ListView desde el DataReader
            llenarListView()
            drd.Close() 'Cerramos el DataReader
        Catch ex As SqlException 'En caso haya error en nuestro codigó estas sentencias nos dará pistas del error.
            Dim er As SqlError
            For Each er In ex.Errors
                MsgBox(er.Message)
            Next
        End Try
        con.Close() 'Cerramos la conexión
    End Sub
End Class

He tratado de dejar comentarios en las sentencias más importantes a modo de explicar con mayor detalle el uso de cada línea de código. Espero les sea de utilidad y sigan practicando mucho más la programación y les guste tanto como a mí. Cualquier consulta no duden en hacerlo y si les gusto esto entonces recomiéndenlo.

Ojo: En la cadena de conexión del programa se debe de colocar el nombre de su Servidor de Base de datos que figura en su SQL Server y este debe ser colocado en el parámetro server=<Nombre Servidor>.

con = New SqlConnection("integrated security=true;server=COMP-PCW01;database=Universidad")
    End Sub

2 comentarios:

  1. Muy Bueno amigo se entiende mucho, algún correo para contactarte

    ResponderEliminar
    Respuestas
    1. Gracias Johon Lopez por tu comentario, aunque las herramientas de edición del Blog no son de mucha ayuda. Estaré dando mayor énfasis en las explicaciones para que los usuarios que recién inician en la programación, también puedan entenderlo rápidamente.

      Eliminar