martes, 15 de enero de 2008

Introducción

En la actualidad la información se maneja a través de bases de datos, pero se trata que ese manejo de información sea lo mas fácil y comprensible para los usuarios, es por eso que se crean aplicaciones que su propósito sea tener una interfaz comprensible y de fácil navegación que muestre la información de la base de datos.
En esta práctica el alumno creara una base de datos sencilla y la interfaz en VB para el manejo de la BD.
La práctica se dividirá en varias partes en las cuales el alumno manejara poco a poco los elementos y herramientas de VB, para lograr el buen funcionamiento de la aplicación.

Creación de BD e Interfaz
  • En la primera parte de la practica (Creación de la base de datos en Access) los alumnos harán una base de datos sencilla en Access, que consta de 3 tablas.
  • La segunda parte (Creación de pantallas en Visual Basic) se comenzara la aplicación en VB, creando solo las pantallas y habilitando la navegación entre estas.

Conexión a la base de datos en VB

  • La tercera parte (Agregar Registros a la BD) se hará las altas de los registros, agregando en las pantallas elementos de captura y de conexión con la base de datos
  • La cuarta parte (Eliminar registros a la BD) se hará las bajas de los registros, agregando elementos de conexión de datos, elementos de muestra de información y ventanas de confirmación de eliminación de datos.
  • La quinta parte (Consulta de información de la BD) se harán diferentes consultas de acuerdo a selección condicionada, agregando elementos para filtros y despliegue de información.

La practica les mostrara como hacer uso de los recursos para una pantalla en especial, el alumno deberá implementar las demás pantallas.

Objetivos:
La siguiente práctica tiene como objetivos:

  • Conocer y hacer uso de los controles ADO
  • Saber configurar los controles de conexión a la base de datos
  • Crear código para agregar registros a la base de datos
  • Crear código para eliminar registros de la base de datos
  • Crear código para hacer consultas a través de SQL

Así el alumno lograra hacer una aplicación que manipule la información de una base de datos, sin tener que hacer uso de los formularios de Access, y hacer una interfaz más completa y amigable para el usuario.

Parte 1

Creación de la Base de Datos
con Access

Se solicita una base de datos que contenga información de los alumnos, así como las materias que cursan.
Hacer en Access una base de datos que contenga las 3 tablas siguientes:


ALUMNOS

Campo

Tipo

Tamaño


MATRICULA

Texto

10

Llave

NOMBRES

Texto

20


APELLIDOS

Texto

30


DIRECCION

Texto

35


INSCRITO

Si/no







MATERIAS

Campo

Tipo

Tamaño


CVEMTA

Texto

6

Llave

NOMMAT

Texto

20


CREDITOS

Numérico





INSCRIPCIONES

Campo

Tipo

Tamaño


MATRICULA

Texto

10

Llave

CVEMAT

Texto

6

Llave


Llenar las tablas de la siguiente manera:
La tabla ALUMNOS, la matricula debe ser de 8 letras, un guión y una letra mayúscula; ejemplo: 98767898-A. Los demás campos deben llenarse comúnmente. Llenar 5 registros.

La tabla MATERIAS, la matricula debe llenarse con una letra y 3 números; ejemplo: A001
Para las materias de Ciencias Sociales se representan con la letra A
Materias de Ciencias Naturales se representan con la letra B
Materias de Matemáticas se representan con la letra C
Materas de Lenguas se representan con D
Materias de Informática se representan con E
Llenar 10 registros

La tabla de INSCRIPCIONES, llenar 10 registros, solo con alumnos que están inscritos.
Crea una carpeta en tu usuario con el nombre de Practica Final, y salva la base de datos dentro de esta carpeta con el nombre de BDFinal.mbd

Parte 2

Creación de Formularios



Hacer la aplicación de altas, bajas y consultas de los registros de la base de datos BDFinal.mbd de Access. La aplicación será hecha con el lenguaje de programación Visual Basic .Net

Abrir el programa Visual Studio .Net. en la página de inicio elegir Nuevo proyecto




Al abrirse la ventana de proyecto nuevo elegir en Tipo de Proyecto: proyecto de Visual Basic.
En Plantillas: Aplicación para Windows.
Darle el nombre de Proyecto FinalVB. Y en la ubicación elegir la carpeta Practica Final, creada en la parte anterior de la práctica.






Una vez creado el proyecto se abre el primer formulario, se le cambia el nombre de form1.vb por el de menú.vb a la derecha de la ventana.









En la parte inferior derecha están todas las propiedades de formulario













Al primer formulario cambiarle el nombre de (name) FormMenu, y en el texto (text) cambiar por Menu.


















Agregar 3 botones con la leyenda Altas, Bajas y Consultas.


Al primer botón cambiarle las propiedades de text por Altas y el nombre (name) por btnAltas. Al segundo botón cambiarle las propiedades de text por Bajas y el nombre por btnBaja. El tercer botón cambiarle las propiedades de text por Consultas y el nombre por btnConsulta.

















Se agrega un segundo formulario con el menú Proyecto ->Agregar Windows Form, y en la siguiente ventana en la parte de plantillas se elige Windows Forms, y como el siguiente formulario es para un submenu de las altas, se le pone el nombre de submenuAltas.vb.











A este nuevo formulario cambiarle las propiedades del texto por Altas y cambiarle el nombre por formAltas, ponerle un botón que se llame btnMenu, y en el texto ponerle Menu al botón, este botón lo que hará es regresar al menú anterior, cuando se le de clic.





Para hacer el cambio de un formulario a otro se hace lo siguiente:
- en el formulario FormMenu dar doble clic sobre el botón btnAltas.
- y se abre el código en el cual nos indica que esta la función de btnAltas cuando se le haga clic.
- Dentro de esta función se escribe lo siguiente:
Dim aux as new formAltas
aux.show( )
me.hide( )
- como en la siguiente figura



























En el formulario FormAltas dar doble clic en el botón btnMenu.
- y se abre el código en el cual nos indica que esta la función de btnMenu cuando se le haga clic.
- Dentro de esta función se escribe lo siguiente:
Dim aux as new formAltas
aux.show( )
me.hide( )

- Guardar en el menú Archivo-Guardar todo










Para establecer cual sera el formulario con el cual siempre debe empezar nuestro programa se indicara en el Explorador de soluciones->ProyectoFinal, con el boton derecho y se elegira la opcion de propiedades















Una vez que se abre la ventana de propiedades, se elige en la caja de Objeto inicial, el formulario con el cual deseamos que se inicie el programa, que en e esta caso sera FormMenu. Se le da aplicar u aceptar.





























Arrancar el programa para comprobar que pasa de un formulario a otro, a través de los botones. Con el menú Depurar->inicio.













Nota: se puede detener el proyecto a través de los botones de arranque en el visual estudio,



Ejercicio:
Hacer los demás formularios con sus botones respectivos de avance y retroceso entre los formularios.
Codificar los botones para que abran unos a otros los formularios.


De acuerdo al siguiente cuadro hacer los formularios con sus respectivos nombres y la conexión entre los formularios.




Nota: cuando se crea un formulario nuevo, se le tiene que dar un nombre con la extensión vb para guardarlo, el organigrama indica el nombre con el que deben ser guardados, ejemplo menú.vb.
En las propiedades del formulario se debe cambiar el nombre del formulario con formNombre, como lo indica. Así como poner un titulo que será mostrado en el formulario.
Todo nombre de botón debe empezar con las letras btn+nombre


Parte 3

Conexión a la Base de Datos de Access
Altas en la base de Datos
Una vez que se tienen todas los formularios que se van a ocupar, vamos a conectar la base de datos a la aplicación.




Se abre el programa de Visual Studio .net, y abren el proyecto Proyecto FinalVB. Ya que esta abierto el proyecto, se abre el formulario de altasAlumnos.vb, dándole doble clic en el Explorador de soluciones.










Se le colocara cinco etiquetas que digan Matricula, Nombre, Apellido, Dirección e Inscrito.







Se agrega cuatro cajas de texto para cada etiqueta, a cada caja de texto hay que quitarle el texto y dejarlo en blanco y ponerle el nombre de txtNombre.





Para la matricula se llamara txtMatricula, para el nombre se llamara txtNombre, para el apellido se llamara txtApellido y para dirección se llamara txtDireccion.











Se agrega un checkBox dándole el nombre de chkInscrito y se le quita el texto, y por ultimo se agrega un botón de Aceptar con el nombre btnAceptar, para dar de alta al alumno, después de hacer escrito sus datos.






En el siguiente paso, sobre este mismo formulario se agrega elementos de datos para hacer la conexión con la base de datos. Se agrega un control de tipo OleDbConnection, eligiéndolo y arrastrándolo al formulario.









En las propiedades del control de conexión se le cambiara el nombre por conxbdAlumnos. Se despliega la lista en la propiedad ConnectionString y se elige













Abre la ventana Propiedades de Vínculos de datos, y en la pestaña Proveedor se elige al proveedor de base de datos para Access 2000 o Access XP, que es Jet 4.0 OLE DB provider. Y se le da siguiente.















Se especifica la ubicación de la base de datos de Access, dando clic en el botón del paso1, que indicando en las carpetas en que se encuentra la base de datos BDFinal.mbd, no se especifica ninguna contraseña ya que la base de datos no la requiere, y por ultimo se le da clic en Probar Conexión.










Los formatos de datos son diferentes entre Visual Basic y Access, por lo que se requiere un adaptador de datos DataAdapter.
Una vez que se creo la conexión se da clic en el grupo datos de la caja de herramientas, y se agrega un control OleDBDataAdapter, (Fig. 9) de manera automática inicia el asistente de configuración de datos,

  • se da clic en siguiente la segunda ventana requiere que se especifique la conexión a utilizar para este Adaptador de Datos, confirmar que esta escrita la ubicación de la conexión que se hizo anteriormente.
  • se da clic en siguiente aparece la tercer ventana, en donde solo esta habilitado la opción de Usar Instrucciones SQL, ya que se esta utilizando un adaptador de tipo OleDbDataAdapter.
  • Se da clic en siguiente y en la cuarta ventana nos indica el conjunto de datos que van a ser cargados al adaptador. Y se le da clic en el botón de Generador de consultas.
  • Se abre otra ventana la cual nos indica las tablas que tenemos en nuestra base de datos BDFinal.mbd, y elegimos la tabla ALUMNOS, y se le da agregar y después cerrar.
  • Aparece nuestra tabla ALUMNOS en el generador de consultas, y se elige *(Todas las columnas) y se le da aceptar.
  • Se da clic en siguiente, y en la quinta ventana nos indica se el adaptador de configuro correctamente y por ultimo se da Finalizar.





Por ultimo cambiarle el nombre en las propiedades al adaptador por adapterAlumnos.






Una vez creado el adaptador de datos es necesario crear un objeto que represente los datos a utilizar en la aplicación, este objeto recibe el nombre de DataSet y constituye una representación de los datos proporcionados por la conexión y extraídos por el adaptador.




Para crear el dataset del adaptador que tenemos, se le da clic derecho sobre el control adapterAlumnos y elegimos la opción de Generar conjunto de datos.









En la siguiente ventana, en la opción de nuevo se le da el nombre de dsAlumnos, y se le da aceptar, ya tenemos nuestro control dataSet.

Y en las propiedades del control dataset, cambiarle el nombre de DsAlumnos1 por DsAlumnos








Ya que tenemos la conexión ahora hay que vincular las cajas de texto del formulario con la conexión, para que todo lo que se capture en las cajas de texto, pasen ala base de datos.
Primero abrimos el código de formulario y en la parte de arriba importamos unas clases, escribe el siguiente código:
Imports System.Data
Imports System.Data.OleDb





Después abre la clase (formAlumnos Events) con el método Load, con esto se escribe el código de la función formAlumnos_Load( ), lo cual indica que el código que pongamos dentro de esta función se ejecutara cuando se cargue o se mande a llamar al formulario.




En esta función pondremos el siguiente código:

Private Sub formAlumnos_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

DsAlumnos.Clear()
adapterAlumnos.Fill(DsAlumnos, "ALUMNOS")

End Sub

En donde la primera instrucción dsAlumnos.clear() limpiamos el objeto datset que se ha creado.
Con la segunda instrucción, el Dataset inicialmente está vacío. El método Fill del objeto DataAdapter es utilizado para cargar el Dataset. Se debe poner el nombre del adaptador que se utiliza con el método fill, e indicar a que dataset va a cargar los datos, así como de que tabla son los datos.

Por ultimo vamos a relacionar los valores de las cajas de texto con la base de datos para dar de altas a los alumnos. Damos doble clic al btnAceptar y se crea el código del botón con el método clic btnAceptar_Click, dentro de esta función escribiremos el siguiente código:

Dim fila As DataRow
fila = Me.DsAlumnos.Tables("ALUMNOS").NewRow
Try
'Rellenar los campos de la tabla
fila("matricula") = txtMatricula.Text()
fila("nombre") = txtNombre.Text
fila("apellido") = txtApellido.Text
fila("dirección") = txtDireccion.Text
fila("inscrito") = chkInscrito.CheckState
'se insertan los datos
Me.DsAlumnos.Tables("ALUMNOS").Rows.Add(fila) 'se insertan los datos en el dataset
Me.adapterAlumnos.Update(Me.DsAlumnos.Tables("ALUMNOS")) 'se insertan los datos en la base de datos
MsgBox("Alumno dado de alta")
limpiaCajasTxt()
Catch eEndEdit As Exception
System.Windows.Forms.MessageBox.Show(eEndEdit.Message)

End Try


Dim fila As DataRow
Se declara un objeto de tipo datarow
fila = Me.DsAlumnos.Tables("ALUMNOS").NewRow
Se relaciona el objeto fila con el dataset con los datos de la tabla
fila("matricula") = txtMatricula.Text()
Se le insertan los datos que contengan las cajas de texto en el objeto datarow
Me.DsAlumnos.Tables("ALUMNOS").Rows.Add(fila)
Se insertan los datos en el dataset
Me.adapterAlumnos.Update(Me.DsAlumnos.Tables("ALUMNOS"))
Se insertan los datos a la base de datos
MsgBox("Alumno dado de alta")
Lanza un mensaje de que el alumno fue dado de alta correctamente

limpiaCajasTxt()
Se llama a la función que limpia las cajas de texto
System.Windows.Forms.MessageBox.Show(eEndEdit.Message)
Manda un mensaje de error si el alumno no fue dado de alta en la base de datos

Por ultimo agrega la ultima función que es limpiaCajasTxt() poniendo el siguiente código:

Private Sub limpiaCajasTxt()
txtMatricula.Text = ""
txtNombre.Text = ""
txtApellido.Text = ""
txtDireccion.Text = ""
chkInscrito.Checked = False

End Sub

Esta función limpia las cajas de texto de los últimos datos que se le hayan metido. Listos para ingresar un nuevo alumno si es necesario.

Ejercicio:
Haz las altas de las materias y de los inscritos, inserta las cajas de texto que sean necesarios.
Recuerda que para cada formulario de altas es necesario hacer una conexión a la tabla indicada.

Parte 4

Eliminación de Registros en la base de datos
Vamos a manejar los formularios de eliminar registros en la base de datos, para hacer esto se pide el numero de la matricula, se hace una búsqueda de los datos de esa matricula, en caso de que se encuentre el registro se muestran los datos y aparecerá el botón para eliminar el registro. Al apretar el botón de borrar, se manda un mensaje de seguridad, indicando si realmente se desea borrar el registro. Al ser eliminados los registros o cancelado la eliminación de estos, se tiene que ocultar las cajas de texto hasta que se haga una nueva búsqueda.








Al abrirse la pantalla de bajas de alumnos solo se presentara el campo de texto de matricula, para hacer la búsqueda del registro.











Al encontrar los datos dentro del mismo formulario aparecerán los campos en donde se muestran los datos, además del botón para borrar el registro deseado.






Para poder hacer esto vamos a empezar por agregar todos los campos y botones necesarios en el formulario formBAlumnos. Empezamos por agregar primero todas las etiquetas de matricula, nombre, apellido, dirección e inscrito.






Recuerda que cada etiqueta se debe nombrar con las tres primeras letras lbl + nombre, sabemos que la etiqueta de matricula se debe ver siempre, pero las demás etiquetas no, así que en las propiedades de las etiquetas que vamos a desaparecer en visible le damos el valor de false.







A continuación se agregan todas las cajas de texto necesarias, y los dos botones de búsqueda y de borrar. Todas las cajas de texto y el botón que no deben aparecer al principio se desaparecen momentáneamente con que la propiedad de visible sea falsa. Además se mostrara la información dentro de las cajas de texto sin que estas puedan ser modificadas.








Para esto en las propiedades de las cajas de texto en la propiedad Enable también se le da el valor de falso.

Las propiedades de las cajas que van aparecer y desaparecer en el formulario.








Una vez teniendo todos los elementos que se van a usar en la interfaz de la pantallas de bajas de alumnos, agregamos un control de conexión con el nombre de conxbdBAlumn y un control de adaptador con el nombre de adaptBAlumn, hacer las configuraciones igual que en la parte 3, se agrega un dataset dándole clic derecho al adaptBAlumn generando un conjunto de datos nuevo, dándole el nombre en la propiedad datasetname de dsBAlumnos y en la propiedad de name se le pone el nombre de DsBAlumnos.

Se abre la parte del código en el área de nombre de clase formBAlumn Events y con el método Load escribiendo el código de la siguiente manera.

Private Sub formBAlumn_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
DsBAlumnos.Clear()
adaptBAlumn.Fill(DsBAlumnos, "ALUMNOS")
End Sub

En la cual limpiamos el dataset y después pasamos todos los datos de la tabla ALUMNOS que tenga el adaptador al dataset.


Para hacer la búsqueda de la matricula al apretar el botón de Buscar ponemos el siguiente código

Private Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
Dim tabla As DataTable
tabla = Me.DsBAlumnos.Tables("ALUMNOS")
Dim aux As String = txtMatricula.Text

Dim foundRow As DataRow = tabla.Rows.Find(aux)
If Not (foundRow Is Nothing) Then
mostrarCajas()
mostrarDatos(foundRow)
Else
MsgBox("Registro no encontrado")
End If
End Sub

Dim tabla As DataTable
Se crea una instancia de tipo tabla
tabla = Me.DsBAlumnos.Tables("ALUMNOS")
se le anexan a esa tabla todos los registros que están almacenados en el adaptador son referenciados a la tabla.
Dim aux As String = txtMatricula.Text
ponemos el valor de la matricula que se encuentra en la caja de texto en una variable de tipo string.
Dim foundRow As DataRow = tabla.Rows.Find(aux)
se declara una instancia de tipo registro
y se asigna a esa instancia los valores del registro en la cual la matricula coincida con el campo de la colección de filas que pertenecen a la tabla.
If Not (foundRow Is Nothing) Then
se usa la condición en la que si no esta vacía la variable foundRow, entonces se ejecutaran las siguientes funciones, mostrarCajas() y mostrarDatos(founRow), esta ultima función pasa el parámetro del registro encontrado, que contiene los datos de la matricula solicitada.
Else
MsgBox("Registro no encontrado")
End If
en caso de que la variable founRow este vacía es porque no se encontró ningún registro con la matricula indicada, y por lo tanto solo se envía un mensaje en una ventana de alerta, diciendo que no se encontró el registro.



A continuación declaramos el código de las funciones que mostraran las cajas y mostraran los datos de registro encontrado.

Al momento de haber encontrado los datos del registro indicado por la matricula solicitada, hay que desplegar las cajas de texto ocultas para mostrar los datos.

Private Sub mostrarCajas()
lblnombre.Visible = True
txtNombre.Visible = True
lblApellido.Visible = True
txtApellido.Visible = True
lblDireccion.Visible = True
txtDireccion.Visible = True
lblInscrito.Visible = True
chkInscrito.Visible = True
btnBorrar.Visible = True
End Sub

La función que mostrara los datos en las cajas de texto es la siguiente se pasa como parámetro una variable de tipo dataRow, que es la que contiene toda la información encontrada.

Private Sub mostrarDatos(ByVal dr As DataRow)

txtMatricula.Text = dr("matricula").ToString
txtNombre.Text = dr("nombre").ToString
txtApellido.Text = dr("apellido").ToString
txtDireccion.Text = dr("direccion").ToString
chkInscrito.Checked = dr("inscrito").ToString
End Sub

La variable al entrar a la función cambia de nombre por dr, para poner los valores en las cajas de texto indicaremos el nombre del campo entre comillas y después usaremos el método toString que los datos que tenga los convertirá a cadena de caracteres (String).

Una vez que vemos los datos del registro solicitado en pantalla, podemos borrarlo con el botón de borrar, para hacer que funcione este botón vamos a poner el siguiente código.

Private Sub btnBorrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBorrar.Click

Dim tabla As DataTable
tabla = Me.DsBAlumnos.Tables("ALUMNOS")
Dim aux As String = txtMatricula.Text
Dim delRow As DataRow = tabla.Rows.Find(aux)
delRow.Delete()
If MessageBox.Show("Estas seguro que quieres borrar el registro?", "Borrar Registros", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Me.adaptBAlumn.Update(tabla.Select(Nothing, Nothing, delRow.RowState))
Else
tabla.RejectChanges()
End If
limpiaCajas()
ocultaCajas()
End Sub

Dim tabla As DataTable
Se crea una instancia de tipo tabla
tabla = Me.DsBAlumnos.Tables("ALUMNOS")
Se le anexan a esa tabla todos los registros que están almacenados en el adaptador son referenciados a la tabla.
Dim aux As String = txtMatricula.Text
ponemos el valor de la matricula que se encuentra en la caja de texto en una variable de tipo string.
Dim delRow As DataRow = tabla.Rows.Find(aux)
se declara una instancia de tipo registro delRow y se asigna a esa instancia los valores del registro en la cual la matricula coincida con el campo de la colección de filas que pertenecen a la tabla.
delRow.Delete()
Se usa el método delete del objeto delRow, indicando que se va a eliminar.
If MessageBox.Show("Estas seguro que quieres borrar el registro?", "Borrar Registros", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Se manda un mensaje de confirmación, indicando si realmente se desea borrar el registro. Indicando con un mensaje de texto con dos botones, si/no.
Me.adaptBAlumn.Update(tabla.Select(Nothing, Nothing, delRow.RowState))
En caso de que se el usuario haya confirmado la eliminación del registro se hará una actualización de acuerdo a una selección de la tabla con los objetos que coinciden con el estado especificado del dataRow, que en esta caso tiene el estado de delete.
Else
tabla.RejectChanges()
End If
En caso de que el usuario no haya confirmado el borrado, se hace un rechazo de cambios y así no se eliminara ese registro.
limpiaCajas()
ocultaCajas()
Por ultimo se manda a llamar a estas dos funciones, la primera limpia las cajas, para poder recibir nuevos datos. Y la segunda función oculta todas las cajas de texto, dejando solo la caja de texto de la matricula visible, para una nueva búsqueda de registro

Por ultimo aquí tenemos el código de las funciones de limpia cajas y el de ocultar cajas.

Private Sub limpiaCajas()
txtMatricula.Text = ""
txtNombre.Text = ""
txtApellido.Text = ""
txtDireccion.Text = ""
chkInscrito.Checked = False
End Sub

Private Sub ocultaCajas()
lblnombre.Visible = False
txtNombre.Visible = False
lblApellido.Visible = False
txtApellido.Visible = False
lblDireccion.Visible = False
txtDireccion.Visible = False
lblInscrito.Visible = False
chkInscrito.Visible = False
btnBorrar.Visible = False
End Sub

Eliminación de registros de la tabla Inscritos
En la pantalla de bajas de inscripciones hay que poner dos cajas de texto, que servirán para capturar los datos que se van a borrar.

Una vez que se agregan todos estos elementos, tenemos que modificar un poco el código, ya que en la base de datos, en la tabla “INSCRIPCIONES” las dos columnas que tiene son campos llave, es necesario indicar los datos para los dos campos, por lo tanto primero se tiene que hacer una búsqueda en la tabla y tiene que encontrar el valor de los dos campos, para poder borrar el registro.

Se agrega el siguiente código el cual nos ayudara a eliminar un registro, dentro de la función del botón de borrar al darle clic.

Private Sub btnBorrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBorrar.Click

Dim tabla As DataTable
tabla = Me.DsBIncripciones.Tables("INSCRIPCIONES")

Try
Dim key2(1) As Object
key2(0) = txtCveMat.Text
key2(1) = txtMatric.Text

Dim delRow As DataRow
delRow = tabla.Rows.Find(key2)
If Not (delRow Is Nothing) Then
delRow.Delete()
If MessageBox.Show("Estas seguro que quieres borrar el registro?", "Borrar Registros", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Me.AdapterInscrip.Update(tabla.Select(Nothing, Nothing, delRow.RowState))
Else
tabla.RejectChanges()
End If
Else
MsgBox("Registro no encontrado")
End If
Catch eEndEdit As Exception
System.Windows.Forms.MessageBox.Show(eEndEdit.Message)

End Try
End Sub.

Dim tabla As DataTable
tabla = Me.DsBIncripciones.Tables("INSCRIPCIONES")
Estas dos líneas nos crean la tabla copia en VB, con todos los datos de la base de datos original.
Dim key2(1) As Object
key2(0) = txtCveMat.Text
key2(1) = txtMatric.Text
Se declara una variable de tipo matriz con dos objetos, en el primer objeto se coloca la clave de la materia de la caja txtCveMat y en el segundo objeto se pondrá la matricula de la caja de texto txtMatric.

Dim delRow As DataRow
delRow = tabla.Rows.Find(key2)
Se declara una variable de tipo dataRow y se llena con el registro que sea encontrado con los datos de los dos campos.

If Not (delRow Is Nothing) Then
delRow.Delete()
Si nuestro datarow dekRow no esta vacio, pues se eliminara el registro, en caso de que este vacio, es que no se encontró el registro en la base de datos, y se mandara un alerta diciendo que no se encontró el registro.

If MessageBox.Show("Estas seguro que quieres borrar el registro?", "Borrar Registros", MessageBoxButtons.YesNo) = DialogResult.Yes Then

Me.AdapterInscrip.Update(tabla.Select(Nothing, Nothing, delRow.RowState))
Después de marcar el datarow como listo para borrar, se manda una ventana de alerta con dos botones, en la cual se confirma que si realmente se va a borrar o no. En caso de que sea SI, entonces de hará una actualización en la base de datos original, borrando el registro indicado.

Else
tabla.RejectChanges()
End If
En caso de que se le de NO en la ventana de confirmación, solo se recargara la tabla con los mismos datos que se tiene, eliminando el estado de borrado del datarow.
Else
MsgBox("Registro no encontrado")
End If
Esta caso se manda el mensaje de texto de que no se encontró el registro indicado.

Ejercicio:
Haz las bajas de las materias, inserta las cajas de texto que sean necesarios. Recuerda que primero debe de buscar la materia que se desea eliminar, y se debe de lanzar un mensaje de confirmación de eliminación.

lunes, 14 de enero de 2008

Parte 5

Consultas de la base de datos
Ahora vamos a hacer unas consultas sencillas a la base de datos.
Para hacer la búsquedas de alumnos tendremos de dos maneras de buscarlos, por apellido o por matricula, se pondrá dos radiobutons, el cual indicara como se hará la consulta, si por matricula o por apellido. Además pondremos un control de tipo listbox, en el cual desplegaremos los resultados de la búsqueda.



En el formulario formCAlumno, ponemos los elementos como se ve en la figura anterior, los radiobutons tendrán los siguientes nombres: rdbtnMatric y rdbtnApellido, para Matricula y para Apellido respectivamente, una caja de texto que se llamara txtBusqueda, el botón de búsqueda y por ultimo la caja de lista para desplegar los resultados que se llamara ltsBxResult.





Además se agregan los controles de conexión a la base de datos, la conexión con nombre cnxConsAlumnos, el adaptador adapterCAlumnos y el dataset con el nombre DsConsalumn, en el código se hace la carga de la conexión de la base de datos.

Private Sub formCAlumn_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
DsConsAlumn.Clear()
adapterCAlumnos.Fill(DsConsAlumn, "ALUMNOS")
End Sub



El funcionamiento de esta pantalla será, que solo se podrá introducir un numero o apellido si esta activado alguno de los dos radiobutons, en caso contrario deberá desplegar un mensaje de elegir el tipo de búsqueda. También en caso de darle clic al botón de búsqueda si haber ingresado algún dato de búsqueda, desplegara el mismo mensaje.



Para que despliegue el mensaje de advertencia al querer introducir un dato en la caja de texto sin antes haber elegido alguna opción de matricula o apellido, pondremos en siguiente código.



Private Sub txtBusqueda_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBusqueda.GotFocus
If Not (rdbtnApellido.Checked Or rdbtnMatric.Checked) Then
MsgBox("Elige una opción: Matricula o Apellido")
End If
End Sub


Ponemos la condición si alguno de los dos radiobutons no ha sido elegido ( If Not (rdbtnApellido.Checked Or rdbtnMatric.Checked) Then) entonces se mandara el mensaje.





Una vez que se ha elegido el tipo de búsqueda y se escribe el dato de referencia a la búsqueda se le da clic al botón de búsqueda.






Para que haga la búsqueda pondremos el siguiente código en el método del botón.

Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
Dim tabla As DataTable
Dim band As Boolean = True
tabla = Me.DsConsAlumn.Tables("ALUMNOS")

Dim cadCons As String
If rdbtnMatric.Checked Then
cadCons = "matricula like '" + txtBusqueda.Text + "'"
Else
If rdbtnApellido.Checked Then
cadCons = "apellido like '" + txtBusqueda.Text + "'"
Else
MsgBox("Elige una opcion: Matricula o Apellido")
band = False
End If
End If
If band Then
Dim regEncontrados() As DataRow
regEncontrados = tabla.Select(cadCons)

If regEncontrados.Length > 0 Then
Dim i As Integer
For i = 0 To regEncontrados.GetUpperBound(0)
ltsBxResult.Items.Add(regEncontrados(i)("matricula") _
+ " " + regEncontrados(i)("nombre") + " " _
+ regEncontrados(i)("apellido") + " " _
+ regEncontrados(i)("direccion") + " ")
Next
Else
MsgBox("No se encontraron registros")
End If
End If
End Sub

Dim tabla As DataTable
Se declara un objeto de tipo datatable
tabla = Me.DsConsAlumn.Tables("ALUMNOS")
Se relaciona el objeto tabla con el dataset con los datos de la tabla
Dim band As Boolean = True
Se declara un objeto de tipo booleano, que es una bandera la cual nos va a indicar si realmente eligieron uno de los dos radiobutons, para poder hacer la búsqueda
Dim cadCons As String
Se declara una cadena de consulta
If rdbtnMatric.Checked Then
cadCons = "matricula like '" + txtBusqueda.Text + "'"
Si fue elegido el radio boton de matricula, entonces la búsqueda de hará en el campo matricula y se hace una condición tipo SQL con el valor que esta en la caja de texto.
If rdbtnApellido.Checked Then
cadCons = "apellido like '" + txtBusqueda.Text + "'"
Si fue elegido el radio boton de apellido, se hará la búsqueda en el campo apellido.
Else
MsgBox("Elige una opcion: Matricula o Apellido")
band = False
End If
En caso de que no haya sido elegido ninguno de los dos radio boton, y se le dio clic al boton de búsqueda se lanzara un mensaje de advertencia, se pone la bandera en falso, para que ya no se haga la búsqueda sin tener datos de referencia
If band Then
Si la bandera es verdadera, entonces poder hacer la consulta
Dim regEncontrados() As DataRow
Se crea un arreglo de varios objetos de tipo datarow
regEncontrados = tabla.Select(cadCons)
Se hace la búsqueda en la tabla, ya sea por matricula o por apellido, y todos los registros encontrados serán guardados en el arreglo de objetos
If regEncontrados.Length > 0 Then
Si el número de registros encontrados es mayor a cero, entonces todos los resultados serán desplegados dentro del listbox.
For i = 0 To regEncontrados.GetUpperBound(0)
ltsBxResult.Items.Add(regEncontrados(i)("matricula") _
+ " " + regEncontrados(i)("nombre") + " " _
+ regEncontrados(i)("apellido") + " " _
+ regEncontrados(i)("direccion") + " ")
Next
Se utiliza un ciclo FOR para desplegar cada uno de los registros encontrados. Indicamos el número de registro del arreglo con la variable i, y además cada uno de los campos, de la tabla.
Else
MsgBox("No se encontraron registros")
End If
En caso de que el arreglo regEncontrados.Length tenga cero elementos, es porque no se encontró registro alguno, por lo tanto se manda un mensaje indicando que no se encontró ningún registro de acuerdo a la búsqueda.






Así el resultado es desplegado en la caja de lista (listbox) no importando el número de registro que haya encontrado en la búsqueda.




Ejercicio:
Haz las consultas de las materias, las consultas de las materas se harán de acuerdo a la división, poner un ComboBox indicando cada una de las divisiones,


















el usuario elegirá una división y la consulta desplegara todas las materias que pertenezcan a esa división.


















Mesográfia

http://forums.microsoft.com/msdn-es/showpost.aspx?postid=814212&siteid=11
http://support.microsoft.com/kb/305561/es
http://msdn2.microsoft.com/es-es/library/system.data.datarow(VS.80).aspx
http://santi.rastafurbi.org/dotnet/vbnet/AccesoDatos.pdf
http://support.microsoft.com/kb/308909/es
http://www.programatium.com/vbnet.htm
http://www.programatium.com/vbnet-intermedio.htm
http://www.programatium.com/vbnet-avanzado.htm
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfsystemdatadatarowclasstopic.asp
http://www.elguille.info/NET/ADONET/ejemplo_adonet_sql_vb.htm
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/vbcon/html/vbtskdeletingrecordsindataset.asp
http://docencia.50webs.com/vbasic06.htm
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfsystemdatadatarowcollectionclassfindtopic2.asp
http://msdn2.microsoft.com/es-es/library/system.windows.forms.listbox.items(VS.80).aspx