TN055: Migración de aplicaciones de clase de base de datos de ODBC de MFC a las clases DAO de MFC

Visión general

En muchas situaciones puede ser conveniente para migrar las aplicaciones que utilizan las clases de base de datos ODBC de MFC para clases de base de datos DAO de MFC. Esta nota técnica detallaremos la mayoría de las diferencias entre las clases DAO y ODBC de MFC. Teniendo en cuenta las diferencias, no debería ser demasiado difícil migrar aplicaciones de las clases ODBC a las clases MFC si lo desea.

¿Por qué migrar de ODBC para DAO?

Hay una serie de razones por las que desee migrar aplicaciones de las clases de base de datos de ODBC con las clases de base de datos DAO, pero la decisión no es necesariamente simple o evidente. Una cosa a tener en cuenta es que el motor de base de datos de Microsoft Jet utiliza DAO puede leer cualquier origen de datos ODBC para que tenga un controlador ODBC. Puede resultar más eficaz utilizar las clases de base de datos de ODBC o llamar ODBC directamente usted mismo, pero el motor de base de datos de Microsoft Jet puede leer datos ODBC.

Hay algunos casos sencillos que facilitan la decisión de ODBC/DAO. Por ejemplo, cuando sólo necesita acceso a los datos en un formato que el motor Microsoft Jet puede leer directamente (formato de Access, FoxPro formato, formato de Excel y así sucesivamente) la elección obvia es utilizar las clases de base de datos DAO.

Casos más complejos surgen cuando los datos existen en un servidor o en una variedad de diferentes servidores. En este caso, la decisión de utilizar las clases de base de datos ODBC o las clases de base de datos DAO es difícil. Si desea hacen cosas como combinaciones heterogéneas (combinación de datos desde servidores en múltiples formatos como SQL Server y Oracle) y, a continuación, el motor de base de datos de Microsoft Jet realizará la combinación para en lugar de forzar a hacer el trabajo necesario si utiliza las clases de base de datos de ODBC o había llamado ODBC directamente. Si está utilizando un controlador ODBC que sea compatible con cursores de conductor, su mejor opción podría ser las clases de base de datos ODBC.

La elección puede ser complicada, así que puede que desee escribir algún código de ejemplo para probar el rendimiento de los distintos métodos, teniendo en cuenta sus necesidades especiales. Esta nota técnica asume que han tomado la decisión de migrar de las clases de base de datos de ODBC a las clases de base de datos DAO.

Similitudes entre las clases de base de datos ODBC y clases de base de datos DAO de MFC

El diseño original de las clases MFC ODBC se basa en el modelo de objeto DAO que ha estado en uso en Microsoft Access y Microsoft Visual Basic. Esto significa que existen muchas características comunes de las clases ODBC y DAO MFC, que no todos se muestran en esta sección. En general, los modelos de programación son los mismos.

Para resaltar algunas similitudes:

Por ejemplo, en ambos modelos es el procedimiento para recuperar los datos para crear y abrir un objeto de base de datos, crear y abrir un objeto recordset y navegar (mover) aunque los datos realizando alguna operación.

Diferencias entre clases de MFC DAO y ODBC

Las clases DAO incluyen más objetos y un conjunto de métodos más rico, pero esta sección sólo detallaremos las diferencias de clases similares y funcionalidad.

Probableme&nte las diferencias entre las clases más evidentes son los cambios de nombre para clases similares y funciones globales. La siguiente lista muestra el ofnbsp de los cambios de nombre; los objetos, métodos y funciones globales asociadas con las clases de base de datos:

Clase o función Equivalente en las clases DAO de MFC
CDatabase CDaoDatabase
CDatabase::ExecuteSQL CDaoDatabase::Execute
CRecordset CDaoRecordset
CRecordset::GetDefaultConnect CDaoRecordset::GetDefaultDBName
CFieldExchange CDaoFieldExchange
RFX_Bool DFX_Bool
RFX_Byte DFX_Byte
RFX_Int DFX_Short
RFX_Long DFX_Long
DFX_Currency
RFX_Single DFX_Single
RFX_Double DFX_Double
RFX_Date * DFX_Date (COleDateTime-base)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

La función RFX_Date se basa en la clase CTime y TIMESTAMP_STRUCT.

A continuación se enumeran los principales cambios en la funcionalidad que pueden afectar a su aplicación y requieren cambios de nombre más simple.

  1. Se han cambiado las constantes y las macros que se utiliza para especificar cosas como recordset de tipo abierto y recordset abrir Opciones.

    Con las clases ODBC de MFC necesarias para definir estas opciones mediante macros o enumera tipos.

    Con las clases DAO, DAO proporciona la definición de estas opciones en un archivo de encabezado (DBDAOINT.H). así, el tipo de recordset es un miembro enumerado de CRecordset, pero con DAO es una constante en su lugar. Por ejemplo se utilizaría instantánea cuando se especifica el tipo de CRecordset en ODBC, pero DB_OPEN_SNAPSHOT cuando se especifica el tipo de CDaoRecordset.

  2. El tipo de recordset predeterminado para CRecordset es instantánea mientras que el tipo de recordset predeterminado para CDaoRecordset es dinámico (véase la nota a continuación para una cuestión adicional acerca de las instantáneas de clase ODBC).

  3. La clase ODBC CRecordset tiene una opción para crear un tipo de conjunto de registros sólo hacia delante. En la clase CDaoRecordset , sólo hacia delante no es un tipo de conjunto de registros, pero más bien un propiedad (o opción) de ciertos tipos de conjuntos de registros.

  4. Un conjunto de registros sólo anexar al abrir un objeto CRecordset significa que los datos del conjunto de registros se podrían leer y anexados. Con objeto de CDaoRecordset , la opción sólo anexar literalmente significa que los datos del conjunto de registros pueden ser anexado (y no leído).

  5. Funciones de miembro de transacción de las clases ODBC son miembros de CDatabase y actuar en el nivel de base de datos. En las clases DAO, las funciones de miembro de transacción son miembros de una clase de nivel superior (CDaoWorkspace) y por lo tanto pueden afectar varios objetos CDaoDatabase compartir el mismo espacio de trabajo (espacio de transacción).

  6. Se ha cambiado la clase exception. CDBExceptions se produce en las clases ODBC y CDaoExceptions en las clases DAO.

  7. RFX_Date utiliza objetos CTime y TIMESTAMP_STRUCT mientras que DFX_Date utiliza COleDateTime. El COleDateTime es casi idéntica a la clase CTime, pero se basa en un byte de 8 OLE fecha en lugar de un 4-byte time_t por lo que puede contener una variedad mucho mayor de datos.

&Notanbsp;  Instantáneas DAO (CDaoRecordset) son de sólo lectura mientras instantáneas ODBC (CRecordset) pueden ser actualizables en función del controlador y uso de la biblioteca de cursores ODBC. Si está utilizando la biblioteca de cursores, CRecordset instantáneas son actualizables. Si está utilizando alguno de los controladores de Microsoft desde Desktop Driver Pack 3.0 sin la biblioteca de cursores ODBC, las instantáneas de CRecordset son de sólo lectura. Si está utilizando otro controlador, compruebe la documentación del conductor para ver si las instantáneas (STATIC_CURSORS) son de sólo lectura.

&Notas técnicas por número |nbsp; Notas técnicas por categoría

Index