14 agosto 2015

Programación Orientada a Objetos en VB.NET con base de datos Access 2010

 


Entrada Relacionada: El Patrón Modelo-Vista-Controlador y Programación Orientada a Objetos en PHP Profesional

Como bien es sabido, la Programación orientada a objetos es una metodología de programación la cual se basa en modelar el mundo real y ha ganado importancia significativa en los últimos tiempos, en este tipo de programación se trabaja con objetos en el sistema que interactuan unos con otros. No es para nada difícil de entender si sabemos reconocer cuales son cada una de esas entidades que forman parte de un problema a resolver. Sin mas a que ahondar, continuamos con un breve ejemplo sobre el cual ya hemos venido trabajando en tutoriales anteriores, como la programación orientada a objetos en PHP, que es básicamente lo mismo, pero para efectos de este tutorial, usaremos el maravilloso Visual Studio y su VB.NET Tenemos la clase "persona", objeto de la vida real que en nuestro caso, tiene una cédula de identidad (Numero de identificación único), nombres, apellidos, edad y sexo, y las funciones de la misma serán Registrar, Modificar, Buscar y Eliminar.

  Ahora, que ingredientes necesitamos para empezar?



1. Un formulario (frm_persona) Aplicación de Windows Forms
2. 5 Labels (Cedula, Nombres, Apellidos, Edad, Sexo)
3. 5 TextBox (txt_cedula, txt_nombres, txt_apellidos, txt_edad, txt_sexo)
4. 4 Botones (btn_registrar, btn_modificar, btn_buscar, btn_eliminar)

Una vez que tengamos nuestro formulario armado de la siguiente manera, proseguimos con lo siguiente:

Crear y conectar a la base de datos

Vamos a Microsoft Office Access 2010 (funciona para Access 2007 o 2013) y creamos una nueva base de datos, a la cual llamaremos bd.accdb y contendra dentro de ella la tabla persona. Su ubicación será la carpeta "Debug" de tu proyecto la cual se genera a la hora de compilarlo, sus estructura quedará de la siguiente manera.



Una vez realizado esto, volvemos a nuestro Visual Studio, y vamos al menu Proyecto > Agregar Modulo y agregamos un nuevo modulo el cual llamaremos conexion.vb, borra todo el codigo que pueda haber, y copia y pega el siguiente.

Module conexion
    Public conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bd.accdb;Persist Security Info=False")
    Public cmd As New OleDb.OleDbCommand
    Public dr As OleDb.OleDbDataReader
    Public sql As String

    Public Sub conectarse()
        Try
            conn.Open()
        Catch ex As Exception
            If ex.ToString.Contains("No se pudo encontrar") Then
                MsgBox("La base de datos a la que intentas conectar no se encuentra en el directorio, por favor, verifica e intenta nuevamente", MsgBoxStyle.Critical, "Error")
            End If

        End Try
    End Sub
End Module

El texto en Rojo será el nombre de nuestra base de datos solamente, siempre y cuando este dentro de la carpeta "Debug", si este archivo no se encuentra allí, debes colocar la ruta entera de su respectiva ubicación, yo personalmente recomiendo trabajar con los archivos dentro de la carpeta del proyecto en cuestión.

Crear el Modulo de Funciones

Crearemos un nuevo modulo en donde se introducirán ciertas funciones que se suponen, deberían ser usadas en todo el proyecto, y por tal motivo, se globaliza de tal modo, en este caso, el modulo se llamara funciones.vb y solo contendrá el siguiente código

Module funciones
    Public Sub campoVacio(ByRef cadena As TextBox, ByRef campo As String)
        MsgBox("El campo de " + campo + " esta vacio")
        cadena.Select()
    End Sub
End Module

Crear la clase del Objeto

Ahora, es momento de crear el codigo de la clase, objeto o entidad "persona'

Nos dirigimos al menu Proyecto > Agregar clase, con esto agregaremos una nueva clase al proyecto, la cual, debemos nombrar como persona.vb, y la misma contendra el siguiente codigo


Public Class persona
    Public Property cedula As String
    Public Property nombres As String
    Public Property apellidos As String
    Public Property edad As Integer
    Public Property sexo As String


    Public Sub registrarPersona(cedula, nombres, apellidos, edad, sexo)
        cmd.CommandType = CommandType.Text
        cmd.Connection = conn

        sql = "INSERT INTO persona(cedula,nombres,apellidos,edad,sexo) VALUES ('" & cedula.ToString.ToUpper & "','" & nombres.ToString.ToUpper & "','" & apellidos.ToString.ToUpper & "','" & edad & "','" & sexo.ToString.ToUpper & "')"
        cmd.CommandText = sql
        Try
            cmd.ExecuteNonQuery()
            MsgBox("Registro Exitoso", MsgBoxStyle.Information, "Enhorabuena")
        Catch ex As Exception
            If ex.ToString.Contains("valores duplicados") Then
                MsgBox("El numero de identificacion ya esta registrado", MsgBoxStyle.Information, "Información")
            ElseIf ex.ToString.Contains("No coinciden los tipos de datos") Then
                MsgBox("El valor introducido no es un dato valido", MsgBoxStyle.Critical, "Error")
            Else
                MsgBox(ex.ToString)
            End If
        End Try
    End Sub

    Public Sub modificarPersona(cedula, nombres, apellidos, edad, sexo)
        cmd.CommandType = CommandType.Text
        cmd.Connection = conn

        sql = "UPDATE persona SET nombres = '" & nombres.ToString.ToUpper & "', apellidos = '" & apellidos.ToString.ToUpper & "', edad = '" & edad.ToString.ToUpper & "', sexo = '" & sexo.ToString.ToUpper & "' WHERE cedula = '" & cedula & "'"
        cmd.CommandText = sql
        Try
            cmd.ExecuteNonQuery()
            MsgBox("Modificado con éxito", MsgBoxStyle.Information, "Enhorabuena")
        Catch ex As Exception
            If ex.ToString.Contains("No coinciden los tipos de datos") Then
                MsgBox("El valor introducido no es un dato valido", MsgBoxStyle.Critical, "Error")
            Else
                MsgBox(ex.ToString)
            End If
        End Try
    End Sub


    Public Sub buscarPersona(cedula As Object, ByRef cmp_cedula As TextBox, ByRef cmp_nombres As TextBox, ByRef cmp_apellidos As TextBox, ByRef cmp_edad As TextBox, ByRef cmp_sexo As TextBox, ByRef btn_registrar As Button, ByRef btn_modificar As Button, ByRef btn_eliminar As Button)
        cmd.Connection = conn
        cmd.CommandType = CommandType.Text

        sql = "SELECT * FROM persona WHERE cedula = '" & cedula & "'"

        cmd.CommandText = sql

        Try
            dr = cmd.ExecuteReader()
            If dr.HasRows Then
                btn_eliminar.Enabled = True
                btn_modificar.Enabled = True
                btn_registrar.Enabled = False
                cmp_cedula.Enabled = False
                While dr.Read()
                    cmp_cedula.Text = dr(0).ToString.ToUpper
                    cmp_nombres.Text = dr(1).ToString.ToUpper
                    cmp_apellidos.Text = dr(2).ToString.ToUpper
                    cmp_edad.Text = dr(3).ToString.ToUpper
                    cmp_sexo.Text = dr(4).ToString.ToUpper
                End While
            Else
                btn_eliminar.Enabled = False
                btn_modificar.Enabled = False
                btn_registrar.Enabled = True
                cmp_cedula.Enabled = True
                MsgBox("No hay ningún usuario registrado con la cedula consultada", MsgBoxStyle.Critical, "Usuario no registrado")

            End If
            dr.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub

    Public Sub eliminarPersona(cedula)
        cmd.CommandType = CommandType.Text
        cmd.Connection = conn

        sql = "DELETE FROM persona WHERE cedula = '" & cedula & "'"


        cmd.CommandText = sql
        Try
            cmd.ExecuteNonQuery()
            MsgBox("Eliminado con éxito", MsgBoxStyle.Information, "Enhorabuena")
        Catch ex As Exception
            ex.ToString()
        End Try
    End Sub

End Class

Establecer las funcionalidades

Lo que tenemos hasta ahora, no es mas que un monto de codigo "independiente" y una ventana con un formulario que no hace absolutamente nada, pero ahora, llego el tiempo de la acción. Nos vamos a dirigir hasta nuestro formulario en su vista de codigo, borramos cualquier codigo autogenerado y pegamos lo siguiente


Public Class frm_persona

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        conectarse()
        Me.btn_modificar.Enabled = False
        Me.btn_eliminar.Enabled = False
    End Sub

    Private Sub btn_registrar_Click(sender As Object, e As EventArgs) Handles btn_registrar.Click
        Dim nueva_persona As New persona

        If txt_cedula.Text = "" Then
            campoVacio(txt_cedula, "cedula")
        ElseIf txt_nombres.Text = "" Then
            campoVacio(txt_nombres, "nombres")
        ElseIf txt_apellidos.Text = "" Then
            campoVacio(txt_apellidos, "apellidos")
        ElseIf txt_edad.Text = "" Then
            campoVacio(txt_edad, "edad")
        ElseIf txt_nombres.Text = "" Then
            campoVacio(txt_sexo, "sexo")
        Else
            nueva_persona.registrarPersona(txt_cedula.Text, txt_nombres.Text, txt_apellidos.Text, txt_edad.Text, txt_sexo.Text)
        End If
    End Sub

    Private Sub btn_buscar_Click(sender As Object, e As EventArgs) Handles btn_buscar.Click
        Dim buscar_persona As New persona
        If txt_cedula.Text = "" Then
            campoVacio(txt_cedula, "cedula")
        Else
            buscar_persona.buscarPersona(txt_cedula.Text, txt_cedula, txt_nombres, txt_apellidos, txt_edad, txt_sexo, btn_registrar, btn_modificar, btn_eliminar)
        End If
    End Sub

    Private Sub btn_eliminar_Click(sender As Object, e As EventArgs) Handles btn_eliminar.Click
        Dim eliminar_persona As New persona
        If txt_cedula.Text = "" Then
            campoVacio(txt_cedula, "cedula")
        Else
            If MsgBox("Estás seguro que deseas eliminar a esta persona", MsgBoxStyle.YesNo, "Mensaje de confirmación") = MsgBoxResult.Yes Then
                eliminar_persona.eliminarPersona(txt_cedula.Text)
            End If
        End If
    End Sub

    Private Sub btn_modificar_Click(sender As Object, e As EventArgs) Handles btn_modificar.Click
        Dim modificar_persona As New persona

        If txt_cedula.Text = "" Then
            campoVacio(txt_cedula, "cedula")
        ElseIf txt_nombres.Text = "" Then
            campoVacio(txt_nombres, "nombres")
        ElseIf txt_apellidos.Text = "" Then
            campoVacio(txt_apellidos, "apellidos")
        ElseIf txt_edad.Text = "" Then
            campoVacio(txt_edad, "edad")
        ElseIf txt_nombres.Text = "" Then
            campoVacio(txt_sexo, "sexo")
        Else
            modificar_persona.modificarPersona(txt_cedula.Text, txt_nombres.Text, txt_apellidos.Text, txt_edad.Text, txt_sexo.Text)
            modificar_persona.buscarPersona(txt_cedula.Text, txt_cedula, txt_nombres, txt_apellidos, txt_edad, txt_sexo, btn_registrar, btn_modificar, btn_eliminar)
        End If
    End Sub
End Class

Con esto realizado, no queda mas que probar el programa, pulsando la tecla F5 o yendo al menú Compilar > Generar Nombre de tu Proyecto, y probar como funcionan cada una de las funciones, es importante recalcar en que analizar un poco cada código no estaría de mas, el secreto de todo buen programador es entender todas y cada una de las lineas presentes en su proyecto, sin mas que agregar, espero hayan disfrutado el tutorial, suerte.

Enlaces para compartir en tu blog o pagina web.




Widget por Friki Bloggeo