You are on page 1of 18

BASES DE DATOS EN VISUAL BASIC

Visual Basic nos permite trabajar directamente con distintas bases de


datos (ACCESS, dBaseIII, dBaseIV, dBase 5, Excel3, Excel4, Excel5, Excel7,
FoxPro2.x, Foxpro3.0, LotusWK1, LotusWK3, LotusWk4, Paradox3.x,
Paradox4.x y Paradox5.x Esto lo logra mediante el Motor de Bases de
Datos Jet, herramienta de Microsoft para administrar los datos en bases de
datos Access. En realidad no es más que un conjunto de programas que se
cargan en el disco duro cuando instala Access o Visual Basic. Esta forma de
acceder a las bases de datos se le llama Acceso mediante objetos DAO.
Lo de DAO viene de Data Access Objet. Y es la forma más sencilla y rápida
de acceder a una base de datos Access instalada en el propio disco duro o
en un disco de red de área local rápida.

Pero no se puede concebir un sistema de desarrollo que no pueda


acceder a bases como Oracle, Informix, SQL Server, etc. Estas bases de
datos, aparte de tener su propia interface para acceso a datos, disponen de
una forma de acceso común a todas: ODBC

El ODBC (Open Data Base Conectivity) es un mecanismo de conexión


entre bases de datos abiertas, esto significa que tienen esa interface de
acceso común, interface a través de la cual puede acceder a sus datos
cualquier aplicación. Esta interface utiliza el lenguaje SQL, y es necesario
establecer una conexión ODBC en Windows.

Existe otro método de acceso a datos mas, muy reciente denominado


ADO. ADO quiere sustituir a DAO. La gran ventaja de ADO es que en
aquellas aplicaciones que leen una base situada en un servidor, ocupa
menos la red de área local, ya que trabaja una aplicación Cliente – Servidor.

Comenzaremos el estudio de bases de datos con los objetos DAO. Y


para DAO el control que organiza el trabajo al Motor Jet es el Control Data.
Existen controles similares para ADO.

DAO - Acceso a bases de datos mediante el Control


Data
Para acceder a estas Bases de Datos basta con introducir un control
Data en el formulario, y fijarle las propiedades apropiadas para que trabaje
sobre uno u otro tipo de base de datos. El control Data nos permite acceder
de una forma sencilla a cualquier base de datos de estos tipos, y sirve de
enlace entre la base de datos y los controles que son habilitados para
presentar los datos de esa base. Utiliza el motor de bases de datos Jet para
el acceso a los datos.

El Control Data

El control Data puede tomarse directamente de la caja de


herramientas. En el formulario tiene el aspecto de una barra deslizante:
Decíamos que el control Data sirve de enlace entre la base de datos y
los controles que pueden presentar datos. Estos controles a los que nos
referimos son los llamados Controles Enlazados a Datos: los dos más
sencillos son el control Label y el control TextBox

Un control Label puede presentar un dato. Si queremos que ese dato


sea un campo de una tabla de una base de datos, basta que enlacemos la
base de datos al control data, y que enlacemos luego el control Label con el
control Data. Si hacemos lo mismo con el TextBox, no solamente podremos
presentar datos de la BD, sino que los podemos introducir, al ser el TextBox
un control bidireccional.

El fichero, que tiene por extensión Mdb es la base de datos, y ese


nombre (Dirección completa de la carpeta y nombre del fichero) es lo que
debemos poner al control Data en su propiedad DataBaseName. Con esto,
el control data ya sabe donde tiene que ir a leer los datos. Pero le falta
todavía por saber en que tabla dentro de esa BD los tiene que leer. El
nombre de la tabla se lo indicamos al control Data en la propiedad
RecordSource. Para elegir esta propiedad basta con desplegar la lista de
las tablas haciendo click en la flecha de la línea de la propiedad
RecordSource.

También debemos indicar el tipo de recordset que debe crear.


(Dynaset, Snapshot, Table) Esto se lo indicamos en la propiedad
RecordsetType, que por defecto será Dynaset. Y ya tenemos casi todas las
propiedades del control Data cubiertas. Las demás son las típicas de todos
los controles. Casi todas las propiedades, porque hay una que se ha
introducido en la versión 6 de VB para permitir las dos formas de atacar a la
base de datos, con el motor Jet o a través del citado ODBCDirect... Esa
propiedad es DefaultType y nos permite elegir entre usar el motor de base
de datos Jet (Poniendo a esta propiedad el valor 2 o dbUseJet) o usar
ODBCDirect (Poniéndole el valor 1 ó dbUseODBC) El valor por defecto es
usar el motor Jet y así trabajaremos en principio.

Ya tenemos enlazado el control Data a la base de datos. Falta ahora


enlazar una etiqueta y un TextBox al control Data para tener el enlace
completo. Si desplegamos las propiedades del TextBox por ejemplo,
veremos que tiene unas propiedades que cuando lo estudiamos, las
habíamos pasado un poco por alto: DataSource y DataField.

En la figura puede ver que la propiedad DataSource puede


desplegarse, mostrando en este caso el nombre del único control Data que
tenemos en el formulario: Data1 Si tuviésemos mas controles Data,
aparecerían los nombres de todos ellos. Se elige uno.

A continuación debemos señalarle qué campo queremos que nos


presente. Podemos desplegar la lista, donde podemos ver los campos de la
tabla elegida para la propiedad RecordSource del control Data. Elegimos uno
y ejecutamos la aplicación.

Podemos observar que ya funciona. Si ponemos tantos TextBox como


campos tiene la tabla elegida, podemos ver todo el contenido de la Base de
datos moviéndonos a lo largo de ella mediante las flechas de cursor del
control Data.

Entremos ahora en un estudio un poco más avanzado del control


Data.

El control Data proporciona acceso a datos almacenados en bases de datos


usando uno de los tres tipos de objetos Recordset. El control Data le
permite ir de registro en registro y presentar y manipular los datos de los
controles enlazados. Sin un control Data, los controles enlazados con
datos de un formulario no pueden tener acceso automáticamente a los
datos.
Los controles enlazados solamente pueden tener acceso a un control
Data si este está en el mismo Formulario.

Objeto Recordset (conjunto de registros)


Es un conjunto lógico de registros. Los tres tipos de objetos Recordset son
Dynaset, (Permite la lectura y escritura de un registro) Snapshot
(Realiza una lectura instantánea de los registros, no permitiendo
modificarlos) y Table. (Representación en el código de una tabla base
que puede utilizarse para agregar, modificar o eliminar registros de una
sola tabla).
Controles enlazados
Son los controles que pueden presentar directamente datos de uno o
varios campos de una Base de Datos. Los controles DBList, DBCombo y
DBGrid tienen la posibilidad de presentar un conjunto de registros cuando
se asocian con un control Data. Los controles CheckBox, TextBox, Label,
Picture, Image, ListBox y ComboBox también son controles enlazados con
datos y pueden asociarse a un único campo de un Recordset administrado
por un control Data.

Los controles enlazados con un control Data presentan de forma


automática los datos de uno o más campos del registro actual o, en
algunos casos, de un conjunto de registros a ambos lados del registro
actual. El control Data realiza todas las operaciones sobre el registro
actual.

Una vez iniciada la aplicación, Visual Basic usa las propiedades del
control Data para abrir la base de datos seleccionada, abrir un objeto
Database y crear un objeto Recordset. Las propiedades Database y
Recordset del control Data hacen referencia a los objetos Database y
Recordset recién creados que pueden ser manipulados por el control Data.
Siempre podremos conocer el Recordset usado por el control Data leyendo
esa propiedad

VariableTipoRecordset =Data1.Recordset

Y si tenemos otro control Data en la aplicación (Puede estar en otro


formulario) siempre podemos hacer que el recordset de este segundo
control Data sea igual al del primero

Set Data2.Recordset = VariableTipoRecordset

(Obviamente el ámbito de VariableTipoRecordset debe permitir que se


vea en los formularios donde está Data1 y Data2)

Cuando se usa un control Data para crear un objeto Recordset o


cuando se crea un objeto Recordset en el código y se asigna al control Data,
el motor de base de datos Jet de Microsoft puebla automáticamente el
objeto Recordset. Como resultado, los marcadores se guardan en la
memoria local; el usuario no necesita manipular el control Data y no es
necesario invocar el método MoveLast en el código para conocer el número
total de registros. Los bloqueos de página usados para crear el Recordset se
liberan más rápidamente, haciendo posible que otros objetos Recordset
accedan a los mismos datos. Los objetos Recordset creados en el código
pero que no se asignan a un control Data no son poblados automáticamente
por el motor Jet. Se deben poblar desde el código.

El control Data puede manipularse con el mouse, moviéndose de


registro en registro o al principio o al final del Recordset. El control Data no
permite que el usuario se pase de los límites del Recordset usando el
mouse. No se puede mover el enfoque al control Data.

Consultas almacenadas

Otra opción importante cuando se usa el control Data es la posibilidad


de presentar una consulta realizada previamente en Access. Si se ha creado
previamente una consulta, el control Data nos mostrará esa consulta como
si se tratase de una tabla más de la base de datos, al desplegar la lista de
tablas para cubrir la propiedad RecordSource. Puede por lo tanto presentar
solamente los campos que necesite en su aplicación, tomados de una tabla
(o de varias tablas si ha establecido las relaciones oportunas) y de esta
forma su aplicación va a trabajar más rápido que si tuviese que seleccionar
esos campos mediante una instrucción SQL Para presentar una consulta,
establezca la propiedad RecordSource del control Data al nombre de esa
consulta (En vez de poner el nombre de una tabla, ponga el nombre de la
consulta). Esto no puede hacerse si la consulta contiene parámetros. Esto le
ocurre cuando la consulta se ha creado partiendo de los datos de otra
consulta.

Es mucho más rápida una consulta utilizando una consulta ya creada


en Access que introduciendo la consulta en SQL.

Estamos hablando de una consulta SQL establecida en el control


Data. ¿Dónde? Justamente en la propiedad RecordSource del control data.
Hasta ahora habíamos puesto en esa propiedad el nombre de una tabla o de
una consulta ya hecha en Access. Si en vez del nombre de la tabla ponemos
una consulta SQL, la cosa también funciona:
Con una Tabla

Data1.RecordSource = “Autores”

Con una consulta SQL

Data1.RecordSource = “Select * From Autores Where Apellidos = ‘Cervantes


Saavedra’”

Propiedades del control Data

Align El control Data puede programarse para que se ajuste


automáticamente a la parte superior o inferior de su formulario primario
usando la propiedad Align. En cualquier caso, el control Data ajusta su
tamaño horizontal al de su formulario primario cuando el tamaño de éste
cambia. Esta propiedad permite situar un control Data en un formulario
MDI sin requerir un control Picture que lo contenga.

Appearance Flat y 3-D

Backcolor Color de fondo de la parte intermedia del control

Administración de BOF/EOF

Las propiedades BOFAction y EOFAction establecen el


comportamiento del control Data cuando llega al principio o final de los
registros. En esos casos se produce el BOF y EOF respectivamente.

BOF (Begin Of File). Se produce el BOF cuando el control Data se posiciona


sobre el registro inmediatamente anterior al primero (No es un juego de
palabras). Este registro será el -1.
EOF (End Of File) Se produce la condición EOF cuando el control Data se
posiciona en el registro inmediatamente posterior al último. Este registro
será también el -1.
La propiedad BOFAction permite seleccionar el comportamiento del Data
cuando nos hemos pasado de registros por abajo. Tiene las opciones
MoveFirst (se mueve al primer registro) o BOF (se queda donde está)

La propiedad EOFAction establece el comportamiento del control Data


cuando se sobrepasa el último registro. Podemos indicarle que se mueva al
último registro (MoveLast), que se quede donde está (EOF), o que
introduzca un nuevo registro (AddNew)

Caption El nombre que figurará en la parte intermedia del control.

Connect Muy Importante. En esta propiedad debemos indicarle al control


Data el tipo de base de datos a la que va a conectarse. Admite todas las
bases enumeradas al principio de este capítulo.

DatabaseName En esta propiedad se le indica el nombre (Con su Path) de


la base de datos a la que debe conectarse. Para facilitar la búsqueda de la
base de datos, haciendo click en esta propiedad en la caja de propiedades,
podemos sacar un cuadro de diálogo haciendo click de nuevo en los tres
puntos que aparecen a la derecha de la propiedad. El cuadro de diálogo
seleccionará directamente las extensiones de los ficheros de bases de datos
acordes con el tipo de base de datos seleccionada en la propiedad Connect.

Database (Solo en ejecución)

Esta propiedad es sólo de lectura. Devuelve una referencia a un


objeto Database subyacente de un control Data.

Sintaxis Variable = nombredelcontroldata.Database

El objeto Database creado por el control Data se basa en las


propiedades DatabaseName, Exclusive, ReadOnly y Connect del control.
Los objetos Database tienen propiedades y métodos que puede
utilizar para administrar los datos. Puede utilizar cualquier método de un
objeto Database con la propiedad Database de un control Data, como Close
y Execute. También puede examinar la estructura interna de la Database
empleando su colección TableDefs y, a su vez, las colecciones Fields e
Indexes de objetos TableDef individuales.

DefaultType

Devuelve o establece un valor que indica el tipo del origen de datos


(Motor Jet u ODBCDirect) que se usan en el control Data.

Sintaxis NombreDelControlData.DefaultType = 1

Puede tomar los valores 1 (Usa ODBCDirect) y 2 (Usa el Motor Jet)


Pueden usarse también las constantes dbUseODBC o dbUseJet
respectivamente

EditMode
Solo lectura en tiempo de ejecución. Devuelve un valor que indica el
estado de modificación del registro actual.
Sintaxis Variable = NombreDelControlData.EditMode

Variable tomará uno de los siguientes valores :

dbEditNone No se está realizando ninguna operación de


modificación.
dbEditInProgress Se ha invocado el método Edit y el registro actual se
encuentra en el búfer de copia.
dbEditAdd Se ha invocado el método AddNew y el registro actual del
búfer de copia es un registro nuevo que aún no se ha
guardado en la base de datos.

La propiedad EditMode es especialmente útil cuando se desea partir


de la funcionalidad predeterminada de un control Data, o cuando no se
utiliza un control Data en Visual Basic Edición profesional. Puede comprobar
el valor de la propiedad EditMode y el del parámetro acción del
procedimiento del evento Validate para determinar si se debe invocar el
método Update.

También puede comprobar si el valor de la propiedad LockEdits es


True y el de EditMode es dbEditInProgress para determinar si la página de
datos actual se encuentra bloqueada.

Exclusive Devuelve o establece un valor (True / False) que indica si la base


de datos está abierta para acceso de un único usuario o de múltiples
usuarios.

Negotiate Propiedad característica de los controles que tienen la propiedad


Align. Establece un valor que determina si se muestra un control que puede
alinearse cuando un objeto activo del formulario muestra una o más barras
de herramientas. No está disponible en tiempo de ejecución.

Options Devuelve o establece un valor que especifica una o más


características del objeto Recordset de la propiedad Recordset del control
Data. Puede ponerse en el cuadro de propiedades o en tiempo de ejecución.
Puede tomar los siguientes valores o nombres de constantes (estos nombres
solo si los introduce en tiempo de ejecución)

1 dbDenyWrite En un entorno multiusuario, otros usuarios


no pueden realizar cambios en registros del Recordset.
2 dbDenyRead En un entorno multiusuario, otros usuarios
no pueden leer registros (sólo Recordset de tipo tabla).
4 dbReadOnly No se pueden realizar cambios en registros
del Recordset.
8 dbAppendOnly Puede agregar nuevos registros al Recordset, pero
no puede leer los registros existentes.
16 dbInconsistent Las actualizaciones pueden aplicarse a todos los
campos del Recordset, aunque infrinjan la condición de unión.
32 dbConsistent (Predeterminado) Las actualizaciones sólo
se aplican a los campos que no infringen la condición de unión.
64 dbSQLPassThrough Cuando se utilizan controles Data con una
instrucción SQL en la propiedad RecordSource, envía la instrucción
SQL a una base de datos ODBC, como SQL Server u Oracle, para su
procesamiento.
256 dbForwardOnly El Recordset es un desplazamiento sólo hacia
adelante. El único método de movimiento permitido es MoveNext.
Esta opción no puede utilizarse en objetos Recordset manipulados
con el control Data.
512 dbSeeChanges Genera un error interceptable si otro usuario está
cambiando datos que usted edita.

Para establecer más de un valor de los descritos, basta con sumar sus
valores. También puede establecer más de un valor para esta propiedad,
combinando opciones sumando valores entre sí. Por ejemplo, para
establecer dbReadOnly y dbInconsistent puede utilizar este código:

Data1.Options = dbAppendOnly + dbInconsistent

Para determinar si la propiedad contiene un valor específico, puede


utilizar el operador And. Por ejemplo, para averiguar si el Recordset está
abierto para acceso de sólo lectura, podría usar este código:

If Data1.Options And dbReadOnly Then...

Si cambia la propiedad Options en tiempo de ejecución, deberá


utilizar el método Refresh para que el cambio sea efectivo.

ReadOnly Devuelve o establece un valor que determina si la Database del


control está abierta para acceso de sólo lectura.

RecordsetType

Devuelve o establece un valor que indica el tipo de objeto Recordset


que desea que cree el control Data.

Los valores o nombre de la constante que puede adoptar son los siguientes:

0 vbRSTypeTable Un Recordset de tipo tabla.


1 vbRSTypeDynaset (Predeterminado) Un Recordset de tipo hoja
de respuestas dinámica.
2 vbRSTypeSnapshot Un Recordset de tipo instantánea.

Si no especifica un RecordsetType antes de que el control Data cree


el Recordset, se creará un Recordset de tipo hoja de respuestas dinámica.
(Dynaset)

Recordset

Devuelve o establece un objeto Recordset definido por las


propiedades de un control Data o por un objeto Recordset existente.

Veremos mas adelante las propiedades de un objeto Recordset,


propiedades que son en todo aplicables al Recordset del control Data.

El Recordset es como se adelantó, un conjunto de registros. Si las


propiedades Connect, DatabaseName, Options, RecordSource, Exclusive,
ReadOnly y RecordsetType establecidas para el control Data son válidas, se
crea un Recordset automáticamente basándose en dichas propiedades. Ese
será el Recordset del control Data. Pero también puede crearse previamente
un Recordset mediante la instrucción OpenRecordset y forzar que el
Recordset del control Data sea justamente ese mediante la instrucción Set
Data1.Recordset = MiRecordset

Sea cual fuera la forma de crearlo, a partir del momento en que el


Data tenga su Recordset podemos referirnos a él, por ejemplo para ir al
primer registro (Data1.Recordset.MoveFirst), avanzar un registro
(Data1.Recordset.MoveNext), al anterior (Data1.Recordset.MovePrevious) ir
al último (Data1.Recordset.MoveLast), añadir un registro
(Data1.Recordset.AddNew), guardar los cambios en la Base de Datos
(Data1.Recordset.Update), o borrar el registro actual
(Data1.Recordset.Delete)

Si se cambia alguna de las propiedades citadas al principio que


cambien el Recordset, es necesario volver a crearlo. Para ello basta con
utilizar el Método Refresh. (Data1.Refresh)

RecordSource

Devuelve o establece la tabla, el objeto QueryDef (Consulta) o la


instrucción SQL subyacente para un control Data. Esta propiedad puede
fijarse en el cuadro de propiedades del control data, (el caso más usado) o
introducirse como código. En los dos primeros casos, lo normal es introducir
el nombre de una tabla o una consulta de las existentes en la base de datos
especificada en la propiedad DatabaseName,

Puede introducirse en tiempo de ejecución mediante código con la


siguiente expresión:

NombreDelControlData.RecordSource = “NombredelaTabla”

Donde NombredelaTabla es una expresión de cadena que especifica el


nombre de una Tabla o una Consulta, de las que componen la base de
datos especificada en la propiedad DatabaseName, o una consulta SQL
válida que utiliza sintaxis apropiada para la base de datos especificada en la
propiedad DataBaseName. La propiedad RecordSource especifica el
origen de los recursos accesibles a través de controles enlazados del
formulario. Si establece la propiedad RecordSource como el nombre de
una tabla existente en la base de datos, todos los campos de esa tabla
serán visibles a los controles enlazados adjuntos a este control Data. El
orden de los registros recuperados lo establece el objeto Index que
selecciona mediante la propiedad Index del Recordset. Si no establece la
propiedad Index, los datos se devolverán sin ningún orden concreto.

Después de cambiar el valor de la propiedad RecordSource en


tiempo de ejecución, deberá utilizar el método Refresh para activar el
cambio.

METODOS DEL CONTROL DATA

Método Refresh

Actualiza los datos del recordset del control data. Imagínese que el
control data accede a una base de datos compartida. Mediante este método
actualizamos el contenido del recordset del Data y por lo tanto los datos
presentados a través de los controles enlazados. El método Refresh
también se utiliza para cerrar y volver a generar el objeto Recordset o las
estructuras de datos creadas por un control Data.

Sintaxis NombredelcontrolData.Refresh

Puede utilizar el método Refresh sobre un control Data para abrir o


reabrir la base de datos (si han variado las propiedades DatabaseName,
ReadOnly, Exclusive o Connect) y volver a generar el objeto Recordset
indicado por la propiedad Recordset del control.

Método UpdateControls

Actualiza los datos presentes en los controles enlazados a datos


vinculados al control Data.

Sintaxis Nombredelcontroldata.UpdateControls

Utilice este método para restablecer en los controles enlazados sus


valores originales, por ejemplo cuando un usuario modifica los datos y luego
decide cancelar los cambios.
Este método produce el mismo efecto que hacer actual de nuevo al
registro actual, excepto en que no se produce ningún evento ni introduce en
la Base de Datos los posibles valores que se hubiesen cambiado en los
controles enlazados.

Método UpdateRecord

Guarda en la base de datos los valores actuales de los controles


enlazados.

Sintaxis NombredelcontrolData.UpdateRecord

Puede utilizar este método para guardar el contenido actual de los


controles enlazados en la base de datos. Los cambios introducidos en los
controles enlazados a datos se pasan a la base de datos al cambiar el
registro actual, bien mediante código (Data1.Recordset.MoveNext, p.e.) o
usando las flechas del control data, o cambiando el registro actual en un
DBGrid. Sin embargo hay circunstancias en las que no es apropiado hacer
esto. Mediante el método UpdateRecord introducimos los cambios en la BD.
Este método no desencadena el evento Validate.

EVENTOS DEL CONTROL DATA

Error

Se produce solamente como resultado de un error de acceso a datos


que tiene lugar cuando no está ejecutando código Visual Basic. Lo
explicamos.

El control data carga los datos durante la carga del formulario que lo
contiene, abriendo la base indicada en su propiedad DataBaseName.
Imagínese que no existe esa base de datos en el disco. En ese caso no se
producirá ningún interceptable ya que no se ejecuta ningún código escrito.
Tampoco se ejecuta ningún código escrito cuando el usuario hace click en
uno de los botones del control data.

El procedimiento Error del control Data se ejecuta cada vez que


ocurre un error por una maniobra de este tipo, y pasa el código de error
como parámetro. Analizando el código de error podemos escribir código en
este procedimiento para paliar el error. La ayuda de VB tiene un buen
ejemplo del uso de este procedimiento.

Este ejemplo presenta un cuadro de diálogo Abrir si no se ha podido


encontrar la base de datos especificada en la propiedad DataBaseName
del control Data después de haber terminado el evento Form_Load.

Private Sub Data1_Error (DataError As Integer, Response As Integer)


Select Case DataError
'Si no se ha encontrado el archivo de base de datos se produce el error
3024
Case 3024
'Presentar un cuadro de diálogo Abrir.
CommonDialog1.ShowOpen
End Select
End Sub

Reposition

Se produce después de que un registro se convierte en el registro


actual.

Private Sub Objeto_Reposition()

Donde objeto = Nombre del control Data


Cuando se carga un control Data, El primer registro de su objeto
Recordset se convierte en el registro actual, provocando el evento
Reposition. Cuando un usuario haga clic en uno de los botones del control
Data, moviéndose de registro en registro o si se usa uno de los métodos
Move del objeto Recordset asociado al control data, como MoveNext,
MoveFirst, MovePrevious, los métodos Find, como FindFirst, FindNext, o
cualquier otra propiedad o método que cambie el registro el actual, se
produce el evento Reposition después de que cada registro se convierta en
el actual.

Este evento se puede usar para realizar cálculos basándose en los


datos del registro actual o para cambiar el formulario en respuesta a los
datos del registro actual.

Validate

Se produce antes de que un registro diferente se convierta en el


registro actual; antes del método Update (excepto cuando los datos se
guardan con el método UpdateRecord); y de los métodos Delete, Unload o la
operación Close.
Private Sub objeto_Validate ([ índice As Integer,] acción As Integer, guardar
As Integer)

objeto = Nombre del control Data


índice = Indice del control Data dentro de una matriz de controles (Si ha
lugar)
acción = Un entero que indica la operación que ha producido el evento,
como se describe mas adelante
guardar = una expresión booleana que especifica si los datos asociados
han cambiado, como se describe mas adelante.

Acción puede tomar estos valores :

0 vbDataActionCancel Cancela la operación cuando se


sale del
procedimiento Sub.
1 vbDataActionMoveFirst Método MoveFirst.
2 vbDataActionMovePrevious Método MovePrevious.
3 vbDataActionMoveNext Método MoveNext.
4 vbDataActionMoveLast Método MoveLast.
5 vbDataActionAddNew Método AddNew.
6 vbDataActionUpdate Operación Update (no
UpdateRecord).
7 vbDataActionDelete Método Delete.
8 vbDataActionFind Método Find.
9 vbDataActionBookmark La propiedad Bookmark no ha sido
definida.
10 vbDataActionClose Método Close.
11 vbDataActionUnload El formulario se va a descargar.

Los valores de guardar son:

True Los datos asociados han cambiado.


False Los datos asociados no han cambiado.

El evento Validate se usa para realizar las últimas comprobaciones


sobre los registros que se van a escribir en la base de datos.

Vea la ayuda de Visual Basic para mayor detalle de este evento.

CONTROLES ENLAZADOS A DATOS

Los controles enlazados a datos son aquellos que pueden presentar datos
de una base de datos, a través de un control Data. Los controles enlazados
a datos permiten crear aplicaciones con acceso a datos con muy poco
código, o incluso ninguno. Para utilizar cualquiera de estos controles
enlazados conectables a datos debe incluir uno o más controles Data en un
formulario. El control Data establece un enlace entre la base de datos y los
controles enlazados para la manipulación de los datos. El control Data que
sirve de enlace entre la Base de Datos y los controles enlazados debe estar
obligatoriamente en el mismo formulario que los controles.

Los controles asociados a datos tienen todos la propiedad DataSource, que


es la propiedad donde se debe poner el nombre del control Data asociado a
ellos. Existen en Visual Basic trece controles enlazados a datos, además del
control Data :

Data Ya comentado, se utiliza para tener acceso a los datos de las bases a
través de controles enlazados de un formulario. Crea y administra los
objetos Database y Recordset para su uso por parte de los controles
enlazados. Requerido para su uso con todos los demás controles enlazados.

DBCombo Se utiliza para obtener una combinación enlazada formada por


un cuadro de lista y un cuadro de texto. La lista puede llenarse
automáticamente a partir de un control Data. El usuario puede elegir un
elemento de la lista o introducir un valor en el cuadro de texto. Puede
utilizarse para proporcionar acceso de lectura / escritura a un campo de
texto específico seleccionado en la lista.

DBList Se usa para mostrar una lista generada a partir de un control Data
en la que el usuario puede elegir un elemento. La lista puede rellenarse
automáticamente desde un control Data, y puede proporcionar acceso de
lectura / escritura a un campo de texto específico seleccionado en ella.

DBGrid Se utiliza para mostrar a la vez todos los registros del recordset del
control Data. El DBGrid se rellena automáticamente con todos los registros,
y muestra todos los campos del recordset de control Data, formando una
cuadrícula con filas y columnas. El usuario puede elegir un elemento de la
cuadrícula para variar el valor en ese campo y registro o introducir un nuevo
registro. El hecho de colocarse sobre un determinado registro de la
cuadrícula, fuerza a ese registro a convertirse en el registro actual del
control Data al que está asociado.

Label Se usa para el texto que el usuario no debe modificar. Puede


utilizarse para ofrecer acceso de sólo lectura a un campo de texto
específico.

TextBox Se utiliza para almacenar texto que el usuario puede introducir o


modificar. Puede utilizarse para proporcionar acceso de lectura / escritura a
un campo de texto específico.

CheckBox Se utiliza para crear un cuadro que el usuario puede elegir de


forma sencilla para indicar si algo es verdadero o falso, o para mostrar
varias opciones entre las que el usuario pueda elegir más de una. Puede
utilizarse para proporcionar acceso de lectura / escritura a un campo
booleano o de bit específico.

ComboBox Se utiliza para obtener una combinación de un cuadro de lista


y un cuadro de texto. La lista se rellena con el método AddItem. El usuario
puede elegir un elemento de la lista o introducir un valor en el cuadro de
texto. Puede utilizarse para proporcionar acceso de lectura / escritura a un
campo de texto seleccionado en la lista. Consulte el control DBCombo

ListBox Se utiliza para mostrar una lista en la cual el usuario puede elegir
un elemento. La lista se rellena con el método AddItem. Puede usarse para
proporcionar acceso de lectura / escritura a un campo de texto específico
seleccionado en la lista. Consulte el control DBList
PictureBox Se usa para mostrar una imagen gráfica de un mapa de bits,
un icono o un meta-archivo en un formulario. Puede utilizarse para
proporcionar acceso de lectura / escritura a un campo de imagen o binario
específico.

Image Se utiliza para mostrar una imagen gráfica de un mapa de bits, un


icono o un meta-archivo en un formulario. Las imágenes mostradas en un
control Image utilizan menos recursos que las de los controles PictureBox.
Puede usarse para proporcionar acceso de lectura / escritura a un campo de
imagen o binario específico.

MSFlexGrid Es un control enlazado a datos de reciente incorporación.


Apareció con la versión 5 de VB y es un control parecido al DBGrid, pero con
algunas ventajas y otros inconveniente. En este caso, estando asociado a un
control Data, el MSFlexGrid solamente permite leer datos, no podemos
variar el contenido de ningún registro. Tampoco se mueve el registro actual
del control Data cuando seleccionamos otra fila del MSFlexGrid.

PROPIEDADES RELACIONADAS CON DATOS COMUNES A ESTOS


CONTROLES

Los controles enlazados a datos tienen unas propiedades para el


acceso a datos basadas en el enlace con la base de datos a través del
control Data. Las propiedades comunes a todos ellos son :

DataSource Fuente de datos. Es el nombre del control Data que lo enlaza


con la B.D. Este control Data es el que determina la Tabla donde están los
campos con los datos. Esta Tabla se determina mediante la propiedad
RecordSource del control Data.

DataField Es el nombre del campo, dentro de la Tabla de la base de


datos, que se va a presentar en el control enlazado a datos. Esta propiedad
no la tiene el DBGrid ni el MSFlexGrid debido a que presentan todos los
campos de la Tabla de la base de datos seleccionada en el control Data.

Vamos a estudiar cada uno de los controles enlazados a datos con un


poco más de detalle.

Control Label

El Label permite presentar los datos e introducirlos en la base a


través del control Data. El control Label, en lo referente al enlace a datos,
solamente tiene las propiedades mencionadas de DataSource y
DataField.

Control TextBox

Todo lo dicho del control Label es aplicable al TextBox, que además


presenta la particularidad de que en este control sí se puede escribir
directamente desde el teclado. De esta forma podemos introducir datos o
cambiar los existentes en la base de datos.
Control CheckBox

El control CheckBox permite presentar e introducir datos de tipo


Booleano. Tiene las propiedades DataSource y DataField en lo relativo a
acceso a datos.

Controles ListBox y ComboBox

Estos controles tienen una característica especial respecto a su


comportamiento con el enlace a la base de datos. La lista no se puede
cargar directamente desde la base de datos, sino a través de un control
intermedio, por ejemplo un Label, donde presentaremos un campo de la
base de datos. El texto de la propiedad Caption de este Label se introduce
en el ListBox o ComboBox mediante el método AddItem. Una vez
introducidos todos los elementos de ese campo que nos interesen, cada vez
que la base de datos se sitúa sobre el registro correspondiente a uno de los
elementos que está en el ListBox o ComboBox, éste cambia su ListIndex
para seleccionar el elemento correspondiente al registro actual del control
Data.

El ListBox puede contener elementos correspondientes a la base de


datos y otros ajenos. Puede emplearse esta característica del ListBox para
seleccionar un elemento entre varios elementos tomados de la BD y otros
introducidos por otro procedimiento, con la particularidad de que el
ListIndex de este ListBox irá a posicionarse sobre el elemento de la BD
correspondiente al registro actual del Control Data.

Tienen las propiedades DataSource y DataField en lo relativo a acceso a


datos.

Controles DBList y DBCombo

Para agregar estos controles debe insertar el OCX Microsoft Data


Bound List Controls 6.0

Estos controles tienen dos enlaces a controles data. Uno para rellenar
la lista, que se lo debemos indicar en la propiedad RowSource,
acompañado del nombre del campo con el que la va a rellenar, que
introduciremos en la propiedad ListField, y otro enlace a otro control Data,
que se lo debemos indicar en la propiedad DataSource. El campo de este
segundo control Data se lo indicaremos en la propiedad DataField. El
comportamiento de estos dos controles es el siguiente: Mediante el enlace a
través de la propiedad RowSource se rellena la lista, utilizando los datos
del campo elegido en la propiedad ListField. Imaginemos que la tabla a la
que nos conectamos con estas propiedades es la Tabla A. La tabla a la que
enlazamos el DBList mediante la propiedad DataSource, le llamamos Tabla
B. Con este invento vamos a pasar un dato desde la tabla A a la tabla B. El
dato que vamos a pasar está en la tabla A en el campo señalado en la
propiedad BoundColumn del DBList. El registro de la tabla A de donde
cogemos el dato será el seleccionado en el DBList. El registro de la tabla B
donde vamos a meter el dato será el registro actual de ese control data,
control actual que habremos seleccionado mediante cualquier método. El
campo de esa tabla B que vamos a variar será el campo indicado en la
propiedad DataField.
Control PictureBox y Control Image

Pueden mostrar una imagen almacenada en una Base de Datos.


Mediante el control Data, se puede introducir la imagen presente en uno de
estos controles en la Base de Datos.

El campo que contenga una imagen en una BD debe ser tipo Objeto
OLE (Binario Largo en versiones anteriores de Access), y el tipo de
imágenes que se pueden introducir son los mapas de bits (Archivos con
extensión .BMP), los archivos de icono, (Extensión .ICO) y los metaarchivos.
(Metafiles, extensión .WMF)

Para introducir un gráfico en una BD es más práctico introducirlo


mediante un control Data y un control Picture o Image que creando por
código un Recordset. En realidad deberíamos decir que es el único método
práctico de introducir / sacar imágenes de una Base de Datos

Control DBGrid

El control de cuadrícula enlazada a datos (control DBGrid) permite


que los usuarios de su aplicación de ase de datos trabajen con varios
registros a la vez.

Mostrar múltiples registros

DBGrid es un control ActiveX que muestra una serie de filas y


columnas que representan registros y campos de un objeto Recordset.
Cuando asigne a la propiedad DataSource del control DBGrid un control
Data, el control DBGrid se llenará automáticamente de datos y se
establecerán automáticamente sus encabezados de columna a partir del
conjunto de registros del control Data. Al contrario que la mayoría de los
controles enlazados a datos, el control DBGrid le permite ver y modificar
varios registros simultáneamente.

Para añadir el control DBGrid a un proyecto

1. Hacer clic en la orden Componentes del menú Proyecto.


2. En la ficha Controles, seleccionar Microsoft Data Bound Grid Control,
y luego hacer clic en Aceptar.

El control DBGrid tiene varias propiedades que especifican cómo se


comporta el control. Por ejemplo, si asigna a la propiedad AllowUpdate el
valor True, un usuario puede modificar los datos del control. También puede
establecer propiedades para columnas individuales del control DBGrid.

Puede cambiar el título de la columna, cambiar el campo de datos al


que se enlaza la columna, agregar valores predeterminados, etc.

Para establecer propiedades de columnas


1. Oprima el botón secundario del ratón sobre el control DBGrid.
2. Haga clic en la orden Propiedades.
3. Haga clic en Columnas.
Puede cambiar el título de la columna, cambiar el campo de datos al
que se enlaza la columna, agregar valores predeterminados, etc.

Para establecer los encabezados de las columnas del control DBGrid,


luego de haberlo enlazado a un control Data, oprima el botón secundario
del ratón sobre el control en tiempo de diseño, y luego haga clic en la orden
Recuperar campos.

Obtener y establecer el texto de la celda actual

Utilice la colección Columns del control DBGrid para recuperar el


texto de la celda seleccionada actualmente en tiempo de ejecución. Por
ejemplo:

MsgBox DBGrid1.Columns(DBGrid1.Col).Text

Para cambiar la información del control DBGrid, cambie el objeto


Recordset asociado. Por ejemplo, si el control DBGrid está enlazado al
recordset Data1, se ejecutaría el siguiente código:

Data1.Recordset.Edit
Data1.Recordset.Fields("NombreProducto") = "Disco duro"
Data1.Recordset.Update

Usar el evento BeforeUpdate

El evento BeforeUpdate tiene lugar antes de que se muevan datos


desde un control DBGrid al búfer de copia del control Data. Puede validar
los datos y cancelar la actualización si es necesario.

Controles DBList y DBCombo

Puede utilizar el control de cuadro de lista enlazado a datos (DBList)


o el cuadro combinado enlazado a datos (DBCombo) para presentar
automáticamente una lista de valores de un Recordset. Esto resulta útil para
proporcionar valores válidos al usuario.

Obtener información de una tabla de búsqueda

También puede utilizar estos controles en aplicaciones de "tabla de


búsqueda".
Por ejemplo, puede presentar una lista de nombres de categoría válidos (en
vez de Id.) y utilizar el Id. correspondiente cuando el usuario agregue o
modifique datos.

Establecer propiedades del control DBCombo


Para determinar el valor que se presenta en el control DBCombo,
asigne a la propiedad RowSource un nombre de control Data y a la
propiedad ListField un nombre de campo.

El cuadro combinado enlazado a datos contiene todos los valores de


ese campo. Para determinar qué campo de la base de datos se actualiza
cuando un usuario cambia un valor, establezca las propiedades
DataSource y DataField. Para establecer la relación entre la tabla que
contiene los valores de búsqueda y la tabla que se está modificando
realmente, establezca la propiedad BoundColumn.

Control MSFlexGrid
El control MSFlexGrid proporciona características avanzadas para la
presentación de datos en una cuadrícula. Es similar al control DBGrid
aunque, cuando se enlaza a un control Data, el control MSFlexGrid
muestra datos de sólo lectura. Puede utilizar el control MSFlexGrid para
combinar filas o columnas de información y así agrupar la información
relacionada.

Para combinar celdas


1. Establezca la propiedad MergeCells a un valor diferente a cero.
2. Establezca las propiedades arreglo MergeRow() y MergeCol() a
True para las filas y columnas que desee combinar.

Por ejemplo, para combinar las celdas en la tabla Detalles de pedidos,


añada el siguiente código al formulario donde se encuentra el control
MSFlexGrid.

Private Sub Form_Load()


MSFlexGrid1.MergeCells = flexMergeFree
MSFlexGrid1.MergeCol(0) = True
End Sub

You might also like