Recibe un mensaje de error "formato de base de datos no reconocido" cuando abre una base de datos creada con Access 2000


Síntomas


Al abrir una base de datos creada con Access 2000 a través de clases DAO MFC en Visual C++, se obtiene el siguiente mensaje de error:
Formato de base de datos no reconocido.
También recibe este mensaje cuando intenta crear un nuevo proyecto MDI o de base de datos DAO de MFC con el Asistente para aplicaciones MFC.

Causa


Este mensaje de error se produce porque las clases DAO de MFC que se distribuyen con Visual C++ 6,0 cargan DAO 3,5 (DAO350. dll) de forma predeterminada. DAO 3,5 usa Jet 3,5, que solo puede abrir bases de datos con formato Jet 3,5 (o versiones anteriores). Access 2000 crea archivos de base de datos con formato jet 4,0, que no se reconocen en Jet 3,5. Para abrir correctamente una base de datos de Access 2000 con las clases DAO de MFC, debe usar DAO 3,6 (Dao360. dll). DAO 3,6 usa jet 4,0, que puede abrir cualquier formato de base de datos de Access disponible.

Resolución


Por el momento, no hay ninguna solución para el uso de AppWizard con orígenes de datos de Access 2000. Para que la aplicación use la versión 3,6 de DAO, debe actualizar la versión de MFC en tiempo de ejecución a la versión 6,01 de MFC. Para ello, depende de si está generando la aplicación para usar el archivo DLL de MFC o para compilar con las bibliotecas estáticas de MFC. Si establece un vínculo con el archivo DLL de MFC, puede especificar que MFC use DAO 3,6 insertando la siguiente línea de código antes de abrir una base de datos de Access 2000:
AfxGetModuleState()->m_dwVersion = 0x0601;
Inserte esta línea en la función CYourApp:: InitInstance () del programa. Si está creando con las bibliotecas estáticas de MFC, siga estos pasos para obtener compilaciones estáticas de MFC para usar DAO 3,6:
  1. Modifique el archivo Daocore. cpp en el directorio SRC de MFC. Recibirá el siguiente comentario:
    // Determine whether to use DAO 3.6, 3.5, or 3.0// Use DAO 3.0 if DLL build and not built with MFC 4.21 or later// Use DAO 3.6 if MFC 6.01 or later// otherwise, DAO 3.5
    Agregue las siguientes líneas:
    #undef _MFC_VER#define _MFC_VER 0x0601
  2. Vuelva a crear la biblioteca para la variante que necesita. Por ejemplo, para crear la biblioteca estática de MFC, la versión de depuración, no Unicode, sin archivos del explorador, use el comando siguiente en el símbolo del sistema de la carpeta MFC\SRC:
      nmake DEBUG=1for release:   nmake DEBUG=0for unicode builds:   nmake DEBUG=1  UNICODE=1   nmake DEBUG=0  UNICODE=1
Nota Debe asegurarse de que las herramientas del compilador estén en la ruta de acceso. Si no es así, es posible que tenga que ejecutar el archivo Vcvars32. bat ubicado en la carpeta \BIN de Visual C++. Además, tenga en cuenta que cuando se compilan estas nuevas versiones de las bibliotecas, se copian en la parte superior de las existentes en la carpeta MFC\LIB, por lo que es posible que desee guardar las anteriores en primer lugar.

Estado


Este comportamiento es una característica del diseño de la aplicación.