En este documento se ofrece una introducción
a los objetos de datos ActiveX (ADO) de Microsoft y a los objetos de datos
ActiveX para Microsoft Windows CE (ADOCE), así como una explicación sobre
el uso de ADOCE y sobre los objetos Recordset y Field.
Introducción
Con los objetos de datos ActiveX (ActiveX Data Objects, ADO) de Microsoft,
las aplicaciones clientes pueden obtener acceso y manipular datos de un
servidor de base de datos a través de un proveedor de base de datos OLE.
Los objetos de datos ActiveX para Microsoft Windows CE (ADOCE) proporcionan
un subconjunto de ADO para Windows CE. Al habilitar el acceso a bases
de datos almacenadas de forma local en un dispositivo, ADOCE agrega nueva
funcionalidad de base de datos al sistema operativo Windows CE y proporciona
sincronización de datos a una base de datos de red.
Puede utilizar ADOCE con la versión 1.2 de su PC de bolsillo (H/PC) y
su PC de mano. En este artículo se proporciona una introducción a ADO
y ADOCE, se describen los objetos Recordset y Field, y se
explica la forma de utilizar ADOCE.
Introducción a ADO y ADOCE
ADO es la interfaz estratégica y de alto nivel de Microsoft para todos
los tipos de datos. Una aplicación que utilice ADO puede obtener acceso
y manipular datos de un servidor de base de datos a través de un proveedor
de base de datos OLE. Las principales ventajas de ADO son su facilidad
de uso, su gran velocidad, su escasa utilización de memoria y el poco
espacio que ocupa en disco. ADO proporciona un acceso a los datos constante
y de alto rendimiento para crear un cliente de base de datos para el usuario
o un objeto empresarial del nivel medio con una aplicación, una herramienta,
un lenguaje o incluso un explorador de Internet.
ADO es el componente central de la estrategia de Acceso a datos universal
de Microsoft. Acceso a datos universal proporciona un acceso de alto rendimiento
a diversos orígenes de información, tanto relacionales como no relacionales,
y una interfaz de programación fácil de utilizar que es independiente
de la herramienta y del lenguaje. Estas tecnologías permiten a las empresas
integrar orígenes de datos distintos, crear soluciones de fácil mantenimiento
y utilizar las herramientas, las aplicaciones y los servicios de plataforma
que prefieran.
ADOCE proporciona un subconjunto de ADO para el sistema operativo Windows
CE que incluye la implementación de los objetos Recordset y Field.
Al habilitar el acceso a bases de datos almacenadas de forma local en
un dispositivo, ADOCE agrega nueva funcionalidad de base de datos al sistema
operativo Windows CE y proporciona sincronización de datos a una base
de datos de red. ADOCE proporciona acceso al motor de base de datos de
Windows CE desde cualquier entorno preparado para COM, como el Kit de
herramientas de Windows CE para Microsoft Visual Basic® versión 6.0.
ADOCE proporciona las características siguientes:
- Sincronización automática en los dos sentidos con el host de escritorio.
- Nuevos tipos de datos: dobles y booleanos (en relación a la base de
datos de Windows CE).
- Compatibilidad con SQL. La avanzada compatibilidad con SQL incluida
en ADOCE es un subconjunto de SQL ANSI (American National Standards
Institute). Agrega nueva funcionalidad de motor de base de datos que
proporciona nombres de campos, varias claves de ordenación, filtrado
complejo, creación de tablas e índices, eliminación y edición, así como
capacidades de combinación entre varias tablas.
- Familiar acceso con el formato recordset.nombre de campo.
- Compatibilidad con ADO de escritorio.
Objetos Recordset y Field
El control ADOCE tiene dos objetos: Recordset y Field.
Un recordset es una tabla de base de datos virtual cuyos campos y filas
corresponden a un subconjunto de los campos y las filas de una tabla de
base de datos real en el dispositivo basado en Windows CE. Cuando se agrega,
elimina o modifica información en una fila del recordset, puede transferir
dichos cambios a las partes correspondientes de la tabla.
Si se modifican los datos del recordset, éste almacena los cambios en
memoria, lo que permite cancelarlos antes de actualizar la base de datos
subyacente. ADOCE no admite actualizaciones por lotes. Sólo una fila cada
vez puede tener datos modificados pero no enviados a la base de datos
subyacente.
En la tabla siguiente se muestran los métodos que admite el objeto Recordset.
| Método |
Descripción |
| AddNew |
Inserta una nueva fila
en el recordset. |
| CancelUpdate |
Cancela los cambios almacenados
en memoria. |
| Clone |
Duplica un recordset. |
| Close |
Cierra un recordset. |
| Delete |
Elimina una fila del recordset. |
| GetRows |
Devuelve los datos almacenados
en el recordset. |
| Move |
Cambia el puntero a la
fila activa del recordset. |
| MoveFirst |
Activa la primera fila. |
| MoveLast |
Activa la última fila. |
| MoveNext |
Mueve el puntero de fila
activa a la siguiente fila. |
| MovePrevious |
Mueve el puntero de fila
activa a la fila anterior. |
| Open |
Define y abre recordsets;
ejecuta comandos SQL. |
| Supports |
Determina si el recordset
admite determinadas características. |
| Update |
Envía los cambios almacenados
en memoria y actualiza la tabla real. |
En la tabla siguiente se muestran las propiedades que admite el objeto
Recordset.
| Propiedad |
Descripción |
| AbsolutePage |
Especifica a qué página
se debe pasar para el nuevo registro activo. |
| AbsolutePosition |
Especifica la posición
ordinal del registro activo de un objeto Recordset. |
| ActiveConnection |
Establece la conexión
de base de datos activa. Siempre es una cadena de longitud cero ("").
Para un equipo H/PC que ejecute el software Pro Edition, es el nombre
del archivo cdb. |
| BOF |
Indica si la posición
del registro activo está antes del primer registro de un objeto Recordset. |
| Bookmark |
Especifica un marcador
para identificar de forma única un registro de un objeto Recordset. |
| CacheSize |
Especifica el número de
registros de un objeto Recordset que se almacenan localmente
en memoria caché. |
| CursorType |
Indica el tipo de cursor
utilizado en un objeto Recordset. |
| EditMode |
Indica el estado de la
edición del objeto activo. |
| EOF |
Indica que la posición
del registro activo está después del último registro de un objeto
Recordset. |
| LockType |
Indica los tipos de bloqueos
colocados en los registros durante la edición. |
| PageCount |
Indica cuántas páginas
de datos contiene el objeto Recordset. |
| PageSize |
Indica cuántos registros
componen una página del recordset. |
| RecordCount |
Devuelve un valor de tipo
Long que indica el número actual de registros en un objeto Recordset. |
| Source |
Indica el origen de los
datos de un objeto Recordset: instrucción SQL o nombre de tabla. |
Los objetos Field no se deben crear directamente, ya que sólo
existen en el contexto de un recordset existente. Utilice la función Set
para hacer referencia a un objeto Field determinado. El objeto
Field no tiene métodos ni eventos. A excepción de la propiedad
Value, todas las propiedades son de sólo lectura.
En la tabla siguiente se muestran las propiedades que admite el objeto
Field.
| Propiedad |
Descripción |
| ActualSize |
Indica la longitud real,
en bytes, del valor de un campo. |
| Attributes |
Devuelve un valor que
indica una o más características de un objeto Field. |
| DefinedSize |
Se utiliza para determinar
la capacidad de datos de un objeto Field. Devuelve el tamaño
definido, en caracteres, del campo Compare with ActualSize, el cual
devuelve el tamaño en bytes. |
| Name |
Devuelve el nombre de
un campo. |
| Type |
Indica el tipo de datos
de un objeto Field. |
| UnderlyingValue |
Indica el valor actual
de un objeto Field en la base de datos. |
| Value (predeterminado) |
Indica el valor actual
de un objeto Field en el recordset. |
La colección Fields contiene un objeto Field por cada columna
del recordset. Puede hacer referencia a un campo determinado por nombre
o por índice. La colección Fields admite la propiedad Count,
la cual indica el número de campos de un recordset.
Uso de ADOCE
Con ADOCE, puede mover bases de datos al dispositivo basado en Windows
CE y desde él. Asimismo, puede crear y obtener acceso a bases de datos
del dispositivo y de un emulador en un equipo de escritorio. En las secciones
siguientes se describe la forma de utilizar ADOCE y se muestran ejemplos.
Tenga en cuenta que el archivo ControlConsts.bas se instala en \Archivos
de programa\Microsoft Visual Studio\VB98\VBCE\Samples. Este archivo contiene
las definiciones de las enumeraciones de ADOCE y de otros controles.
Software necesario
Para utilizar el control ADOCE, es necesario el software siguiente:
- Servicios para Microsoft Windows CE versión 2.1 o posterior
- Microsoft Windows NT® Workstation versión 4.0, o bien Windows 95 o
98
- Plataforma SDK de Microsoft Windows CE para el dispositivo que utilice
- Microsoft Visual Basic, Edición profesional versión 6.0, sistema de
desarrollo o Microsoft Visual Basic, Edición empresarial versión 6.0
- Kit de herramientas de Microsoft Windows CE para Visual Basic versión
6.0
Nota El control ADOCE se incluye
en el Kit de herramientas de Windows CE para Visual Basic.
Movimiento de bases de datos entre el escritorio y el dispositivo
Puede mover tablas de base de datos entre un equipo de escritorio y un
dispositivo basado en Windows CE. Las bases de datos almacenadas en el
equipo de escritorio tienen el formato de Microsoft Access®. Las bases
de datos almacenadas en el dispositivo se guardan con formato estándar
de tablas basadas en Windows CE, con información adicional en las tablas
de sistema ADOCE.
Para copiar una base de datos del equipo de escritorio
en el dispositivo
- Conecte el dispositivo al equipo de escritorio y abra la ventana Dispositivos
móviles.
- En la ventana Dispositivos móviles, seleccione Importar tablas
de base de datos en el menú Herramientas. Aparece el cuadro
de diálogo Abrir.
- Seleccione el archivo .mdb de Access que contiene las tablas que desea
importar. Aparece el cuadro de diálogo Importar de base de datos
a dispositivo móvil con una lista de las tablas y los campos de
la base de datos.
- Active las casillas de verificación de las tablas y los campos que
desea importar y desactive las casillas de los que no desea importar.
- Active la casilla Sólo lectura para las tablas que desee convertir
en sólo lectura.
- Si desea reemplazar tablas del dispositivo cuyo nombre coincide con
el de otras tablas del archivo .mdb, active la casilla de verificación
Sobrescribir tablas existentes y/o datos.
- Seleccione Aceptar para comenzar la conversión.
Para copiar una base de datos del dispositivo en el
equipo de escritorio
- Conecte el dispositivo al equipo de escritorio y abra la ventana Dispositivos
móviles.
- En la ventana Dispositivos móviles, seleccione Exportar tablas
de base de datos en el menú Herramientas. Aparece el cuadro
de diálogo Exportar de dispositivo móvil a base de datos, el
cual muestra las tablas ADOCE del dispositivo conectado.
- Haga clic en el botón Examinar para seleccionar un archivo
.mdb de Access. También puede escribir la ruta de acceso y el nombre
de archivo en el cuadro Ubicación. Si el archivo no existe, ADOCE
lo creará.
- Active las casillas de verificación de las tablas que desea exportar
y desactive las casillas de las que no desea exportar. ADOCE coloca
todas las tablas seleccionadas en el mismo archivo .mdb.
- Si desea reemplazar tablas del archivo .mdb cuyo nombre coincide con
el de las tablas ADOCE seleccionadas, active la casilla de verificación
Sobrescribir tablas existentes y/o datos.
- Seleccione Aceptar para comenzar la conversión.
Para obtener control mediante programación de la conversión de los archivos
.mdb a tablas ADOCE y de tablas ADOCE a archivos .mdb, puede utilizar
las funciones DesktopToDevice y DeviceToDesktop, respectivamente.
El funcionamiento de estas funciones es similar al de los cuadros de diálogo
Importar de base de datos a dispositivo móvil y Exportar de
dispositivo móvil a base de datos, a excepción de que no aparecen
los cuadros de diálogo con opciones para el usuario. Sí aparecen todas
las barras de progreso con el estado de la transferencia. Si se devuelve
un error, el archivo de registro no se muestra automáticamente. En su
lugar, la función devuelve un valor de error, HRESULT, y la aplicación
que efectúa la llamada puede realizar las acciones oportunas.
Con la función DesktopToDevice, puede especificar los campos que
se van a convertir. No obstante, con la función DeviceToDesktop,
todos los campos de la tabla se convierten de forma predeterminada.
El código de ejemplo siguiente muestra una sencilla aplicación de Visual
Basic que copia un subconjunto de la base de datos Northwind incluida
con Visual Basic en el dispositivo, sin sincronización, aunque se sobrescriben
las tablas de Northwind existentes. La tabla Empleados se envía
como una tabla de sólo lectura, mientras que la tabla Productos
se puede actualizar.
Declare Function DesktopToDevice Lib
"c:\archivos de programa\windows ce services\adofiltr.dll" _
(ByVal desktoplocn As String, _
ByVal tablelist As String, _
ByVal sync As Boolean, _
ByVal overwrite As Integer, _
ByVal devicelocn As String) As Long
result = DesktopToDevice ("c:\mydbs\nwind.mdb", _
"!Employees..Products.ID.Name.Quantity..", False, True, "")
If result <> 0 Then MsgBox "An error occurred transferring the data"
Creación de tablas
Antes de obtener acceso a los datos con el control ADOCE, debe disponer
de una tabla en la que almacenarlos. El código de ejemplo siguiente muestra
la forma de crear una nueva tabla ADOCE en el directorio Databases de
un equipo H/PC que ejecuta el software Pro Edition.
Dim rs
Set rs = CreateObject("adoce.recordset")
rs.Open "create table mytable (firstfield text, secondfield integer)"
Set rs = Nothing
Puesto que las instrucciones SQL que cambian la estructura de una tabla
dejan el recordset cerrado, no podrá escribir ni leer los datos hasta
que se vuelva a abrir el recordset.
Ordenación de tablas
Puede ordenar una base de datos con la instrucción Order By con
o sin índices. No obstante, ordenar una base de datos sin un índice suele
resultar más lento que hacerlo con un índice. El código de ejemplo siguiente
muestra la forma de ordenar una base de datos sin un índice. Requiere
un cuadro de lista (ListBox) llamado List1.
Dim rs
Set rs = CreateObject("ADOCE.RecordSet")
rs.open "select * from mytable order by firstfield desc", "",
adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
Do While Not rs.EOF
List1.Additem rs.Fields("firstfield").Value
rs.MoveNext
Loop
End If
rs.Close
set rs = Nothing
El código de ejemplo siguiente muestra la forma de crear un índice utilizado
para acelerar la ordenación en una base de datos. Requiere un cuadro de
lista (ListBox) llamado List1.
Dim rs
Set rs = CreateObject("ADOCE.RecordSet")
rs.open "create index i1 on mytable (firstfield desc)"
rs.open "select * from mytable order by firstfield desc", "",
adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
Do While Not rs.EOF
List1.Additem rs.Fields("firstfield").Value
rs.MoveNext
Loop
End If
rs.Close
set rs = Nothing
Almacenamiento y recuperación de información
Para agregar, quitar o modificar la información de una base de datos,
debe cambiar los tipos CursorType y LockType predeterminados
al abrir el recordset. El código de ejemplo siguiente muestra la forma
de almacenar la información en una base de datos:
Dim rs
Set rs = CreateObject("ADOCE.RecordSet")
rs.open "mytable", "", adOpenKeyset, adLockOptimistic
rs. Addnew
rs.fields("firstfield") = "ActiveX Data Objects"
rs.fields("secondfield") = 1.8
rs.Update
rs.Close
Set rs = Nothing
Si se utiliza el método AddNew con parámetros, no es necesario
utilizar el método Update, puesto que los cambios se realizan en
la base de datos de forma automática. El código de ejemplo siguiente muestra
la forma de utilizar AddNew:
rs.Addnew "firstfield", "Windows CE"
Para cambiar un registro, en lugar de agregar uno, realice los cambios
necesarios en los campos y, a continuación, utilice el método Update.
Si utiliza Update con parámetros, los cambios se realizan en la
base de datos automáticamente. El código de ejemplo siguiente muestra
la forma de utilizar el método Update:
rs.Update "firstfield", "ADOCE"
Después de almacenar los datos en la base de datos con AddNew
y Update, puede utilizar la propiedad Value para obtener
información almacenada en un campo. El código de ejemplo siguiente muestra
la forma de recuperar información de una base de datos ADOCE. Requiere
un cuadro de lista (ListBox) llamado List1.
Dim rs
Set rs = CreateObject("ADOCE.RecordSet")
rs.open "mytable", "", adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
Do While Not rs.EOF
List1.Additem rs.Fields("firstfield").Value
rs.MoveNext
Loop
End If
rs.Close
set rs = Nothing
Distribución de aplicaciones ADOCE
Los componentes de una aplicación ADOCE se deben instalar tanto en el
equipo de escritorio como en el dispositivo. Una forma de distribuir aplicaciones
ADOCE consiste en realizar cambios en el programa de instalación de ejemplo
incluido con el Kit de herramientas de Microsoft Windows CE para Visual
Basic 6.0. Todas las aplicaciones Setup de ADOCE deben verificar que están
instalados los Servicios para Windows CE 2.1 o posterior y agregar referencias
a los archivos .cab de ADOCE a los archivos .ini del Administrador de
aplicaciones (AppMgr).
Uso de un equipo H/PC que ejecuta el software Pro Edition
En esta sección se describen procedimientos adicionales que se pueden
realizar en un equipo H/PC que ejecute Microsoft Windows CE, PC de bolsillo
Edición profesional, versión 3.0.
Creación de bases de datos
El código de ejemplo siguiente muestra la forma de crear una base de
datos externa en un equipo H/PC que ejecuta el software Pro Edition:
Dim rs
Set rs = CreateObject("adoce.recordset")
rs.Open "create database '\mydatabase.cdb'"
Set rs = Nothing
Recuperación de información de un archivo .cdb
Si creó una base de datos en un equipo H/PC que ejecuta el software Pro
Edition, puede especificar la ruta de acceso a la base de datos en el
parámetro de conexión para obtener acceso a los datos. Todas las operaciones
que se pueden realizar con una cadena de conexión vacía ("")
se pueden realizar también en un archivo .cdb con sólo cambiar la cadena
de conexión. El código de ejemplo siguiente muestra la forma de recuperar
información de un archivo .cdb:
Dim rs
Set rs = CreateObject("ADOCE.RecordSet")
rs.open "mytable", "\mydatabase.cdb", adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
Do While Not rs.EOF
List1.AddItem rs.Fields("firstfield").Value
rs.MoveNext
Loop
End If
rs.Close
set rs = Nothing
Resumen
ADOCE es un modelo de acceso a datos en el nivel de la aplicación que
se puede utilizar con los kits de herramientas de Windows CE para Visual
Basic. Al habilitar el acceso a las bases de datos almacenadas de forma
local en un dispositivo, ADOCE agrega nueva funcionalidad de base de datos
a Windows CE y proporciona duplicación y sincronización de datos a una
base de datos de red.
La velocidad y facilidad de uso de ADOCE, junto con su escasa utilización
de memoria y el poco espacio que ocupa en disco, hacen que sea ideal para
utilizarlo con el compacto, potente y rápido sistema operativo Windows
CE.
|