Un message d’erreur « format de base de données non reconnu » s’affiche lorsque vous ouvrez une base de données créée avec Access 2000


Symptômes


Lors de l’ouverture d’une base de données créée avec Access 2000 via les classes DAO de MFC dans Visual C++, vous obtenez le message d’erreur suivant :
Format de base de données non reconnu.
Également, vous obtenez ce message lorsque vous tentez de créer une nouvelle base de données DAO MFC SDI ou d’un projet MDI à l’aide de MFC AppWizard.

Cause


Ce message d’erreur se produit parce que DAO MFC classes fournis avec Visual C++ 6.0 charge DAO 3.5 (Dao350.dll) par défaut. DAO 3.5 utilise Jet 3.5, ce qui peut ouvrir uniquement le format Jet 3.5 (ou antérieure) bases de données. Access 2000 crée des fichiers de base de données, qui ne reconnaît pas Jet 3.5 format Jet 4.0. Pour ouvrir une base de données Access 2000 à l’aide des classes DAO MFC, vous devez utiliser DAO 3.6 (Dao360.dll). DAO 3.6 utilise Jet 4.0, ce qui peut ouvrir n’importe quel format de base de données d’accès disponible.

Résolution


Il n’existe actuellement aucune solution de contournement à l’aide de AppWizard avec les sources de données Access 2000.

Pour votre application d’utiliser la version 3.6 de DAO, vous devez mettre à jour la version de la bibliothèque MFC au moment de l’exécution aux MFC version 6.01. Pour ce faire dépend de si vous générez l’application pour utiliser la DLL MFC ou à générer avec des bibliothèques statiques pour MFC.

Si vous établissez une liaison avec la DLL MFC, vous pouvez spécifier que vous souhaitez que MFC d’utiliser DAO 3.6 en insérant la ligne suivante de code avant d’ouvrir une base de données Access 2000 :
AfxGetModuleState()->m_dwVersion = 0x0601;
Insérez la ligne suivante dans la fonction CYourApp::Initinstance() de votre programme. Si vous programmez avec des bibliothèques MFC statiques, voici la procédure pour obtenir statique génère des MFC pour utiliser DAO 3.6 :
  1. Modifiez le fichier Daocore.cpp dans le répertoire SRC de MFC. Vous recevrez le commentaire suivant :
    // 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
    Ajoutez les lignes suivantes :
    #undef _MFC_VER
    #define _MFC_VER 0x0601
  2. Régénérez la bibliothèque pour la variante que vous avez besoin. Par exemple, pour créer la bibliothèque statique MFC, version debug, non-Unicode, sans fichiers de navigateur utilisez la commande suivante à l’invite de commandes dans le dossier MFC\SRC :
      nmake DEBUG=1

    for release:
    nmake DEBUG=0

    for unicode builds:
    nmake DEBUG=1 UNICODE=1
    nmake DEBUG=0 UNICODE=1
Remarque Vous devez vous assurer que les outils du compilateur sont dans votre chemin d’accès. Si ce n’est pas le cas, vous devrez peut-être exécuter le fichier Vcvars32.bat que se trouve dans le dossier \BIN de Visual C++. Notez également que lorsque vous générez ces nouvelles versions des bibliothèques, ils seront copiés sur la partie supérieure d’existants dans le dossier MFC\LIB afin que vous souhaiterez peut-être enregistrer d’abord les anciens.

État


Ce comportement est voulu par la conception.