RSS

Procedimientos Almacenados en Access y Vb2005

04 Sep

Por  Wilfredo Patricio Castillo

Bien, sé que el título no es el mas adecuado para este artículo, porque como todos sabemos MS Access, no soporta los Procedimientos Almacenados como SQL Server, pero podemos hacer algunas «cositas parecidas», claro que bastante limitadas, como puede ser el caso de agregar, actualizar, eliminar y consultar registros en las tablas. Sé que muchos dirán que en estos tiempos podemos usar SQL Express, pero hay quienes aún prefieren usar MS Access y sus motivos deben tener. Ahora, si estamos haciendo una aplicación en capas, pues verán que si lo hacemos como les mostraré, no encontrarán mucha diferencia ni demasiado trabajo al momento de pasarse a un motor como SQL Server, pues trataremos en lo posible que la codificación sea casi idéntica como si estuviéramos usando SQL Server, y de esta manera, al cambiar de motor, solamente cambiaríamos en nuestra capa de acceso a datos la cadena de conexión y un par de líneas mas y no soplarnos toda la codificación como normalmente sería usando access. Bueno para no aburrirlos mas acá va un par de pantallazos de la «aplicación» de ejemplo, debo aclarles que no soy un experto en estas materia, así que espero encuentre de su agrado lo que voy a compartir con todos ustedes y espero sus críticas constructivas que siempre son bienvenidas y bueno, las destructivas también. jejejeje.

 

 

Este el formulario bastante sencillo solamente para efectos de prueba de inserción y consultar datos por motivos de tiempo, la idea es ver los procedimientos y no el formulario. El código del Botón Aceptar que es donde inserto los registros

 

Private Sub BtnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAceptar.Click
        If MessageBox.Show("¿Seguro de Grabar los Datos ?", "Responda", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            Try

Dim Cone As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Pruebas\Pruebas.mdb;Persist security info=false")

                Dim Comando As New OleDbCommand
                With Comando
                    Cone.Open()
                    .CommandText = "PA_Agrega_Clientes"
                    .CommandType = CommandType.StoredProcedure
                    .Connection = Cone
                    .Parameters.Add("@Codigo", OleDbType.Char, 10).Value = Me.TxtCodigo.Text
                    .Parameters.Add("@Nombre", OleDbType.VarChar, 50).Value = Me.TxtNombre.Text
                    .Parameters.Add("@Direccion", OleDbType.VarChar, 50).Value = Me.TxtDireccion.Text
                End With
                Dim Bien As Integer = Comando.ExecuteNonQuery
                If Bien = 0 Then
                    Throw New Exception("Falló la operacion de inserción")
                End If
                Comando.Dispose()
                Cone.Close()
                Cone.Dispose()
                MessageBox.Show("Datos Ingresados con éxito", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("Operacion cancelada por el usuario", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

Alli está el código bastante sencillo con eso estamos insertando los registros (3) de lo cual solo quería comentarles este par de lineas:

 

.CommandText = "PA_Agrega_Clientes"
.CommandType = CommandType.StoredProcedure

 

el «PA_Agrega_Cliente», como se podrán dar cuenta vendría a ser el nombre de nuestro procedimiento almacenado, y el CommandType=CommandType.StoreProcedure, lo estoy dejando como si realmente se tratara de un procedimiento almacenado y no como CommandText que es lo normal que hacemos en access, y después los parámetros lo pasamos tan igual que como si fuera en SQL Server. Ahora en la Base de datos (Access) tengo estos 4 Procedimientos, que no son otra cosa que consultas de accion, de las cuales tambien les haré ver el código que contiene.

 

 

 

Estos son mis «Procedimientos» con los cuales estoy trabajando, ahora el código no es nada extraño como verán en la siguiente imagen.

 

 

Eso es todo, solo falta el código de como devuelvo los datos al Datagridview (Botón buscar)

 

Private Sub BtnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBuscar.Click
        Try
            Dim Cone As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Pruebas\Pruebas.mdb;Persist security info=false")
            Dim DBComando As New OleDbCommand
            Cone.Open()
            If Me.TxtCodigo.Text <> "" Then
                With DBComando
                    .CommandText = "PA_BuscarCliente_X_Codigo"
                    .CommandType = CommandType.StoredProcedure
                    .Parameters.Add("@Codigo", OleDbType.VarChar, 10).Value = Me.TxtCodigo.Text
                    .Connection = Cone
                End With
            ElseIf Me.TxtNombre.Text <> "" Then
                With DBComando
                    .CommandText = "PA_BuscarCliente_X_Nombre"
                    .CommandType = CommandType.StoredProcedure
                    .Parameters.Add("@Nombre", OleDbType.VarChar, 50).Value = Me.TxtNombre.Text
                    .Connection = Cone
                End With
            End If
            Dim Adaptador As New OleDbDataAdapter(DBComando)
            Dim oCliente As New Cliente.ClientesDataTable
            Adaptador.Fill(oCliente)
            Cone.Dispose()
            Me.DtgLista.DataSource = oCliente
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
     End Sub

 

Ese es el resultado de ejecutar el botón buscar, si se fijan estoy usando un esquema (XSD) de la tabla clientes que usé para el ejemplo y con eso es súper fácil como dije al principio si están haciendo su aplicación en capas no tendrán casi nada de trabajo al cambiar a un motor como SQL Server. Espero les sirva de algo y las disculpas del caso por si encuentran algo de malo, mi excusa será el tiempo, jajajajaja. Saludos

 
Deja un comentario

Publicado por en septiembre 4, 2011 en Base de Datos, Programación

 

Deja un comentario