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


Síntomas


Cuando se abre una base de datos creada con Access 2000 a través de las clases DAO de MFC en Visual C++, obtendrá el siguiente mensaje de error:
Formato de base de datos no reconocido.
También obtendrá este mensaje al intentar crear una nueva base de datos DAO de MFC SDI o un proyecto MDI con el Asistente para aplicaciones MFC.

Causa


Este mensaje de error se produce debido a que se envían con Visual C++ 6.0 carga DAO 3.5 (Dao350.dll) de las clases DAO de MFC de forma predeterminada. DAO 3.5 utiliza Jet 3.5, que sólo se puede abrir el formato de Jet 3.5 (o anterior de) las bases de datos. Access 2000 crea archivos de base de datos, que no reconoce Jet 3.5 de formato de Jet 4.0. Para abrir correctamente una base de datos de Access 2000 mediante las clases DAO de MFC, es necesario utilizar DAO 3.6 (Dao360.dll). DAO 3.6 utiliza Jet 4.0, que puede abrir cualquier formato de base de datos de acceso disponible.

Solución


Actualmente, no hay ninguna solución para utilizar el Asistente para aplicaciones con orígenes de datos de Access 2000.

Para que la aplicación para utilizar la versión 3.6 de DAO, debe actualizar la versión de MFC en tiempo de ejecución a MFC versión 6.01. Para hacer esto depende de si está generando la aplicación para utilizar la DLL de MFC o para construir con las bibliotecas estáticas MFC.

Si se vincula con la DLL de MFC, puede especificar que desea que MFC utilizar 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 la siguiente línea en la función CYourApp::Initinstance() del programa. Si está generando con las bibliotecas MFC estáticas, los siguientes son los pasos para obtener estático generaciones de MFC para utilizar 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 líneas siguientes:
    #undef _MFC_VER
    #define _MFC_VER 0x0601
  2. Vuelva a generar la biblioteca de la variante que necesita. Por ejemplo, para crear la biblioteca estática MFC, versión de depuración, no Unicode, no tiene archivos del explorador utilice el comando siguiente en el símbolo del sistema en la carpeta MFC\SRC:
      nmake DEBUG=1

    for release:
    nmake DEBUG=0

    for unicode builds:
    nmake DEBUG=1 UNICODE=1
    nmake DEBUG=0 UNICODE=1
Nota: Debe asegurarse de que las herramientas de compilador que estén en el path. Si no es así, puede que necesite ejecutar el archivo Vcvars32.bat ubicado en la carpeta \BIN de Visual C++. Tenga en cuenta que al generar estas nuevas versiones de las bibliotecas, se copiarán por encima de los existentes en la carpeta MFC\LIB así que es aconsejable guardar primero los antiguos.

Estado


Este comportamiento es por diseño.