jueves, 26 de junio de 2014

Agregar artículos desde una consulta de SQL server y cargarlo a un ListView - Pregunta 3 (Ex.Final LPV 4to Ciclo)

Vamos a desarrollar la pregunta Nº 3 del examen final del curso de Lenguaje de Programación Visual (4to. Ciclo). Para el desarrollo hemos utilizado el Visual Studio 2010 (VBasic .Net). El enunciado es el siguiente:

- Crear la tabla Artículos(codigo, nombre, precio) luego programar un formulario que permita visualizar los artículos en un combo, al seleccionar un artículo se deberá mostrar su precio y su código, para ingresar una cantidad y agregar dicho artículo al ListView a manera de detalles de venta.

Para este caso vamos a utilizar la base de datos Universidad la cual creamos en las anteriores publicaciones. Pueden revisarlo en el siguiente enlace:.
Solución:
1. Abrimos nuestro SQL Server y ejecutamos las siguientes líneas de script para crear nuestra tabla Articulos con su estructura respectiva dentro de la base de datos Universidad.

use universidad;
Go
 create table Articulos
(codigo varchar(5),
nombre varchar (50),
precio decimal(10,2)
);
Go
 Insert into Articulos (codigonombrepreciovalues ('A0001','LICUADORA  OSTER',150.00);
Insert into Articulos (codigonombrepreciovalues ('A0002','MP4 SONY 4GB',120.00);
Insert into Articulos (codigonombrepreciovalues ('A0003','TABLET AOC 4GB',229.00);
Insert into Articulos (codigonombrepreciovalues ('A0004','COCINA MABE 4 HORNILLAS',499.00);

Insert into Articulos (codigonombrepreciovalues ('A0005','TOSTADORA IMACO',47.00);

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 VentaArticulos, desactivar la opción Crear directorio para la solución, aceptar.
3. Diseñaremos la siguiente interfaz de usuario y agregaremos los controles respectivos. 
image
- Nos dirigimos a la ventana de propiedades y a cada objeto le asignamos sus propiedades según la siguiente tabla:
Objeto
Propiedad
Valor
Form Text
Name
Venta de Artículos
frmVentaArticulos
Label1 Text ARTICULOS:
Label2 Text CODIGO:
Label3 Text PRECIO:
Label4 Text CANTIDAD:
Label5 Name lblCodigo
Label6 Name lblPrecio
Label7 Text TOTAL:
Label8 Name lblTotal
ComboBox1 Name cboArticulos
TextBox1 Name txtCantidad
ListView1 Name lvwDetalle
Button1 Text
Name
VENDER
btnVender

Procedimientos asociados a eventos de los objetos

Objeto
Evento
Nombre del procedimiento
Form Load frmVentaArticulos_Load
cboArticulos SelectionChangeCommitted cargarCombo
btnVender Click vender
Definidos por el usuario --- llenarListView()

Para crear el procedimiento o métodos ya sabemos que tenemos que dirigirnos a la ventana de propiedades y hacer un en el icono del truenito para visualizar todos los eventos asociados al objeto (control), y podemos poner un nombre específico al método asociado al evento que usaremos. 

4. Nos dirigimos a la ventana de código (haciendo doble clic sobre el formulario) y empezamos a programar:

Imports System.Data.SqlClient
Public Class frmVentaArticulos
    Dim con As SqlConnection
    Dim drd As SqlDataReader
    Dim total As Decimal = 0
    Private Sub frmVentaArticulos_Load(sender As System.Object, e As System.EventArgs)Handles MyBase.Load
        con = New SqlConnection("integrated security=true;server=COMP-PCW01;database=Universidad")
        lblCodigo.Text = ""
        lblPrecio.Text = ""
        lblTotal.Text = ""
        With lvwDetalle
            .Columns.Add("Codigo", 50, HorizontalAlignment.Left)
            .Columns.Add("Producto", 190, HorizontalAlignment.Left)
            .Columns.Add("Precio", 60, HorizontalAlignment.Right)
            .Columns.Add("Cantidad", 70, HorizontalAlignment.Right)
            .Columns.Add("Importe", 100, HorizontalAlignment.Right)
            .View = View.Details
        End With
        Try
            con.Open()
            Dim cmd As SqlCommand = New SqlCommand("Select [codigo],[nombre] From Articulos", con)
            Dim bs As New BindingSource
            drd = cmd.ExecuteReader()
            bs.DataSource = drd
            If Not drd.HasRows Then
                MsgBox("No existen Articulos para vender"MsgBoxStyle.Information)
                cboArticulos.Focus()
                con.Close()
                Return
            End If
            cboArticulos.DataSource = bs
            cboArticulos.DisplayMember = "nombre"
            cboArticulos.ValueMember = "codigo"
            drd.Close()
        Catch ex As SqlException
            Dim er As SqlError
            For Each er In ex.Errors
                MsgBox(er.Message)
            Next
        End Try
        con.Close()
    End Sub
    Private Sub llenarListView()
        Dim fila As New ListViewItem
        fila = lvwDetalle.Items.Add(lblCodigo.Text)
        fila.SubItems.Add(cboArticulos.Text)
        fila.SubItems.Add(lblPrecio.Text)
        fila.SubItems.Add(txtCantidad.Text)
        Dim Importe As Decimal = Decimal.Parse(lblPrecio.Text) *Integer.Parse(txtCantidad.Text)
        fila.SubItems.Add(String.Format(Importe, "f"))
        total += Importe
        lblTotal.Text = String.Format(total, "f")
    End Sub

    Private Sub cargarCombo(sender As System.Object, e As System.EventArgsHandlescboArticulos.SelectionChangeCommitted
        Try
            con.Open()
            Dim cmd As SqlCommand = New SqlCommand("Select [precio] From Articulos where codigo = '" + cboArticulos.SelectedValue.ToString + "'", con)
            drd = cmd.ExecuteReader()
            While drd.Read
                lblCodigo.Text = cboArticulos.SelectedValue
                lblPrecio.Text = drd(0).ToString
            End While
            drd.Close()
        Catch ex As SqlException
            Dim er As SqlError
            For Each er In ex.Errors
                MsgBox(er.Message)
            Next
        End Try
        con.Close()
    End Sub

    Private Sub vender(sender As System.Object, e As System.EventArgsHandlesbtnVender.Click
        If lblCodigo.Text = "" Or Not IsNumeric(Val(txtCantidad.Text)) Or Val(txtCantidad.Text) <= 0 Then
            MsgBox("Seleccione un Articulo e Ingrese la cantidad a Vender",MsgBoxStyle.Exclamation)
            cboArticulos.Focus()
            Return
        End If
        llenarListView()
    End Sub
End Class

5. Para ejecutarlo debemos de seleccionar un articulo del combo, luego colocar la cantidad y finalmente hacer clic en Vender para que se cargue el ListView. El formulario en ejecución es el siguiente:

image
Cualquier consulta no duden en hacerlo y si les gusto entonces recomiéndenlo.

Ojo: Nos e olviden de hacer los cambios en la cadena de conexión con los datos de su computador.

miércoles, 25 de junio de 2014

Agregar y Buscar registros en la tabla Alumnos de SQL Server - Pregunta 2 (Ex.Final LPV 4to Ciclo)

Vamos a desarrollar la pregunta Nº 2 del examen final del curso de Lenguaje de Programación Visual (4to. Ciclo). Para el desarrollo hemos utilizado el Visual Studio 2010 (VBasic .Net). El enunciado es el siguiente:

- Programar un formulario que permita agregar y buscar elementos de la tabla Alumnos(codalu, nomalu, apealu,  ciclo, turno, carrera)

Para este caso vamos a utilizar la base de datos Universidad y la tabla Alumnos que creamos en la anterior publicación. Pueden revisar la publicación anterior en el siguiente enlace:
Solución:
1. 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 ConsultaInsertarAlumnos, desactivar la opción Crear directorio para la solución, aceptar.
2. Diseñaremos la siguiente interfaz de usuario y agregaremos los controles respectivos.



- Nos dirigimos a la ventana de propiedades y a cada objeto le asignamos sus propiedades según la siguiente tabla:

Objeto Propiedad Valor
Form
Text
Name
Agregar y Buscar Alumnos
frmBusquedaInsertar
Label1
Text
ALUMNOS
Label2
Text
CODIGO
Label3
Text
APELLIDO:
Label4
Text
CICLO:
Label5
Text
TURNO:
Label6
Text
CARRERA:
TextBox1
Name
txtCodigo
TextBox2
Name
txtNombre
TextBox3
Name
txtApellido
ComboBox1
Name
cboCiclo
RadioButton1
Name
Text
rbnManana
Mañana
RadioButton2
Name
Text
rbnNoche
Noche
ComboBox2
Name
cboCarrera
Button1
Text
Name
Buscar
btnBuscar
Button2
Text
Name
Agregar
btnAgregar
Button3
Text
Name
Limpiar
btnLimpiar

Procedimientos asociados a eventos de los objetos

Objeto Evento Nombre del método
Form
Load
frmBusquedaInsertar_Load
btnBuscar
Click
buscar
btnAgregar
Click
agregar
btnLimpiar
Click
limpiar
Definidos por el usuario
---
cargarDatos
limpiarControles

Para crear el procedimiento o métodos ya sabemos que tenemos que dirigirnos a la ventana de propiedades y hacer un en el icono del truenito para visualizar todos los eventos asociados al objeto (control), y podemos poner un nombre específico al método asociado al evento que usaremos.

3. Nos dirigimos a la ventana de código (haciendo doble clic sobre el formulario) y empezamos a programar:

Imports System.Data.SqlClient
Public Class frmBusquedaInsertar
    Dim con As SqlConnection
    Dim drd As SqlDataReader
    Private Sub frmBusquedaInsertar_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
    Private Sub buscar(sender As System.Object, e As System.EventArgs) Handles btnBuscar.Click
        Dim codigo As Integer
        codigo = Val(txtCodigo.Text)
        If Not IsNumeric(codigo) Then
            MsgBox("Ingrese un Código númerico para la búsqueda", MsgBoxStyle.Information)
            txtCodigo.Focus()
            Return
        End If
        Try
            con.Open()
            Dim cmd As SqlCommand = New SqlCommand("Select [codalu],[nomalu],[apealu],[ciclo],[turno],[carrera] From Alumnos where codalu='" + Str(codigo) + "'", con)
            drd = cmd.ExecuteReader()
            If Not drd.HasRows Then
                MsgBox("No existe Alumno con el Código " + Str(codigo), MsgBoxStyle.Information)
                limpiarControles()
                txtCodigo.Focus()
                con.Close()
                Return
            End If
            cargarDatos()
            drd.Close()
        Catch ex As SqlException
            Dim er As SqlError
            For Each er In ex.Errors
                MsgBox(er.Message)
            Next
        End Try
        con.Close()
    End Sub

    Private Sub cargarDatos()
        Dim turno As String
        drd.Read()
        txtNombre.Text = drd(1).ToString
        txtApellido.Text = drd(2).ToString
        cboCiclo.Text = drd(3).ToString
        turno = drd(4).ToString
        If turno = "D" Then
            rbnManana.Checked = True
            rbnNoche.Checked = False
        Else
            rbnManana.Checked = False
            rbnNoche.Checked = True
        End If
        cboCarrera.Text = drd(5).ToString
    End Sub

    Private Sub limpiar(sender As System.Object, e As System.EventArgs) Handles btnLimpiar.Click
        limpiarControles()
    End Sub
    Private Sub limpiarControles()
        txtCodigo.Clear()
        txtNombre.Clear()
        txtApellido.Clear()
        cboCiclo.Text = ""
        cboCarrera.Text = ""
        txtCodigo.Focus()
    End Sub

    Private Sub agregar(sender As System.Object, e As System.EventArgs) Handles btnAgregar.Click
        Dim codigo As Integer
        codigo = Val(txtCodigo.Text)
        If Not IsNumeric(codigo) Then
            MsgBox("Ingrese un Código númerico para Agregarlo", MsgBoxStyle.Information)
            txtCodigo.Focus()
            Return
        End If
        If txtCodigo.Text = "" Or txtNombre.Text = "" Or txtApellido.Text = "" Or cboCiclo.Text = "" Or cboCarrera.Text = "" Or (rbnManana.Checked = False And rbnNoche.Checked = False) Then
            MsgBox("Debe de llenar todos los campos para agregar un Nuevo Alumno", MsgBoxStyle.Information)
            Return
        End If
        Try
            con.Open()
            Dim cmd As SqlCommand = New SqlCommand("Select [codalu] From Alumnos where codalu='" + Str(codigo) + "'", con)
            Dim valor As String = cmd.ExecuteScalar()
            If valor <> "" Then
                MsgBox("Código de Alumno " + Str(codigo) + " ya existe", MsgBoxStyle.Information)
                txtCodigo.Focus()
                con.Close()
                Return
            End If
            cmd = New SqlCommand("Insert into Alumnos (codalu, nomalu, apealu, ciclo, turno, carrera) values(@codalu,@nomalu,@apealu,@ciclo,@turno,@carrera)", con)
            cmd.Parameters.AddWithValue("@codalu", codigo)
            cmd.Parameters.AddWithValue("@nomalu", Trim(txtNombre.Text))
            cmd.Parameters.AddWithValue("@apealu", Trim(txtApellido.Text))
            cmd.Parameters.AddWithValue("@ciclo", Integer.Parse(cboCiclo.Text))
            Dim turno As String
            If rbnManana.Checked = True Then
                turno = "D"
            Else
                turno = "N"
            End If
            cmd.Parameters.AddWithValue("@turno", turno)
            cmd.Parameters.AddWithValue("@carrera", cboCarrera.Text)
            cmd.ExecuteNonQuery()
            MsgBox("Alumno Registrado con código " + Str(codigo), MsgBoxStyle.Information)
        Catch ex As SqlException
            Dim er As SqlError
            For Each er In ex.Errors
                MsgBox(er.Message)
            Next
        End Try
        con.Close()
    End Sub
End Class

4. Aquí mostramos la aplicación en ejecución, para realizar una búsqueda debemos ingresar un código (1..10) y dar clic en Buscar. Para agregar debemos de rellenar todos los campos y presionar Agregar.

interfaz2-2
Cualquier consulta no duden en hacerlo y si les gusto entonces recomiéndenlo.

Ojo: Nos e olviden de hacer los cambios en la cadena de conexión con los datos de su computador.