| INDICE ACCESO A DATOS DAO | |||
|
5.3 Uso del Control Data
En Visual Basic puede utilizar el control Data para crear aplicaciones de bases de datos para una gran variedad de formatos de base de datos. El control Data interactúa con el motor de base de datos Microsoft Jet y permite crear aplicaciones preparadas para datos con la mínima cantidad de código posible.
En esta sección se explica cómo utilizar el control Data y otros controles avanzados enlazados a datos para ver, modificar y actualizar información de una base de datos.
5.3.1 Introducción al Acceso de Datos
Antes de empezar a trabajar con la funcionalidad de bases de datos de Visual Basic, es necesario que comprenda las funciones de acceso a datos, así como la terminología referente a bases de datos.
Opciones de Acceso a Datos en Visual Basic
Los Objetos de acceso a datos (DAO) y el control Data utilizan el motor de base de datos Microsoft Jet para tener acceso a las bases de datos. El motor de base de datos Jet puede obtener acceso a tres tipos de bases de datos:
He aquí otros métodos de acceso a datos que admite Visual Basic:
5.3.2 Trabajar con el Control Data
El control Data de Visual Basic le permite escribir aplicaciones de bases de datos muy eficaces con muy poco código.
En esta sección aprenderá a generar aplicaciones de bases de datos con el control Data y el objeto Recordset asociado.
Tener Acceso a Datos con el Control Data
El control Data implementa el acceso a datos mediante el motor de base de datos Microsoft Jet. Esta tecnología proporciona acceso a muchos formatos de base de datos y le permite crear aplicaciones que manejan datos sin necesidad de escribir código.
Cuando enlaza un control enlazado a datos que ha colocado en un formulario, se muestran automáticamente los datos de la base de datos en el control enlazado. Si un usuario cambia los datos de un control enlazado, dichos cambios se actualizarán automáticamente en la base de datos en cuanto el usuario se desplace a otro registro. Muchos controles intrínsecos de Visual Basic están enlazados a datos, como es el caso de los controles CheckBox, Image, Label, PictureBox, TextBox, ListBox, ComboBox y los contenedores OLE.
La siguiente ilustración es un ejemplo de un formulario que contiene un control Data y dos controles enlazados.
Después de establecer los valores de las propiedades para el control Data, es necesario enlazar al control Data los controles enlazados a datos individuales y después especificar qué campo de la tabla mostrará cada control.
Uso de las Propiedades y métodos del Control Data
Para especificar qué datos desea recuperar, debe establecer las propiedades DatabaseName y RecordSource de un control Data. Además, puede establecer las siguientes propiedades y métodos:
El Objeto Recordset
En una aplicación de base de datos, los usuarios trabajan con el control Data para desplazarse entre registros dentro de la base de datos. Los usuarios pueden hacer clic en los botones del control Data para avanzar o retroceder registro a registro o para ir directamente al primer o al último registro.
Todo el conjunto de registros al que hace referencia un control Data se denomina conjunto de registros o Recordset. El Recordset se almacena en la memoria, transfiriéndose al disco si es necesario.
Si utiliza código para cambiar la posición del registro actual, debe comprobar las propiedades EOF y BOF del objeto Recordset para determinar el inicio y el final del mismo. Cuando se desplace al registro EOF o al BOF, se ejecutará la acción indicada por el valor de la propiedad BOFAction o EOFAction.
En la siguiente ilustración se muestra cómo las propiedades BOF y EOF determinan los límites del objeto Recordset.

Para utilizar el objeto Recordset de un determinado control Data, especifique la propiedad Recordset del control Data, tal y como se muestra en el siguiente código:
Data1.Recordset.MoveNext 'Va al registro siguiente.
If Data1.Recordset.EOF Then
Data1.Recordset.MoveLast
End If
Uso de las Propiedades y Métodos de Recordset
Utilice los métodos y las propiedades del objeto Recordset para recuperar información del conjunto de registros, desplazarse por los registros y agregar, actualizar o eliminar registros.
El siguiente código muestra el uso de las propiedades y métodos de un Recordset:
Sub cmdCancel_Click ()
Data1.CancelUpdate
End Sub
Sub cmdUpdate_Click ()
Data1.UpdateRecord
End Sub
Sub cmdAdd_Click ()
Data1.Recordset.AddNew
End Sub
Sub cmdDelete_Click ()
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MoveLast
End If
End Sub
5.3.3 Uso de Eventos del Control Data
El control Data proporciona tres eventos que puede utilizar para mejorar la aplicación de base de datos: Validate, Error y Reposition. Dichos eventos le permiten omitir parte del comportamiento predeterminado del control Data.
Usar el Evento Validate
Utilice el evento Validate para comprobar los datos antes de guardar un registro en la base de datos. Este evento se produce justo antes de que Visual Basic escriba en la base de datos los cambios procedentes de los controles enlazados y de que vuelva a colocar el puntero del registro actual en otro registro de la base de datos. Puede utilizar el evento Validate para pedir al usuario que confirme los cambios realizados.
Private Sub Data1_Validate (index As Integer, action As Integer, save As Integer)
El argumento action indica la operación que provocó el evento Validate. El evento Validate se produce como resultado de realizar las operaciones siguientes:
Para cancelar cualquiera de estas acciones, asigne al argumento action el valor vbDataActionCancel.
El argumento save indica si va a guardarse o no el registro. Si save es True, los datos enlazados han cambiado. Para cancelar la acción de guardar puede asignar a save el valor False.
Usar el Evento Reposition
Utilice el evento Reposition para modificar la apariencia de un formulario o realizar una acción necesaria cuando se desplace a un nuevo registro.
Este evento tiene lugar cuando Visual Basic desplaza el puntero del registro actual a otro registro de la base de datos. También se produce la primera vez que se abre la base de datos.
Para cambiar la manera en que un formulario muestra información basándose en el registro seleccionado en ese momento hay que utilizar el evento Reposition. Por ejemplo, puede modificar el título del control Data de forma que se muestre el registro número n.
Para ver el número del registro actual, utilice la propiedad AbsolutePosition del objeto Recordset. El número de registro es relativo a cero, por lo que el primer registro es el 0.
Cuando un usuario se desplaza a un nuevo registro mediante el control Data, puede que los datos del formulario tengan que presentarse de una forma distinta en el caso del nuevo registro.
Por ejemplo, es posible que en un formulario que muestre registros de empleados haya distintas opciones dependiendo de si los empleados son fijos, temporales, si trabajan por horas o si son becarios. Cada registro mostrará la información sobre un empleado distinto, cuyas opciones pueden no ser las mismas para todos los registros. Para que se seleccione la opción correcta para cada registro, escriba código en el evento Reposition.
El código siguiente utiliza el evento Reposition para modificar la apariencia de un formulario:
Private Sub Data1_Reposition()
Data1.Caption=Data1.Recordset.AbsolutePosition
If Data1.Recordset("IdEmpleado") > 5 Then
optSenior.Value = True
Else
optJunior.Value = True
End If
Data1.Caption = "Registro " & _
Data1.Recordset.AbsolutePosition + 1
End Sub
Esta ilustración muestra el formulario basado en el código anterior.
Usar el Evento Error
El evento Error tiene lugar cuando un usuario interactúa con el control Data y se produce un error de acceso a datos. Utilice el evento Error para agregar tratamiento de errores personalizado al control Data.
Por ejemplo, si un usuario modifica un campo y después hace clic en el control Data para desplazarse al siguiente registro, el control Data actualizará el registro actual. Si se produce un error de acceso a datos durante la actualización, se producirá el evento Error.
Los valores de los campos enlazados no cambian tras producirse un error. El usuario puede corregir los valores y hacer clic en el control Data para tratar de actualizar nuevamente el registro.
Si no coloca código para tratar errores en el evento Error y se produce un error cuando un usuario interactúa con el control Data, Visual Basic muestra el mensaje de error y el programa continúa ejecutándose.
Si no desea que se muestre el mensaje de error estándar, puede asignar al argumento Response el valor 0.
5.3.4 Uso de Controles Enlazados a Datos ActiveX
Además de los controles enlazados intrínsecos, Visual Basic ofrece varios controles ActiveX enlazados a datos.
En esta sección se describen algunos controles ActiveX enlazados a datos avanzados.
Usar el Control DBGrid
El control de cuadrícula enlazada a datos (control DBGrid) permite que los usuarios de su aplicación de base de datos trabajen con varios registros a la vez.
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.
En la siguiente ilustración se muestra un formulario que utiliza un control DBGrid para presentar registros procedentes de la base de datos Neptuno.
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.
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.
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.
Usar el 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.
En la siguiente ilustración se muestran registros agrupados por Id. de pedido en la tabla Detalles de pedidos.
Usar el Control 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.
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.
La ilustración siguiente muestra un formulario que utiliza el control DBCombo para presentar nombres de categorías de la tabla Productos.
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.