Está en la página 1de 9

Programacin de Base de Datos

Ejercicio 1 Para este ejercicio es indispensable tener conocimientos bsicos de cmo crear un proyecto en vb.net y una base de datos en Microsoft Access La base de datos con la que vamos a empezar es muy sencilla, comenzaremos con una sola tabla y poco a poco iremos aadiendo mas segn necesitemos, el sistema es el siguiente: Un coleccionista de msica desea un sistema que le permita guardar y consultar las canciones que tiene en su coleccin 1.- CREAR UN PROYECTO El primer paso es sencillo, primero crea un nuevo proyecto en VB.NET y gurdalo con el nombre music(en la ubicacin que desees). Como ya debera saber la estructura de carpetas que se genera es algo similar a la que se muestra en la figura de la derecha :

Despus de de haber creado el proyecto, te esperas un momento para pasar al segundo paso

2.- CREAR LA BASE DE DATOS EN ACCESS El segundo paso tambin es muy bsico, entramos a Microsoft Access y creamos una base de datos en blanco, para este ejemplo le vamos a llamar musica, en esta BD creamos una tabla que tenga la siguiente estructura, como ya sabes el archivo que se genera tiene la extensin .mdb :

Tabla cds
CAMPO Id_cd Nombre_cd Artista Genero TIPO Autonumerico Texto(50) Texto(50) Texto(30) DESCRIPCION Clave para cada disco nuevo (Lave primaria) Nombre del cd Nombre del interprete del cd Genero al que pertenece la msica del cd

El nombre de la tabla es cds. Debes fijarte de guardar la base de datos (musica.mdb) en la carpeta Debug, puedes ver su ubicacin en la imagen de arriba, se encuentra encerrada, es importante guardarla en esta ubicacin para evitar errores posteriores al momento de hacer la conexin desde VB.NET.

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

3.- DISEAR EL FORMULARIO DONDE CAPTURARN LOS DATOS Es momento de regresar a nuestro proyecto de VB.NET y darle forma al formulario, este formulario nos va a servir para que podamos escribir los datos que deseemos guardar en la tabla cds, coloca 3 Label, 2 TextBox, 1 ComboBox, 1 Panel y 3 botones debemos procurar dejarlo mas o menos como el de la figura de abajo, colocale los nombres (propiedad name) como se indica con las flechas:: tx_nombre

panel
btn_agregar tx_artista

btn_guardar

cb_genero

btn_cerrar En la ventana de la figura el botn agregar est desactivado, no es necesario que lo hagas, ya que eso lo vamos a hacer despus mediante cdigo A las etiquetas (label) no es necesario ponerles nombre, solo le colocamos su texto correspondiente, desactivamos los otros 3 controles que estn dentro del panel y el botn guardar por medio de la propiedad Enabled, de tal manera que correrlo podamos ver una ventana como la que se muestra en la figura de la derechra: La idea es que para agregar un nuevo registro se deba oprimir el botn Agregar, lo cual debe activar los controles inactivos, tal y como se ve en la figura de arriba, lo cual permitir capturar los datos y despus, al dar clic en al botn guardar los datos se guarden al tabla (cds) y la ventana vuelva a tomar la forma original

Esto que mencion anteriormente se logar por medio de cdigo cada control representa a un campo de la tabla, a excepci n del campo llave id_cd, que en este caso no es necesario teclearlo ya que es Autonumrico y su valor se asigna automticamente 4.- CODIFICACIN Pues bien, habiendo diseado nuestro formulario, es momento de codificar, el cdigo utilizado es el siguiente, debes fijarte en donde se va a teclear cada uno :

Imports System.Data.OleDb Public Class Form1 Private conexion As New OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;Data Source=|DataDirectory|\musica.mdb") Private da As New OleDbDataAdapter("SELECT * FROM cds", conexion) Private dt As New DataTable Private cb As New OleDbCommandBuilder(da) Private Sub asignar_datos(ByVal dr As DataRow) dr("nombre_cd") = Me.tx_nombre.Text dr("artista") = Me.tx_artista.Text

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

dr("genero") = Me.cb_genero.Text End Sub Private Sub btn_cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cerrar.Click Me.Close() End Sub Private Sub btn_agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_agregar.Click btn_guardar.Enabled = True btn_agregar.Enabled = False For Each c As Control In Me.Panel.Controls c.Enabled = True If Not TypeOf c Is Label Then c.Text = "" End If Next End Sub Private Sub btn_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_guardar.Click btn_guardar.Enabled = False btn_agregar.Enabled = True For Each c As Control In Me.Panel.Controls If Not TypeOf c Is Label Then c.Enabled = False End If Next Try Dim dr As DataRow = dt.NewRow() asignar_datos(dr) dt.Rows.Add(dr) da.Update(dt) dt.AcceptChanges() If CInt("0" & dr("id_cd").ToString) = 0 Then dt = New DataTable da.Fill(dt) End If MsgBox("Datos actualizados...") Catch ex As Exception MsgBox("Error " & ex.Message) End Try End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try End Sub conexion.Open() End Class dt = New DataTable da.Fill(dt) Catch ex As Exception MsgBox("Error " & ex.Message) End Try
4.- NAVEGAR EN LOS DATOS DE LA TABLA Para saber si los campos se han guardado correctamente, tendramos que abrir la tabla desde Access, pero eso es muy incmodo, as que la mejor opcin es disear nuestro sistema para que podamos navegar por los datos sin tener que depender de otro programa externo. Para ellos vamos a crear un nuevo formulario que haga el trabajo de la navegacin

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

Crear un nuevo formulario Pare crear un nuevo formulario debemos hacer lo que se muestra en la figura de la derecha.., en el men Proyecto elegimos la opcin Agregar Windows Forms con esto abriremos una nueva ventana en la marcaremos la opcin Windows Forms y debemos colocarle un nombre a nuestra forma mas o menos como se muestra en la figura de abajo:

A la nueva ventana ponle el nombre Navegador y da clic en el botn aceptar con esto, un nuevo formulario aparecer en tu pantalla, un formulario limpio el cual vamos a darle forma para que podamos visualizar a travs de el los datos guardados en la tabla. Disear el nuevo formulario En este nuevo formulario coloca 1 panel, 4 etiquetas, 4 textbox y 5 botones algo similar a la figura de abajo. Tomando como referencia la experiencia del primer formulario colocarle los nombres te va a resultar sencillo los 4 Textbox se llamarn, de arriba hacia abajo: tx_claveCD, tx_nombre, tx_artista, tx_genero Y los botones de izquierda a derecha se llamarn: btn_fist, btn_prev, btn_next, btn_last, btn_cerrar Si tu quieres colocarle mas cosas a tu formulario para hacerlo mas llamativo, adelante, solo no te vayas a perder al momento de codificar. La idea es que: btn_first nos lleva al primer registro, btn_prev regresa a un registro anterior. btn_next avanza a un registro adelante. btn_last nos lleva al ltimo registro btn_cerrar cierra el formulario. Para mayor seguridad coloca la propiedad ReadOnly de los 4 Textbox en verdadero, para evitar que pudieran escribir o modificar los datos ya guardados, aunque eso no sera posible sin la instruccin Update que an no hemos visto. Y en el formulario cambia la propiedad FormBorderStyle a FixedToolWindow para que no puedan minimizarla ni maximizarla. Si se te complica cambiar entre un formulario y otro, puedes hacerlo utilizando las pestaas que aparecen en la parte de arriba de la pantalla de diseo o bien puedes utilizar el explorador de soluciones. En el explorador de soluciones seleccionas el formulario al que desees cambiarte y le das doble clic en el ejemplo aparecen Form1 y Form2.

Codificar Todos estos movimientos de navegacin se van a realizar por medio de cdigo, tal como se indica a continuacin. El cdigo de este segundo formulario es el siguiente

Imports System.Data.OleDb

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

Public Class navegador Private c As Integer Private conexion As New OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;Data Source=|DataDirectory|\musica.mdb") Private da As New OleDbDataAdapter("SELECT * FROM cds", conexion) Private dt As New DataTable Private Sub mostrar_datos(ByVal c As Integer) Dim contador As Integer = dt.Rows.Count If (contador = 0) Then MsgBox("No hay registros en la tabla...") Exit Sub End If Dim dr As DataRow = dt.Rows(c) tx_claveCD.Text = dr("id_cd").ToString tx_nombre.Text = dr("nombre_cd").ToString tx_artista.Text = dr("artista").ToString tx_genero.Text = dr("genero").ToString End Sub Private Sub btn_first_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_first.Click c = 0 mostrar_datos(c) End Sub Private Sub btn_last_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_last.Click c = dt.Rows.Count - 1 mostrar_datos(c) End Sub Private Sub btn_prev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_prev.Click c = c - 1 If (c < 0) Then MsgBox("Este es el primer registro") c = 0 End If mostrar_datos(c) End Sub Private Sub btn_next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_next.Click c = c + 1 If (c = dt.Rows.Count) Then MsgBox("Este es el ultimo registro") c = dt.Rows.Count - 1 End If mostrar_datos(c) End Sub Private Sub btn_cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cerrar.Click Me.Close() End Sub

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

Private Sub navegador_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try conexion.Open() dt = New DataTable da.Fill(dt) Catch ex As Exception MsgBox("Error " & ex.Message) End Try End Sub End Class Lamar al nuevo formulario desde el formulario original Es necesario que desde el formulario principal podamos llamar a esta nueva ventana, para ello vamos a colocar un nuevo botn en el formulario original El nombre de este nuevo botn es btn_navegador Al dar clic sobre el se abrir la otra ventana, esto lo debemos hacer por cdigo, el cdigo es el siguiente: Te recuerdo que al momento de haber creado el nuevo formulario te dije que le pusieras como nombre Navegador, entonces por eso creamos una nueva variable llamada para este ejmplo nv y es de tipo navegador Private Sub btn_navegar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_navegar.Click Dim nv As New navegador() nv.ShowDialog() End Sub Despues de haber realizado estos pasos ya debes tener un pequeo sistema en el que puedes agregar y recorrer los datos de tu tabla El mtodo ShowDialog nos permite mostrar un formulario, con este cdigo entramos al tema de ventana modales, pero eso lo veremos en otra ocasin los cdigos sern expuestos en clase, asi que cualquier duda favor de tenerla preparada. Despus de esto ejecuta tu programa y puedes navegar libremente mostrando los datos guardados en la tabla EXPLICACION DEL CODIGO En los entornos visuales hay cdigo que se genera automticamente, pero la mayora de ellos debes escribirlo t mismo BIBILOTECAS En VB.NET las bibliotecas son llamadas ESPACIOS DE NOMBRES y son definidos por la palabra Imports, debemos conocer que objetos vamos a utilizar para poder definir el espacio de nombres adecuado. Si has programado en otros lenguajes como c++ recordars que algo similar empleabas para incluir una biblioteca, lo hacas con la intruccin: #include<biblioteca> En el ejercicio lo primero que vemos es la siguiente lnea: Imports System.Data.OleDb Este espacio de nombres nos permite hacer uso del DataAdapter, CommandBuilder, y otros objetos con los cuales podemos tener acceso a un origen de datos, por lo general los espacios de nombres debemos teclearlos nostros mismo, ya que al iniciar un proyecto solo nos genera el cdigo de la clase representada por la forma.

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

VARIABLES GLOBALES Hay dos tipo de variables globales, las variables globales para todo un proyecto, y las variables globales para todo un formulario, la diferencia entre una y otra es el alcance que tienen por ahora vamos a utilizar variables globales para todo un formulario, estas variables las declaramos justo despues de la definicin de la clase: Public Class Form1 debajo de esta lnea debes escribir las variables que vayas a utilizar Private conexion As New OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;Data Source=|DataDirectory|\musica.mdb") Private da As New OleDbDataAdapter("SELECT * FROM cds", conexion) Private dt As New DataTable Private cb As New OleDbCommandBuilder(da) El objeto DataAdapter es el que se conecta a la base de datos, necesita dos parmetros: una cadena conexin (indica que motor de base de datos se va a utilizar y la ubicacin de la BD) y cadena seleccin (indica con que datos se va a trabajar).

DataAdapter
TABLAS
Cadena conexin Provider=Microsoft.jet.OLEDB.4.0; Data Source=|DataDirectory|\musica.mdb

Music.mdb cds Id_cd Nombre_cd Artista genero

Cadena seleccin

SELECT * FROM cds

El motor de base de datos de Microsoft Access es Microsoft Jet perteneciente a OLEDB, se indica a traves de la intruccin Provider (proveedor), y la ubicacin se seala por medio de Data Source (origen de datos) SELECT * FROM cds es una instruccin de sql en la que se indica que se van a utilizar todos los campos de la tabla cds, si no sabes interpretar esta lnea entonces debes estudiar algo de sql.

Despues de lo anterior, podemos concluir que Private conexion As New OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;Data Source=|DataDirectory|\musica.mdb") Es la variable que indica la cadena conexin, en realidad debe ir en una solo lnea, pero por los margenes de Word se dividi en dos, el nombre de la variables es conexion y es de tipo OleDbConection, los parmetros que recibe entre parentesis indican el motor de la base de datos y el nombre del archivo. Private da As New OleDbDataAdapter("SELECT * FROM cds", conexion) Es la variable que define al DataAdapter, si te fijas entre parentesis tiene primero la cadena seleccin, y despues ponemos la variable que indica la cadena conexin definida y explicada anteriormente, nuestro DataAdapter se llama da. Private dt As New DataTable Para poder manejar los datos de la tabla necesitamos un recipiente donde colocar esa informacin, eso lo hacemos por medio de la variable dt que no es otra cosa mas que una variable de tipo DataTable y representa una tabla. Private cb As New OleDbCommandBuilder(da) Para poder realizar operaciones de insercin, borrado y actualizacin de los registros, necesitamos de una variable OleDbCommandBuilder, en el ejemplo definimos esta variable llamada cb y la vinculamos al da. FUNCIONES La funcin asignar_datos nos va a servir para que la informacin que se encuentren el ese momento en los controles del formulario, se guarden en la tabla, recibe un parmetro de tipo DataRow (representa un registro de una tabla)

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

Private Sub asignar_datos(ByVal dr As DataRow) Parmetro recibido dr("nombre_cd") = Me.tx_nombre.Text dr("artista") = Me.tx_artista.Text dr("genero") = Me.cb_genero.Text Nombres de los campos de la tabla cds End Sub El campo id_cd no lo utilizamos en esta funcin porque es autonumrico y se genera automticamente, pero si fuera de otro tipo, entonces si debera ir en este procedimiento. Botn Cerrar Lo nico que hacemos es cerrar la ventana por medio de la instruccin Close, la instruccin Me hace referencia al formulario con el que se est trabajando. Botn Agregar Primero activamos y desactivamos los botones segn se necesite por medio de la instruccin Enabled, luego vemos el siguiente cdigo: Es un ciclo For Each controlado por la variable c de tipo control, activa todos los controles que estn dentro de For Each c As Control In Me.Panel.Controls Panel y limpia el texto que pudieran tener algunos controles. c.Enabled = True For Each es un ciclo que se encarga de recorrer cada If Not TypeOf c Is Label Then elemento de una coleccin, en este caso de un panel c.Text = "" Recorre cada elemento que se encuentra dentro del panel (3 End If Label, 2 Textbox y 1 comboBox) y convierte su propiedad Next Enabled a True (verdadero) por medio la variable c la cual controla al ciclo, en cada vuelta del ciclo por medio de una condicin determina que no sea una etiqueta (Label) y limpia el texto que pudiera tener, por lgica a las etiquetas no las limpia porque para eso son, para mostrar texto. Botn Navegador Este cdigo ya fue explicado anteriormente, simplemente invoca a una ventana de tipo modal. Botn Guardar La parte fuerte del cdigo recae en este botn, despus de activar y desactivar los elementos necesarios, nos encontramos con el siguiente cdigo: Primero encapsulamos y protegemos nuestra operacin con la instruccin Try la cual se complementa con la instruccin catch, con el fin de que si hubiera algn Try error sea nuestra misma aplicacin la que muestre la Dim dr As DataRow = dt.NewRow() fall sin necesidad de salirse abruptamente del asignar_datos(dr) programa. dt.Rows.Add(dr) Declaramos una variable (dr) de tipo DataRow y la da.Update(dt) inicializamos con la estructura que tenga la tabla dt, dt.AcceptChanges() esta estructura a su vez se obtuvo en el evento If CInt("0" & dr("id_cd").ToString) = 0 Then OnLoad del formulario, esto nos permitir crear una dt = New DataTable nueva fila en la tabla. da.Fill(dt) Necesitamos tomar los datos que se encuentren en End If los controles (nombre, artista, genero) para poder MsgBox("Datos actualizados...") enviarlos a la tabla correspondiente, esto lo hacemos Catch ex As Exception invocando al procedimiento asignar_datos enviando MsgBox("Error " & ex.Message) como parmetro la variable dr. End Try Agregamos un nuevo registro a nuestra tabla (dt) por medio de la instruccin add y enviando como parmetro a dr, esto es necesario porque la instruccin NewRow, crea una nueva fila, pero jams la relaciona con la tabla. Actualizamos nuestro DataAdapter (da) enviando como parmetro la tabla (dt), despus de ello le indicamos a la tabla que acepte los cambios y quede sincronizada nuevamente por medio de la instruccin AcceptChanges, si no hacemos esto en una nueva operacin de guardado se podran generar errores. La condicin lo nico que hace es asegurar que el valor del campo id_cd se actualiz correctamente, ya que es un campo autonumrico, esta condicin solo se cumple cuando es el primer valor que se guarda, ya cuando la tabal est poblada la condicin no se cumple, tambin es importante sealar que esta validacin se hace porque es un campo autonumrico, si la tabla tuviera un campo llave de otro tipo, esta condicin est dems, porque.seguramente los datos de teclearan manualmente.

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux

Programacin de Base de Datos

Evento OnLoad Como sabes este evento se ejecuta automticamente al abrirse el formulario, vamos a aprovechar esta operacin para que automticamente Try se haga la conexin a la base de datos, lo primero que hacemos es abrir conexion.Open() nuestra conexin a travs de la variable conexin empleando el mtodo dt = New DataTable open, (recuerda que esa variable representa la cadena conexin), creamos da.Fill(dt) nuestra tabla en la variable dt a la cual le asignamos la estructura Catch ex As Exception correspondiente por medio del mtodo Fill del DataAdapter, esta MsgBox("Error " & ex.Message) estructura fue tomada de la cadena seleccin, es decir al escribir End Try SELECT * FROM cds, en realidad dijimos que bamos a emplear los campos id_cd, nombre_cd, artista, genero de la tabla cds, o sea todos los campos, y esta estructura es la que se asigna a dt por medio de Fill, es decir dt tambin contendr los campos id_cd, nombre_cd, artista, genero. Formulario Navegador En el segundo formulario el cdigo es similar, de las pocas cosas que cambian es que no declaramos una variable OleDbCommandBuider, porque no vamos a hacer ninguna operacin de insercin o de borrado de registros, solo vamos a recorrer la tabla, y declaramos una variable llamada fila que funcionar como un ndice para recorrer la tabla. El procedimiento Mostrar_datos lo nico que hace es mostrar el registro que se encuentre en una determinada posicin en la tabla, recibe como parmetro un valor entero que indica la posicin donde se encuentra guardado el registro. Lo primero que hacemos es validar que la tabla no est vaca por Dim contador As Integer = dt.Rows.Count medio de la propiedad rows.Count la cual If (contador = 0) Then devuelve el nmero de registro de la tabla, MsgBox("No hay registros en la tabla...") por consiguiente si devuelve 0 significa que Exit Sub la tabla est vaca y mandamos el mensaje End If No hay registros en la tabla Dim dr As DataRow = dt.Rows(c) Despus de esto declaramos una variable de tx_claveCD.Text = dr("id_cd").ToString tipo DataRow llamada dr y la inicializamos tx_nombre.Text = dr("nombre_cd").ToString con la estructura que tiene la tabla dt en el la tx_artista.Text = dr("artista").ToString posicin marcada por la variable c, despus tx_genero.Text = dr("genero").ToString de esto lo que sigue es tomar lo que hay en los campos y lo mostramos en los TextBox empleados a travs de la variable dr declarada, si te fijas ahora si utilizamos el campo id_cd, puesto que se trata de mostrar todos los datos, incluyendo al campo llave, no podemos mostrar solo una parte de los datos, al menos no aplica para este ejemplo. Botn btn_first Inicializamos la variable fila en 0, ya que lo que necesitamos es mostrar la primera posicin de la tabla, y por si no te lo haba dicho la primera posicin est marcada por el nmero 0, despus llamamos a Mostrar_datos enviando como parmetro fila. Botn btn_last Contrariamente al anterior le asignamos a fila el valor de la ltima posicin de la tabla, esto es sencillo, simplemente restamos al nmero total d elementos de la tabla 1 y con eso tenemos la ltima posicin. Botones btn_next y btn_prev En estos botones incrementamos o decrementamos el valor de fila segn se necesite, lo que queremos es que avance o retroceda un solo registro, pero tambin debemos validar que en ese avance no se desborde la tabla, es decir que cuando llegue a la posicin 0 no siga restando, lo mismo cuando llegue a la ltima posicin, ya que eso provocara un desbordamiento hacia posiciones que no existen

Este es el el primer ejercicio, muy sencillo de una sola tabla, cuya finalidad era empezar a involucrarnos con los conceptos bsicos de acceso a datos desde Visual Basic.NET.

Aurelio Lpez Ovando VB.NET

www.wordpress.com/aureliux