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.


















2 comentarios:

Unknown dijo...

pues la practica esta algo enredada, ademas que las maquinas no depuran, como devieran.

Anónimo dijo...

Buenos dias maestro:

kisieramos decirle ke no le entendemos al final de la parte 3, esta un poco enredada y se nos complica.
kisieramos pedirle su ayuda para ke no nos vaya a reprobar, xq la vrdad si le hemos echado ganas y keremosn salir, no kedarnos x BD.
xfa ayudenos!!!!!!!!!!!!!!!!!!

Atte: Sus alumnos consentidos*
y lo kremos mas ke nunk!!!!!!!!