Buscar en este blog

Nuevo motor ACE de Access 2007 y 2010


 

Resumen:  Aprenda a desarrollar códigos de acceso a datos nativos (C, C++, Java, VBA) o administrados (C#, Visual Basic.NET) con Microsoft Office Access 2007 o Microsoft Access 2010. Obtenga información sobre la arquitectura de Access, los proveedores de datos y el motor ACE, las plataformas de 32 bits y 64 bits, y los aspectos que debe considerar al elegir una tecnología de acceso a datos óptima para su proyecto de base de datos nuevo o heredado.







  • Introducción
              
  • Arquitectura del motor de Microsoft Access
              
  • Información general acerca de las tecnologías de acceso a datos
              
  • Datos de rendimiento
              
  • Uso de proveedores ACE de 32 bits y 64 bits
             
  • Consideraciones a la hora de elegir la tecnología de acceso a datos
              
  • Métodos de acceso a datos en desuso
             
  • Conclusión

Introducción

Este artículo técnico explora los diversos puntos de programación de acceso de datos de Access 2007 y Access 2010. Analiza el motor de Access, que se conoce como el motor de base de datos Microsoft Access (motor ACE). Si trabaja como programador de bases de datos y desea obtener más información acerca de las opciones disponibles al desarrollar una solución de acceso a datos para bases de datos de Access, este artículo le interesa. En él, no se pretende dar información detallada de todas las interfaces de acceso a datos que se mencionan. En su lugar, la intención es proporcionar información general acerca de la arquitectura del motor ACE para que pueda comprender mejor el modelo de programación integrado que se ejecuta en él. El presente código de ejemplo está escrito en lenguaje nativo (C, C++, Java y VBA) y en lenguaje de .NET Framework (C# y Visual Basic.NET), y pretende ayudarle a comenzar a trabajar rápidamente, incluso si nunca ha programado en alguno de estos lenguajes.

Este artículo técnico contiene respuestas a preguntas como las siguientes:

  • ¿Funcionará mi aplicación heredada de 32 bits con el software de Access de 64 bits?
  • Por lo general, ¿cuál es la forma más rápida de trabajar mediante programación con las bases de datos de Access?
  • ¿Hay alguna forma de conectarse al motor ACE mediante el lenguaje de programación C (ANSI/ISO C) o incluso Java?
  • ¿Puedo utilizar el código de objetos de acceso a datos (DAO) heredado de Microsoft Foundation Classes (MFC) con bases de datos .accdb? 


Este artículo técnico presenta nueve programas completos que se crearon con Microsoft Visual Studio 2008 y están disponibles para su descarga.

Cada uno de los ejemplos de código realiza el mismo algoritmo de acceso a datos con diferentes lenguajes de programación y diversas tecnologías de acceso a datos, como DAO, OLE DB, ADO.NET, ADO, ODBC o JDBC. El resultado de la consola de cada programa es casi idéntico. Los ejemplos muestran la funcionalidad principal de programación de acceso a datos, como la creación de una cadena de conexión con una contraseña segura para descifrar una base de datos, la conexión a una base de datos cifrada, la creación y ejecución de una consulta SQL, el trabajo con un esquema y un conjunto de registros, y la recuperación de datos ordenados.

Dado que el motor de Access no forma parte del sistema operativo Windows, debe instalar el motor ACE y sus proveedores en el equipo local. Para obtener más información, consulte ¿Dónde puedo obtener el motor ACE?

Este artículo técnico presenta también los Datos de rendimiento para todos los proveedores de datos incluidos en los ejemplos de código.

A quién está dirigido este artículo técnico

El tema de las tecnologías de acceso a datos es grande y dado que esta guía está dirigida a una amplia audiencia de programadores, cualquier programador que trabaje con datos de Access en la lógica empresarial o a nivel de las aplicaciones puede aprovechar este material. Sin embargo, este artículo técnico también se redacta con la idea de abordar a trabajadores de TI, estudiantes o entusiastas que puedan estar más interesados en la programación de bases de datos.
Se supone que está familiarizado con el entorno de Visual Studio, los conceptos básicos de programación (estructural y de .NET Framework), y el concepto de bases de datos relacionales y SQL. También se supone que está familiarizado con la creación de tablas y consultas con cualquier versión anterior de Microsoft Access.

Ff965871.note(es-es,office.14).gifNota:

Cuando en este documento se hace referencia a Access y no a una versión específica de Microsoft Access (como Microsoft Access 2003), se supone que la información se aplica a Microsoft Office Access 2007 y Microsoft Access 2010.

Arquitectura del motor de Microsoft Access


La Figura 1 muestra cómo Access (interfaz de usuario) y ACE (motor) forman un sistema de administración de base de datos (DBMS) completo.


Figura 1. Vista conceptual de Access 2010

Diagrama conceptual general de Access 2010
La interfaz de usuario de Access es responsable de la interfaz de usuario y de todas las formas en que los usuarios ven, modifican y utilizan datos a través de formularios, informes, consultas, macros, asistentes, etc. Por otro lado, el motor de Microsoft Access (motor ACE) ofrece servicios principales de administración de bases de datos como:
  • Almacenamiento de datos: almacene datos en el sistema de archivos.
  • Definición de datos: cree, edite o elimine estructuras para almacenar datos como tablas y campos.
  • Integridad de datos: imponga reglas relacionales que eviten que se dañen los datos.
  • Manipulación de datos: agregue, edite, elimine u ordene datos.
  • Recuperación de datos: recupere datos del sistema mediante SQL.
  • Cifrado de datos: proteja los datos contra el uso no autorizado.
  • Uso compartido de datos: comparta datos en un entorno multiusuario de red.
  • Publicación de datos: trabaje en un entorno web cliente o servidor.
  • Importación, exportación y vinculación de datos: trabaje con datos de diferentes orígenes.

Desde la perspectiva de acceso a datos, puede ver a Access como la forma en que el motor ACE se expone gráficamente a los usuarios.


¿Dónde puedo obtener el motor ACE?


Para ejecutar los ejemplos de código ofrecidos en este artículo técnico, debe tener el motor ACE en el equipo, lo que significa que debe instalar uno de los siguientes productos Access 2010 (u Office Access 2007):
Ff965871.note(es-es,office.14).gifNota:

Los controladores del motor de base de datos 2007 y 2010 de Microsoft Access se publicaron para permitir que los programadores de soluciones crearan herramientas para escribir y leer archivos de Office como .accdb, .xlsx y .xlsb. Permite que un generador de soluciones tenga un servidor (como SQL) para leer y escribir formatos de archivo de Office sin tener que instalar Office en el servidor. Sin embargo, este controlador no tiene licencia para su uso como un almacén de datos independiente.

¿Qué sucede con el motor JET de Microsoft?

Antes del lanzamiento de Access 2007, Access usaba un motor de tecnología de motores conjuntos (JET) de Microsoft. Aunque por lo general JET se ha visto como parte de Access, el motor JET era un producto independiente. Desde el lanzamiento de Microsoft Windows 2000, JET se incluyó como parte del sistema operativo Windows y, a continuación, se distribuyó y actualizó con los componentes de acceso a datos de Microsoft (DAC). Sin embargo, después del lanzamiento de Access 2007, el motor JET quedó en desuso y ya no se distribuye con MDAC. En su lugar, Access usa ahora un motor ACE integrado y mejorado que se desarrolló tomando una instantánea del código de la base de códigos original de JET.
El motor ACE es totalmente compatible con versiones anteriores del motor JET, de forma que lee y escribe archivos (.mdb) de versiones anteriores de Access. Dado que el motor es ahora propiedad de Access, los programadores pueden estar seguros de que las soluciones de Access funcionarán en el futuro y, además, serán más rápidas y sólidas, y tendrán infinidad de características. Por ejemplo, después del lanzamiento de Access 2010, entre otras mejoras, se actualizó el motor ACE para admitir la versión de 64 bits y mejorar la integración con las tecnologías relacionadas de SharePoint y los servicios web. Microsoft se ha comprometido con Access como plataforma de programación.

Información general acerca de las tecnologías de acceso a datos

Microsoft ofrece varias maneras de trabajar con bases de datos de Access. Las siguientes capas de acceso a datos y API de acceso a datos se usan para la programación de Access:
  • Objetos de acceso a datos (DAO)
  • Base de datos, vinculación e incrustación de objetos (OLE DB)
  • ADO.NET
  • Objetos de datos de ActiveX (ADO)
  • Conectividad abierta de bases de datos (ODBC)

El motor ACE implementa proveedores para las tres tecnologías mencionadas anteriormente: DAO, OLE DB y ODBC. El proveedor de DAO de ACE, el proveedor de OLE DB de ACE y el proveedor de ODBC de ACE se distribuyen con productos de Access (excepto ADO que aún forma parte de DAC de Microsoft Windows). Muchos otros proveedores, marcos de trabajo a nivel del sistema e interfaces de programación de acceso a datos que incluyen ADO y ADO.NET se basan en los tres proveedores ACE. La Figura 2 muestra un diagrama que representa una visión general de los componentes de Access.



Figura 2. Arquitectura del motor ACE en el entorno de programación de acceso a datos

Diagrama de arquitectura de ACE
Este artículo técnico documenta los métodos de acceso a datos que se detallan en la siguiente tabla.
Tabla 1. Métodos de acceso a datos

 


Nombre del proveedor

Método de acceso a datos

Información de conexión

Lenguajes admitidos

DAO de ACE

Ejemplo de DAO directo

Acedao.tlh (generado desde acedao.dll);
acedao.dll

C++


Ejemplo de DAO de VBA

Establezca la base de datos = CurrentDb()
Se ejecuta en el entorno de VBE

VBA

OLE DB de ACE

Ejemplo de OLE DB de ATL

Microsoft.ACE.OLEDB.12.0
<Atldbcli.h> y <Atldbsch.h>; Aceoledb.dll

C++

ADO.NET

Ejemplo de ADO.NET en C#

Microsoft.ACE.OLEDB.12.0
mediante System.Data.OleDb;

C#


Ejemplo de ADO.NET en Visual Basic.NET

Ejemplo de ADO.NET en Visual Basic.NET

Microsoft.ACE.OLEDB.12.0
Importa System.Data.OleDb
Importa System.Console

Visual Basic.NET

ADO

Ejemplo de ADO

Msado15.tlh (generado desde Msado15.dll);
Instalado con MDAC 2.8 o Windows DAC 6.0.

C++

ODBC de ACE

Ejemplo de ODBC directo

Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=path to mdb/accdb file
<Sqlext.h>;
Aceodbc.dll;

C/C++


Ejemplo de ODBC de MFC

Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=path of mdb/accdb file
<Afxdb.h>;
Aceodbc.dll;

C++


Ejemplo de JDBC-ODBC

jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ= path of mdb/accdb file

Java
Para obtener más información y una lista de métodos de acceso a datos que están en desuso con Access 2007, consulte Métodos de acceso a datos en desuso.


DAO



Inicialmente, DAO era el método de acceso a datos exclusivo para los programadores de Access.


Ejemplo de DAO directo

Este método de acceso proporciona el mejor soporte para las nuevas características que se introducen con Access 2007 dado que expone la mayor parte de la funcionalidad del motor ACE. DAO directo usa acedao.dll. Para compilar este código, use la macro #import para generar el encabezado .tlh mediante la especificación de la directiva similar a la que se muestra en el siguiente ejemplo de código.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.
 
Según se compile el código en un sistema operativo de 32 bits o 64 bits, es posible que desee actualizar esta ruta para quitar el elemento “(x86)”. Una forma de comprobar esto es controlando si hay una clave del Registro denominada Ruta de tipo REG_SZ en alguna de las siguientes rutas del Registro:
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\InstallRoot


  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\InstallRoot


Dado que se conecta directamente al motor, sólo se necesita la ubicación de la base de datos para la información de conexión.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.
 
En el siguiente ejemplo de código se obtienen el esquema y los datos.
Ff965871.note(es-es,office.14).gifNota:

Para obtener acceso a las aplicaciones de ejemplo completas, descargue el código de ejemplo.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.
El siguiente ejemplo muestra los resultados del programa.

Direct DAO: Successfully connected to database. Data source name:
  C:\Northwind.accdb
Direct DAO: SQL query:
  SELECT Customers.[Company], Customers.[First Name] FROM Customers ORDER BY Customers.[Company] ASC;
Direct DAO: Retrieve schema info for the given result set:
 | Company | First Name
Direct DAO: Fetch the actual data:
 | Company A | Anna
 | Company AA | Karen
 | Company B | Antonio
 | Company BB | Amritansh
 | Company C | Thomas
 | Company CC | Soo Jung
 | Company D | Christina
 | Company E | Martin
 | Company F | Francisco
 | Company G | Ming-Yang
 | Company H | Elizabeth
 | Company I | Sven
 | Company J | Roland
 | Company K | Peter
 | Company L | John
 | Company M | Andre
 | Company N | Carlos
 | Company O | Helena
 | Company P | Daniel
 | Company Q | Jean Philippe
 | Company R | Catherine
 | Company S | Alexander
 | Company T | George
 | Company U | Bernard
 | Company V | Luciana
 | Company W | Michael
 | Company X | Jonas
 | Company Y | John
 | Company Z | Run
Direct DAO: Total Row Count: 29
Direct DAO: Cleanup. Done.


Ejemplo de DAO de VBA

El siguiente ejemplo de código se ejecuta en el entorno VBA/VBE de Access, en una base de datos actual.

Public Sub VBADAO()
    Dim DAM As String
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim query As String
        
    DAM = "VBA DAO"

    ' Open pointer to current database
    Set db = CurrentDb()
   
    Debug.Print DAM & ": Successfully connected to database. Data source name: " & _
        vbNewLine & "  " & db.Name
    
    ' Prepare SQL query
    query = "SELECT Customers.[Company], Customers.[First Name] " & _
        "FROM Customers " & _
        "ORDER BY Customers.[Company] ASC"
        
    Debug.Print DAM & ": SQL Query: " & _
        vbNewLine & "  " & query

    ' Run the query and create a record set
    Set rst = db.OpenRecordset(query)
    
    Debug.Print DAM & ": Retrieve schema info for the given result set: "
    For i = 0 To rst.Fields.Count - 1
        Debug.Print " | " & rst.Fields(i).Name
    Next i
        
    Debug.Print DAM & ": Fetch the actual data: "
    Do While Not rst.EOF
        Debug.Print " | " & rst![Company] & " | " & rst![First Name]
        rst.MoveNext
    Loop
    
    Debug.Print DAM & ": Total Row Count: " & rst.RecordCount
    Debug.Print DAM & ": Cleanup. Done. "

    rst.Close
    db.Close
End Sub

OLE DB


OLE DB es la interfaz de programación a nivel del sistema de Microsoft para el acceso a datos. Es una especificación en lugar de un conjunto de componentes o archivos. Es la tecnología subyacente de ADO y un origen de datos de ADO.NET. OLE DB especifica un conjunto de interfaces COM que encapsulan varios servicios del sistema de administración de bases de datos para dar servicio a los consumidores. OLE DB es un estándar abierto para obtener acceso a todos los tipos de datos, incluidas las bases de datos de Access. Es compatible con los requisitos de desarrollo que incluyen la creación de clientes de bases de datos front-end y objetos empresariales de nivel intermedio mediante conexiones activas con datos en bases de datos relacionales y otros almacenes.

Ejemplo de OLE DB de ATL


Este ejemplo usa Active Template Library (ATL) al incluir <Atldbcli.h> y <Atldbsch.h>. La información de conexión usa el proveedor de datos de Microsoft.ACE.OLEDB.12.0 implementado en Aceoledb.dll.

ADO.NET

ADO.NET proporciona acceso completo y uniforme a datos de diversos orígenes en el entorno de .NET (administrado). ADO.NET utiliza proveedores administrados de .NET que, a su vez, utilizan las API subyacentes, como OLE DB y ODBC. Este artículo técnico presenta dos ejemplos ADO.NET (C# y Visual Basic.NET), que utilizan la base de datos subyacente de OLE DB como capa de acceso a datos.


Ejemplo de ADO.NET en C#


El siguiente es un ejemplo de código de ADO.NET en C#.

// Connection string for ADO.NET via OleDB
OleDbConnection cn = 
    new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Northwind.accdb;Jet OLEDB:Database Password=1L0v3Acce55;");

// Prepare SQL query
string query = "SELECT Customers.[Company], Customers.[First Name] FROM Customers ORDER BY Customers.[Company] ASC;";
OleDbCommand cmd = new OleDbCommand(query, cn);

try
{
    cn.Open();
    Console.WriteLine("{0}: Successfully connected to database. Data source name:\n {1}", 
        DAM, cn.DataSource);
    Console.WriteLine("{0}: SQL query:\n {1}", DAM, query);

    // Run the query and create a record set
    OleDbDataReader dr = cmd.ExecuteReader();
    Console.WriteLine("{0}: Retrieve schema info for the given result set:", DAM);
    for (int column = 0; column < dr.FieldCount; column++)
    {
        Console.Write(" | {0}", dr.GetName(column));
    }
    Console.WriteLine("\n{0}: Fetch the actual data: ", DAM);
    int row = 0;
    while (dr.Read())
    {
        Console.WriteLine(" | {0} | {1} ", dr.GetValue(0), dr.GetValue(1));
        row++;
    }
    Console.WriteLine("{0}: Total Row Count: {1}", DAM, row);
    dr.Close();
}
catch (OleDbException ex)
{
    Console.WriteLine("{0}: OleDbException: Unable to connect or retrieve data from data source: {1}.",
        DAM, ex.ToString());
}
catch (Exception ex)
{
    Console.WriteLine("{0}: Exception: Unable to connect or retrieve data from data source: {1}.",
        DAM, ex.ToString());
}
finally
{
    cn.Close();
    Console.WriteLine("{0}: Cleanup. Done.", DAM);
}


Ejemplo de ADO.NET en Visual Basic.NET

El siguiente es un ejemplo de código de ADO.NET en Visual Basic.NET.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.


ADO


Los objetos de datos de ActiveX (ADO) ofrecen una interfaz a nivel de las aplicaciones basada en COM para los proveedores de datos de OLE DB. Aunque reduce el rendimiento en comparación con la codificación directa a OLE DB, ADO es fácil de aprender y utilizar. ADO ofrece a los programadores de C++ acceso a las interfaces subyacentes de OLE DB. La mayoría de los programadores no suelen estar interesados en un nivel bajo de control, como la administración de recursos de memoria y la adición manual de componentes que OLE DB proporciona a través del proceso de acceso a datos.
A diferencia de DAO, que presenta la funcionalidad de un solo motor de base de datos, ADO utiliza un modelo de programación común para obtener acceso a datos de todo el mundo.



Ejemplo de ADO


ADO utiliza la biblioteca de Msado15.dll, que se incluye con MDAC 2.8 o posterior. Para compilar este código, debe utilizar la macro #import para generar el encabezado .tlh mediante la especificación de la directiva similar a la que se muestra en el siguiente ejemplo de código.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.
Para obtener información de conexión, utilice el proveedor de datos de Microsoft.ACE.OLEDB.12.0 implementado en Aceoledb.dll.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.
En el siguiente ejemplo de código se obtienen el esquema y los datos.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.

ODBC


La conectividad abierta de bases de datos (ODBC) es la más antigua de las tecnologías de acceso a datos actuales en Microsoft y fue diseñada para permitirle crear una base de códigos común que ofrezca acceso a varios almacenes de datos relacionales. Sus métodos se exponen en una API de tipo C, tradicional, no orientada a objetos.


Ejemplo de ODBC directo


Se recomienda este método de acceso a datos sólo para el mantenimiento de las aplicaciones existentes o cuando trabaja con ANSI/ISO C. El siguiente ejemplo de código muestra la información de conexión de ODBC directo, que utiliza el controlador {Microsoft Access Driver (*.mdb, *.accdb)} implementado en la biblioteca de Aceodbc.dll al incluir <Sqlext.h>.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.
En el siguiente ejemplo de código se obtienen el esquema y los datos.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.


Ejemplo de ODBC de MFC



El siguiente ejemplo de código muestra la información de conexión de ODBC de MFC, que utiliza el controlador {Microsoft Access Driver (*.mdb, *.accdb)} implementado en la biblioteca de Aceodbc.dll mediante al incluir <Afxdb.h>.

Este idioma no es compatible o no hay ningún ejemplo de código disponible.
En el siguiente ejemplo de código se obtienen el esquema y los datos.


Ejemplo de JDBC-ODBC


JDBC es una capa de acceso a datos que permite que Java interactúe con el origen de datos subyacente. El puente JDBC-ODBC es una implementación de controlador de base de datos que se basa en el controlador ODBC para conectarse a la base de datos de Access. El controlador convierte las llamadas a métodos JDBC en llamadas a funciones ODBC.

private static String strConnect =
"jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\\Northwind.accdb;PWD=1L0v3Acce55;";
En el siguiente ejemplo de código de Java se obtienen el esquema y los datos.

try {
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   Connection con = DriverManager.getConnection(strConnect, "",""); 
   if (null == con) {
   System.out.println(DAM + "Unable to connect to data source " + strConnect);
   return;
   }
   
   System.out.println(DAM + ": Successfully connected to database. Data source name:\n  " 
+ con.getMetaData().getURL());
  
   // Prepare SQL query.
   String query = "SELECT Customers.[Company], Customers.[First Name] FROM Customers ORDER BY Customers.[Company] ASC;";
   System.out.println(DAM + ": SQL query:\n " + query);
   
   // Run the query and create a record set
   Statement stmt = con.createStatement();
   stmt.execute(query); 
   ResultSet rs = stmt.getResultSet(); 
   if (rs != null) {
   System.out.println(DAM + ": Retrieve schema info for the given result set: ");
   ResultSetMetaData rsmd = rs.getMetaData();
   for (int i=1; i <= rsmd.getColumnCount(); i++) {
   System.out.print(" | " + rsmd.getColumnName(i));
   }
   
   System.out.println("\n" + DAM + ": Fetch the actual data: ");
   int rowCount = 0;
   while (rs.next()) {
   for (int i=1; i <= rsmd.getColumnCount(); i++) {
       System.out.print(" | " + rs.getString(i));
       }
   System.out.println("");
   rowCount++;
       }
   System.out.println(DAM + ": Total Row Count: " + rowCount);
   }
   stmt.close(); 
   con.close(); 
} catch (Exception err) {
   System.out.println(DAM + ": Exception: " + err.getMessage());
} finally {
   System.out.println(DAM + ": Cleanup. Done.");
}


Datos de rendimiento

Se generaron los resultados de rendimiento de Access 2010 de 64 bits en un sistema operativo de 64 bits que ejecuta Windows Server 2008 SP2 con una CPU AMD 64 Athlon X2 de doble procesador y núcleo 4600+ a 2,40 GHz y 8 GB de RAM. Los programas del banco de pruebas no produjeron resultados en la interfaz de usuario (UI) y no usaron las características nuevas o avanzadas en el motor ACE.
La Figura 3 muestra un gráfico que presenta los datos de rendimiento.



Figura 3. Mediciones de rendimiento (en segundos)

Mediciones de rendimiento
Ff965871.note(es-es,office.14).gifNota:

Todos los programas del banco de pruebas se ejecutan como aplicaciones de consola excepto el código DAO de VBA que se ejecutó desde el entorno VBA/VBE. Esto significa que el código VBA era el único programa que tenía un privilegio de ejecución en el mismo espacio de direcciones de MSAccess.exe. Esto provocó una reducción significativa de las operaciones de E/S del disco y de los errores de página, lo que mejoró el rendimiento global.


Uso de proveedores ACE de 32 bits y 64 bits



Los proveedores ACE (DAO de ACE, OLE DB de ACE u ODBC de ACE) para el producto Access 2007 sólo están disponibles en 32 bits. Los proveedores ACE para el producto Access 2010 están disponibles en ediciones de 32 bits y 64 bits.
Básicamente, ahora hay tres configuraciones posibles.


Solución sólo de 64 bits (Access de 64 bits, Windows de 64 bits)



Para implementar una solución de 64 bits debe hacer lo siguiente:
  1. Implemente Access 2010 de 64 bits en Windows de 64 bits


  2. Cree una aplicación de acceso a datos personalizados de 64 bits



Solución sólo de 32 bits (Access de 32 bits, Windows de 32 bits)



Si tiene una aplicación de 32 bits y desea que continúe ejecutándose sin cambios con Access 2010, debe instalar la versión de 32 bits de Access 2010.
Access 2010 de 32 bits funciona exactamente igual que Access 2007 de 32 bits y no se requiere ningún cambio para que el código VBA, los complementos COM o los controles ActiveX continúen funcionando.

Solución WOW64 (Access de 32 bits, Windows de 64 bits)



La tecnología de WOW64 permite la ejecución de aplicaciones de 32 bits en plataformas Windows de 64 bits. Es posible instalar Access 2010 de 32 bits en Windows de 64 bits. En ese caso, la aplicación de datos debe ser de 32 bits para poder ponerse en contacto con los proveedores ACE. Se trata de la instalación predeterminada en los sistemas operativos Windows de 64 bits, que permite la compatibilidad con aplicaciones de Office de 32 bits.
Si bien las aplicaciones de 32 bits se pueden ejecutar de forma transparente, no se admite la combinación de dos tipos de código dentro del mismo proceso. No se puede vincular una aplicación de 64 bits con una biblioteca del sistema (DLL) 32 bits y, de igual forma, no se puede vincular una aplicación de 32 bits con una biblioteca del sistema de 64 bits.
Ff965871.Important(es-es,office.14).gifImportante:

Si intenta ejecutar el código heredado de 32 bits con Access de 64 bits, obtendrá errores de tiempo de ejecución. Por ejemplo, el error “El proveedor 'Microsoft.ACE.OLEDB.12.0' no está registrado en el equipo local” podría deberse a una discrepancia de versiones entre la aplicación (código de 32 bits) y uno de los proveedores ACE de 64 bits que se instalaron con Microsoft Access de 64 bits. Para corregir este problema, actualice el código personalizado a la versión de 64 bits, o desinstale Access de 64 bits y reemplácela con Access de 32 bits.


Figura 4. Versiones coincidentes entre las aplicaciones y proveedores ACE

32 bits frente a 64 bits

Instalaciones en paralelo



No se admiten instalaciones en paralelo de ediciones de 64 bits y 32 bits de Office 2010. Esto incluye Access.

Otras consideraciones



Antes de implementar Access de 64 bits, determine si se trata de una opción de implementación adecuada para su entorno específico. Hay varias áreas que podrían afectar a la compatibilidad de la solución Access actual de 32 bits. Por ejemplo, si utiliza bases de datos en las que se quitó el código fuente (como archivos .mde, .ade y .accde) o si utiliza el código VBA con instrucciones Declare, complementos COM o controles ActiveX, es posible que tenga que invertir tiempo de desarrollo antes de que esta funcionalidad funcione con Access de 64 bits. Una solución alternativa para este problema podría ser la instalación de Access de 32 bits en Windows de 32 bits o Access de 32 bits (WOW64) en Windows de 64 bits. Para obtener más información acerca de este tema, consulte Ediciones de 64 bits de Office 2010.



Consideraciones a la hora de elegir la tecnología de acceso a datos



Si desarrolló una solución que funciona con una base de datos de Access existente, quizás desee seguir utilizando la tecnología de acceso a datos actual de la aplicación mientras que cumpla con sus requisitos. La sección Métodos de acceso a datos en desuso enumera los controladores que siguen ofreciendo conectividad a los formatos de archivo de Access heredadas. Tenga en cuenta que todos los proveedores ACE nuevos también son completamente compatibles con versiones anteriores.
Si espera que la aplicación tenga un ciclo de vida largo, tenga en cuenta varios factores durante el análisis de requisitos y el diseño. Algunos factores que influyen en la decisión de utilizar el controlador de acceso a datos más adecuado podrían incluir lo siguiente:
  • Lenguaje/Plataforma. ¿Está limitado a la implementación de la solución con lenguajes nativos (C, C++, VBA) frente a lenguajes administrados (C#, Visual Basic.NET)? Los lenguajes administrados y el marco de trabajo de acceso a datos subyacente (ADO.NET) ofrece una implementación más fácil, mejor interoperabilidad de plataformas y acceso a datos escalable. Por ejemplo, si desea gran integración con .NET Framework, XML, la solución que requiere lógica empresarial desconectada (presentación en memoria de datos relacionales) o bien definida, interfaces factorizadas con comportamiento predecible, rendimiento y semántica, es posible que ADO.NET sea la elección perfecta para usted. Por otro lado, si espera el mejor rendimiento posible o si debe usar un lenguaje específico, entonces tal vez tenga que considerar otros métodos (DAO directo, OLE DB directo, etc.). Si desea desarrollar la solución en C, la elección puede estar limitada al enfoque de ODBC directo. De igual forma, para el desarrollo de Java, es posible que desee utilizar el controlador JDBC-ODBC.


  • Funcionalidad. Si la solución depende exclusivamente de las bases de datos de Access y permanecerá de esta manera, el controlador DAO de ACE debe ser la elección por naturaleza dado que ofrece la funcionalidad más completa. A largo plazo, las tecnologías de acceso a datos nativas reducen el tiempo de desarrollo, simplifican el código y mejoran el rendimiento. Si necesita características avanzadas de manipulación de conjunto de registros y se conecta a un origen externo de apoyo, considere el uso de ADO.NET (o ADO) u OLE DB. Sólo el controlador DAO de ACE ofrece compatibilidad total con las características heredadas, como tablas vinculadas y consultas guardadas, y con nuevos tipos de datos complejos que se incluyen con Access 2007. El controlador OLE DB de ACE tiene compatibilidad limitada con datos complejos. Por ejemplo, a fin de permitir una mejor compatibilidad con conjuntos de datos complejos (para recuperar conjuntos de registros dentro de conjuntos de registros), establezca el parámetro de conexión "OLE DB de JET: compatibilidad con datos complejos". De lo contrario, de forma predeterminada, sólo obtendrá listas delimitadas de campos complejos. ADO.NET, ADO y ODBC de ACE siempre obtienen listas delimitadas de campos complejos.


  • Seguridad. La escritura del código de base de datos seguro en un entorno web y de multiusuario implica mucho más que la creación de una contraseña de cifrado de alto nivel de protección. Una aplicación que tiene acceso a una base de datos tiene potencialmente varios puntos de error, en donde un atacante puede recuperar, manipular o destruir datos confidenciales. Por lo tanto, es importante comprender todos los aspectos de seguridad, desde el modelado de amenazas durante la fase de diseño de la aplicación, hasta la eventual implementación y el mantenimiento de manera continua. En general, .NET Framework ofrece un entorno más fácil utilizar y bien integrado para mejorar la seguridad de la aplicación.


  • Rendimiento. Si bien ADO.NET y ADO son rápidos, insertan una capa adicional de abstracción entre la aplicación y el proveedor OLE DB de ACE cuando funcionan con el motor ACE. En general, los métodos DAO directo, OLE DB y ODBC son más rápidos, especialmente para las bases de datos más grandes. Si el rendimiento es un problema y espera que la base de datos crezca significativamente con el tiempo, puede escribir la aplicación de C++ mediante la interfaz OLE DB o DAO.


  • Mantenimiento. Para desarrollar soluciones sencillas, ADO.NET o DAO directo (y, posiblemente, ADO), vea el comentario. La elección de la tecnología de acceso a datos de OLE DB influye sobre los costos de mantenimiento a largo plazo de la aplicación. OLE DB es más costoso que DAO o ADO.NET dado que es más difícil mantener y mejorar el código complejo de COM. Como alternativa al método OLE DB directo, puede utilizar el enfoque de OLE DB de ATL (código de ejemplo proporcionado) que hace un buen trabajo de abstracción de la complejidad subyacente de COM.


Ff965871.note(es-es,office.14).gifNota:

Los proveedores ACE de Office Access 2007 sólo funcionan con el código cliente de 32 bits. Los proveedores ACE de Access 2010 admiten códigos de 32 bits o 64 bits. Para implementar una solución de 64 bits, usted y los clientes deben implementar el producto Access 2010 de 64 bits. Para obtener más información, consulte Uso de proveedores ACE de 32 bits y 64 bits.

Métodos de acceso a datos en desuso



La Tabla 2 detalla los métodos de acceso a datos en desuso a partir de Access 2007. Estos métodos no son compatibles para su uso con bases de datos de Access guardadas en formato de archivo .accdb y sólo se deben utilizar para mantener las aplicaciones heredadas.
Tabla 2. Métodos de acceso a datos en desuso

 


Nombre del proveedor

Método de acceso a datos

Conexión y otra información

Lenguajes admitidos

Proveedor JET4.0 OLE DB

OLE DB

Microsoft.JET.OLEDB.4.0
<Atldbcli.h>

C++

DAO de MFC

DAO de MFC

<Afxdao.h>;
Instalado con MDAC; clases MFC que tienen el prefijo CDao.
Las clases DAO de MFC proporcionan al usuario una forma de utilizar el motor de base de datos JET de Microsoft heredado. Sin embargo, no son compatibles a partir de Access 2007. DAO 3.6 es la versión final de esta tecnología. No está disponible en Windows de 64 bits. Los asistentes de Visual C++ .NET no generan el código que crea y abre automáticamente los conjuntos de registros.

C++

Controlador ODBC 4.0 para Access

ODBC de MFC

Driver={Microsoft Access Driver (*.mdb)};DBQ=path of mdb file
<Afxdb.h>;
Odbcjt32.dll;

C++


Conclusión



Este artículo técnico presenta la arquitectura de alto nivel de Microsoft Access, el motor ACE y los proveedores de datos. Explora diversas tecnologías de acceso a datos que están disponibles para la programación de Access, independientemente de si está desarrollando un código nativo o administrado, de 32 bits o 64 bits. Mediante el uso de las tecnologías de acceso a datos, como DAO, OLE DB, ADO.NET, ADO, ODBC o JDBC, puede continuar con la creación de soluciones personalizadas de Access incluso para los escenarios más complejos y exigentes. Normalmente, como proveedor predeterminado para el motor ACE, el controlador DAO de ACE proporciona la interfaz nativa más completa para las bases de datos de Access, y ADO.NET es una buena alternativa para los lenguajes .NET. No solo se integran bien con el motor ACE, sino que además ofrecen un entorno rápido, estable y compatible con versiones anteriores, con formatos de archivo heredados.

Entradas populares