aprende Visual Basic - www.usuarios.com/ib307182
BÚSQUEDAS
En este capítulo vamos a tratar la realización de búsquedas en un recordset determinado, es decir, buscar un registro que cumpla con unos criterios determinados de entre un conjunto de registros de una tabla.
Antes de empezar a ver los métodos que se deben utilizar para realizar las búsquedas, vamos a ver los tipos de Recordset que podemos crear, puesto que dependiendo del tipo del recordset que hayamos creado podremos realizar un tipo de búsquedas u otro.
Tipos de Recordset
Recordemos por el capítulo anterior que un recordset es un conjunto de registros que asignamos a una variable para poder tratarlos y hacer operaciones con los registros que la componen.
Para asignar un conjunto de registros a un recordset utilizábamos la siguiente sentencia:
set autores = mibase.openrecordset("authors", dbOpenTable)
En este caso hemos utilizado la constante dbOpenTable, con lo que le estamos diciendo que asigne al recordset autores todos los campos de la tabla authors, que deberá ser una tabla incluida en la base de datos mibase.
Las demás constantes que podemos introducir son dbOpenDynaset y dbOpenSnapShot y las características de todas ellas son las siguientes:
"SELECT nombre, apellidos, departamento FROM profesores, departamentos WHERE codprof=coddep AND coddep=3 ORDER BY nombre"
Esta sentencia SELECT obtiene el nombre, los apellidos y el departamento de todos los profesores que pertenezcan al departamento 3 ordenados alfabéticamente por el nombre.
El método dbOpenDynaset permite que se realicen operaciones de lectura, modificación y escritura aunque es más lento que el modo dbOpenTable.
REALIZACIÓN DE BÚSQUEDAS
Hemos visto las diferencias entre los distintos modos de abrir un recordset , pues bien, las diferencias continúan, puesto que según el modo de abrir un recordset podremos realizar un tipo de búsquedas u otro.
Vamos a empezar a ver como se realizar las búsquedas con los modos dbOpenDynaset y dbOpenSnapShot.
métodos Find
Para realizar búsquedas tenemos estos 4 métodos:
La forma de utilizar estos métodos es la siguiente:
recordset.findfirst condición
La condición es una cadena de texto encerrada entre comillas en la que indicaremos el campo de la tabla que busquemos y la condición que debe cumplir. Podemos unir varias condiciones con los operadores OR y AND. La forma de introducir las condiciones es similar a como se realiza con la clausura WHERE de la sentencia SELECT de SQL.
Veamos algunos ejemplos:
Recordset.FindFirst "codigo>=10 AND codigo<=20"
Busca el primer registro cuyo campo codigo tenga un valor entre 10 y 20.
Recordset.FindFirst "Titulo='BARCOS DE VAPOR'"
Busca el primer registro cuyo campo Titulo sea el indicado. En los campos de tipo texto el valor debe introducirse entre comillas simples.
Recordset.FindLast "Fecha>=#1/1/95# AND Fecha<=#12/31/95#"
Busca el primer registro, comenzando por el final, cuyo campo fecha tenga un valor correspondiente al año 1995. Los valores tipo fecha deben introducirse con el carácter #. Y las fecha deben introducirse en formato americano, esto es, mm/dd/aa.
¿LO HEMOS ENCONTRADO?
Una vez que hemos efectuado la búsqueda nos quedará saber si ha habido éxito o no. Esto lo conseguimos comprobando el estado de la propiedad nomatch que contiene cualquier recordset.
- Si el valor de nomatch es TRUE significa que no se ha encontrado el registro que buscábamos.
- Si el valor de nomatch es FALSE significa que la búsqueda ha tenido éxito y el recordset apuntará al registro que se haya encontrado, con lo que lo tendremos preparado para realizar cualquier operación: modificar, eliminar, mostrar, etc...
APLICACION DE EJEMPLO
Mediante una aplicación de ejemplo veremos como funciona el método findfirst con sus variantes a la hora de realizar las búsquedas.
A partir de la base de datos biblio.mdb que viene con VB vamos a mostrar esta vez la tabla de editoriales (publishers) en un control DBgrid como hicimos con los autores en el capítulo anterior.
Vamos a hacer que al pulsar un botón (commandbutton) nos aparezca en un listbox todos los títulos publicados por la editorial a la que estemos apuntando del control DBgrid.
Para conseguir esto tenemos 2 tablas en la base de datos : Publishers y Titles, las cuales están relacionadas por el campo PubID. Una vez pulsemos el botón Buscar... tendremos que calcular el código de la editorial apuntada, en el control DBgrid y a continuación buscar en la tabla de libros (Titles) aquellos cuyo campo PubID coincida con el codigo anterior
Para conseguir realizar la aplicación vamos a partir del formulario siguiente:

En el formulario se han introducido los siguientes controles:
DATA con las siguientes propiedades
Database Name: Biblio.mdb
RecordSource: Publishers
DBGRID con las propiedades:
Datasource: Data1
Para que el DBGrid sólo muestre los campos que nos interese y no todos, al pulsar con el botón derecho sobre el control activamos la opción Retrieve Fields con lo que veremos los campos en el control (sin ejecutar en ningún momento la aplicación, todo en modo diseño), a continuación activamos la opción Edit también del menú contextual del control, esta opción nos permitirá cambiar la anchura de las columnas y ocultar columnas si las hacemos lo más estrechas posible.
LISTBOX no hace falta modificar ninguna propiedad.
A los 2 controles CommandButton BUSCAR y CERRAR les asignamos el mismo nombre tanto en la propiedad Caption como en la propiedad Name.
CODIGO DE LA APLICACION
Una vez tenemos hecho el diseño del formulario, introduciremos el código que nos permitirá realizar las búsquedas.
Primero declaramos las variables de base de datos y recordset en la sección declarations del formulario para que estén accesibles desde cualquier control del formulario:

A continuación le daremos valores iniciales a estas variables(objetos) que son las que contendrán los títulos en los que se realizará la búsqueda. Se ha asignado el recordset títulos con el modo dbOpenDynaset para que pueda utilizarse el método de búsqueda FindFirst. También podría haberse tomado el modo dbOpenSnapShot si no se necesitan realizar modificaciones sobre esta tabla.

El código del botón Buscar toma el codigo de la editorial que hayamos apuntado en el control DBgrid y realiza búsquedas en el recordset títulos, añadiendo al control ListBox los campos que cumplan con la condición de búsqueda.
Para buscar varios registros en un recordset, primero se utiliza el método FindFirst y para las siguientes búsquedas el método FindNext.

Para probar el funcionamiento de esta aplicación marcar en distintas editoriales del DBGrid y pulsar sobre el botón Buscar para ver como cambia el contenido del ListBox mostrando los libros de cada editorial.