Vous êtes sur la page 1sur 5

Ejercicio 15 Conectar y Navegar con BD por codigo

En este ejercicio vamos a conectarnos a una base de datos MS Access a traves de codigo ADO.NET utilizando el nombre de espacio System.Data.OleDb, el cual permite la conexin a bases de datos que no son MS SQL. Para comenzar tenemos que crear nuestra base de datos en MS ACCESS (2007 para el ejemplo), que se llamara PERSONDATABASE.MDB. Esta tendra una sola tabla llamada PERSONTABLE con los siguientes campos:

Observamos que no tiene un campo llave definido, pero el primer campo PERSONID es del tipo autonumerico. De preferencia se recomienda capturar al menos 3 registros dentro de Access a modo de prueba.

Ahora, cerramos nuestra base de datos en Access y vamos MS Visual Basic.NET. Creamos un nuevo proyecto y en nuestro formulario pondremos los siguientes controles:

Observamos que hemos colocado controles LABEL, TEXTBOX y BOTONES. Quedara mas o menos asi los nombres: txtNombre, txtApellido, txtUbicacion. Para los botones de comando: cmdFill, cmdFirst, cmdPrevious, cmdNext, cmdLast. Recordemos que son opcionales y podemos darles los nombres que queramos. En este caso no usamos ningun otro control ni conexin visual ya que utilizaremos codigo. Comenzamos importando el nombre de espacio y demas. Esto se hace antes de la clase de la forma:

Y tambien, pondremos en la seccion de clase de la forma el codigo mostrado en la imagen anterior:


Dim ds As New DataSet() Dim intCurrentIndex As Integer

Con esto estamos indicando que crearemos un nuevo conjunto de datos, y tendremos que utilizar una variable entera como marcador o puntero para saber en que registro estamos dentro de nuestra tabla. Ahora, tecleamos el siguiente codigo en nuestro primer boton cmdFILL, que es el que se encargara de conectarse con nuestro archivo de base de datos y obtener los datos de la tabla:

Private Sub cmdFill_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFill.Click

Try Dim oConexion As New OleDbConnection() oConexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =G:\Cys\Cys - Manuales\UM05 - Visual Basic Net con BD\Ejercicios\ParteII\Ejercicio25_BDNavegarXCodigo\PersonDatabase.mdb; User Id=admin;Password=;" oConexion.Open() 'MessageBox.Show("Conectado") Dim strSQL As String = "Select FirstName, LastName, City From PersonTable" Dim da As New OleDbDataAdapter(strSQL, oConexion) da.Fill(ds) 'Checar que la tabla no este vacia If ds.Tables(0).Rows.Count > 0 Then txtNombre.Text = ds.Tables(0).Rows(0).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(0).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(0).Item("City").ToString()

End If

Catch oExcep As OleDbException 'Si se produce algun error MessageBox.Show("Error arl conectar con datos" & _ ControlChars.CrLf & _ oExcep.Message & ControlChars.CrLf & _ oExcep.Source()) End Try End Sub

Recordemos que la primer y ultima linea no la tecleamos, ya que VB.NET se encarga de ello segun nuestro boton. Usamos la instruccin TRY CATCH, para asegurarnos que no tendremos errores de conexin y que si los hubiera, nos muestra el codigo de error de dicho problema. Declaramos una conexin con New OleDbConnection. E indicamos mediante esta conexin una cadena que contiene el nombre del proveedor de base de datos (en este caso es MS Access, que esta representado como Microsoft.Jet.OleDB.4.0 que es el motor que utiliza), la fuente de datos; es decir, la ubicacin completa de donde se encuentra nuestro archivo, es muy importante que el archivo permanezca en esa ruta, de lo contrario no podremos conectarnos si lo movemos de ah; el usuario y el password asociado. MS Access 2007 permite poner un usuario y una contrasea a nuestro archivo, pero regularmente no se utiliza. Sin embargo , en nuestra declaracion de la cadena debemos incluirlo aunque como vemos con un valor nulo para la contrasea. Lo siguiente es abrir la conexin con el metodo OPEN() y declarar una sentencia SQL para que obtenga los datos que deseamos de dicha tabla (para ello, se utiliza la sintaxis del lenguale SQL estandar).

Finalmente, usando el metodo FILL, obtenemos los datos y se cargan en el adaptador (una copia de la base de datos solamente con los resultados deseados para verse en nuestro programa). Por ultimo, mostramos la primer fila de dicho cursor pasando los valores a nuestros controles de caja de texto. Ahora pondremos el codigo para navegar y recorrer toda nuestra tabla, comenzando con el boton de inicio o primero:
Private Sub cmdFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFirst.Click 'Como es 0 sera la primera fila txtNombre.Text = ds.Tables(0).Rows(0).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(0).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(0).Item("City").ToString() End Sub

De manera sencilla usamos el objeto ds declarado anteriormente (nuestro DATASET), y obtenemos de la tabla 0, fila 0, los elementos deseados pasandolos a una cadena. El boton de PREVIO para navegar hacia atrs en nuestros registros lleva este codigo:
Private Sub cmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrevious.Click 'Nos movemos hacia atras si no estamos en la primera fila If intCurrentIndex > 0 Then 'Substraer uno del indice actual intCurrentIndex = intCurrentIndex - 1 txtNombre.Text = ds.Tables(0).Rows(intCurrentIndex).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(intCurrentIndex).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(intCurrentIndex).Item("City").ToString() Else MessageBox.Show("Ya esta en el registro inicial") End If End Sub

Aqu vemos, porque es importante tener una variable que nos almacene el puntero o posicion en la que nos encontramos dentro de nuestra tabla para ir recorriendo hacia atrs. El boton SIGUIENTE tiene este codigo:
Private Sub cmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNext.Click 'ds.tables(0).rows.count-1 es el indice de la ultima fila If intCurrentIndex < ds.Tables(0).Rows.Count - 1 Then 'Agregar uno al indice actual intCurrentIndex = intCurrentIndex + 1 txtNombre.Text = ds.Tables(0).Rows(intCurrentIndex).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(intCurrentIndex).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(intCurrentIndex).Item("City").ToString() Else MessageBox.Show("Ya esta en el ultimo registro") End If

End Sub

Y por ultimo el boton FINAL:


Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLast.Click intCurrentIndex = ds.Tables(0).Rows.Count - 1 txtNombre.Text = ds.Tables(0).Rows(intCurrentIndex).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(intCurrentIndex).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(intCurrentIndex).Item("City").ToString() End Sub

Ahora podremos ejecutar nuestro programa y veremos que nos mostrara los registros capturados y que podemos navegar entre los registros

Vous aimerez peut-être aussi