Este tutorial es viejo viejo, de cuando recién aprendía a hacer conexiones a bases de datos con el VB6 en aquellos fines de los 90s/inicios de los 2000s. Lo dejo aquí como parte de la historia de la informatica.
La coneja no tiene nada que ver con el tutorial, pero creo que es un bonito separador :)
Empezamos:
Sucede que quienes
programamos, en algún momento, tenemos que toparnos con las bases de
datos queramos o no. Lo malo es que éstas son un mundo muy diferente a
los punteros, al manejo de puertos, a la captura de señales o a las
llamadas a Apis. Lo bueno es que una vez que se domina lo básico son lo
más fácil del mundo. Y lo mejor es que los lenguajes de programación de
alto nivel ya vienen con herramientas para manejas bases de datos de
todo tipo.
Y eso es lo que quiero mostrar aquí: lo básico para manejar una pequeña
base de datos en Access 2002 en el lenguaje de programación más fácil de
entender de la Historia: Visual Basic 6.
Antes que nada hay que cargar el componente ADO (Click derecho en la barra de herramientas -> Componentes -> Microsoft ADO Data Control 6.0) y ponerlo en el formulario. Luego se guarda y se borra el componente ADO y, si se quiere, la referencia en la barra de herramientas. Esto es para que el Visual Basic reconozca los objetos Recordset y Connection.
El programa (con su código fuente) se pueden bajar de aquí.
Y ahora una explicación:
Los datos a agregar o eliminar se ingresan en Text1 y Text2. La
navegación se hace con los botones Anterior y Siguiente (Command3 y
Command4). El botón Limpiar (Command2) es sólo para borrar lo escrito en
Text1 y Text2. En el control List1 aparecen todos los registros que
coinciden con la búsqueda del texto en Text3 realizada al oprimir
"Buscar Todos" (Command7), en cambio el botón "Buscar" (Command5) sólo
hace aparecer el primer resultado encontrado.
Para manejar la base de datos no es necesario añadir ningún control especial, basta declarar dos objetos:
Dim rs As Recordset Dim db As Connection |
"db" realiza la conexión con la base de datos y "rs" permitirá recorrer
los resgistros, borrarlos, añadirlos y buscarlos. Para conextar con la
base de datos (llamada "bd1.mdb") bastan estas líneas:
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & pathBD & ";" rs.Open "select * from Datos", db, adOpenDynamic, adLockOptimistic |
bd1.mdb sólo tiene dos tablas: "Datos" y "datos2". El programa sólo
trabaja con "Datos". El programador debe saber qué tablas y qué campos
tiene su base de datos para poder trabajar con ella.
Es importante saber también en qué programa y en qué versión está hecha
la base de datos, sino no podrá conectar. Para versiones anteriores de
Access se pone:
db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=" & pathBD & ";"
Aquí hay que observar el primer parámetro que se le pasa a rs.Open:
"select * from Datos" esto significa que rs dee recibir todos los
registros de la tabla Datos de la base de datos.
"select" es un comando de los Procedimientos Almacenados de las bases de
datos. Los Procedimientos Almacenados son órdenes que éstas interpretan
y ejecutan y se basan en la lógica booleana. Así, si yo quisiera todos
los registros cuyos Nombres coinciden con lo que se ingresa en Text3
(una búsqueda) basta poner:
rs.Close rs.Open "select * from Datos where Nombre = '" & Text3.Text & "'", db, adOpenDynamic, adLockOptimistic |
Para buscar todos los registros que coincidan con Text1 ó con Text2 (Nombre o Apellido) se pondría:
rs.Open "select * from Datos where Nombre = '" & Text1.Text & "' or Apellido = '" & Text2.Text & "'", db, adOpenDynamic, adLockOptimistic |
(hay que tener cuidado de que el contenido de Text1 y Text2, o las
condiciones de búsqueda si son de tipo String, estén entre comillas
simples).
Como rs se vuelve a abrir, es necesario cerrarlo previamente.
Otro comando es "delete", cuando se lo usa el objeto rs se cierra
después de la ejecución porllo que ya no es necesario poner rs.Close.
Pero para que se pueda seguir navegando entre todos los registros de la
tabla Datos se debe vovler a abrir.
rs.Open "delete * from Datos where Nombre = '" & Text1.Text & "' and Apellido = '" & Text2.Text & "'", db, adOpenDynamic, adLockOptimistic |
Esta orden borra los registros cuyo Nombre y Apellido coincidan con los textos en Text1 y Text2.
Los procedimientos almacenados permiten realizar muchas cosas en la base
de datos. Por ejemplo, imaginando que se tiene una tabla "Empleados"
con campos "Edad" que contiene data numérica, "ID" y "Profesion". Luego
de hacer las conexiones respectivas, para obtener a todos los ID y las
profesiones correspondientes a mayores de edad se puede poner:
select ID, Profesion from Empleados where Edad > 18
Para agregar un registro basta una función propia de rs: AddNew y luego
especificar los campos con la función "Fields" a donde se añadirán los
nuevos datos. Al recorrer los registros de atrás o hacia adelante
(propiedades MoveNext, MovePrevious, MoveLast y MoveFirst), o al hacer
una búsqueda, "Fields" se coloca automáticamente en el registro actual.
Las propiedades de rs: EOF y BOF indican si se está al final o al
principio de la tabla Datos. Mientras no se lo esté, sus valores son
False. Tanto las búsquedas como los recorridos y los borrados de los
registros en las tablas de la base de datos deben hacerse mientras EOF y
BOF son False, si no nos "saldremos" de la base de datos y nos botará
error.
Si en una búsqueda no se encuentra nada, EOF y BOF serán True.