TN055 : Migration d'Applications de classe de base de données ODBC MFC pour les Classes DAO MFC

Vue d'ensemble

Dans de nombreuses situations, il peut être souhaitable de migrer les applications qui utilisent des classes de base de données ODBC MFC pour les classes de base de données DAO MFC. Cette note technique expose en détail la plupart des différences entre les classes MFC ODBC et DAO. Avec les différences à l'esprit, il ne devrait pas être trop difficile de migrer les applications des classes ODBC pour les classes MFC si désiré.

Pourquoi migrer de ODBC vers DAO?

Il y a un certain nombre de raisons pour lesquelles vous souhaitez migrer des applications de la classe de base de données ODBC pour les Classes de base de données DAO, mais la décision n'est pas forcément simple ou évident. Une seule chose à garder à l'esprit est que le moteur de base de données Microsoft Jet qui est utilisé par DAO peut lire n'importe quelle source de données ODBC pour laquelle vous avez un pilote ODBC. Il peut être plus efficace d'utiliser les Classes de base de données ODBC ou appel ODBC directement vous-même, mais le moteur de base de données Microsoft Jet peut lire des données ODBC.

Il y a certains cas simples qui rendent la décision ODBC et DAO facile. Par exemple, lorsque vous avez seulement besoin l'accès aux données dans un format que le moteur Microsoft Jet peut lire directement (format Access, FoxPro format, format Excel et ainsi de suite) le choix évident est d'utiliser les Classes de base de données DAO.

Des cas plus complexes se posent lorsqu'il existe des vos données sur un serveur ou sur une variété de différents serveurs. Dans ce cas, la décision d'utiliser les classes de base de données ODBC ou les classes de base de données DAO est difficile. Si vous voulez faire des choses telles que les jointures hétérogènes (jointure données provenant de serveurs dans différents formats tels que SQL Server et Oracle), puis le moteur de base de données Microsoft Jet effectuera la jointure pour vous au lieu de vous faire les travaux nécessaires si vous utilisé les Classes de base de données ODBC ou appelé ODBC directement. Si vous utilisez un pilote ODBC prend en charge les curseurs du pilote, votre meilleur choix peut-être être les classes de base de données ODBC.

Le choix peut être compliqué, donc vous pouvez écrire un exemple de code pour tester les performances de différentes méthodes, compte tenu de vos besoins particuliers. Cette note technique suppose que vous avez pris la décision de migrer dans les Classes de base de données ODBC pour les classes de base de données DAO.

Similitudes entre les Classes de base de données ODBC et les Classes de base de données DAO MFC

La conception originale des classes ODBC MFC était fondée sur le modèle d'objet DAO qui a été utilisée dans Microsoft Access et Microsoft Visual Basic. Cela signifie qu'il y a beaucoup de caractéristiques communes des classes ODBC et DAO MFC, qui seront pas tous répertoriés dans cette section. En général, les modèles de programmation sont les mêmes.

Pour mettre en évidence quelques similitudes:

Par exemple, dans les deux modèles est la procédure pour récupérer des données pour créer et ouvrir un objet de base de données, créer et ouvrir un objet recordset et naviguer (aller) bien que les données d'exécution d'une opération.

Différences entre les ODBC et les Classes DAO MFC

Les classes DAO incluent plus d'objets et d'un riche jeu de méthodes, mais cette section détaillera uniquement les différences dans les mêmes classes et fonctionnalités.

Les différe&nces les plus évidentes entre les classes sont probablement les changements de nom pour les mêmes classes et fonctions globales. La liste suivante indique le nom des changements ofnbsp ; les objets, méthodes et fonctions globales associées à la classe de base de données:

Classe ou fonction Équivalent dans les Classes DAO MFC
CDatabase CDaoDatabase
CDatabase::ExecuteSQL CDaoDatabase::Execute
CRecordset CDaoRecordset
CRecordset::GetDefaultConnect CDaoRecordset::GetDefaultDBName
Objet 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 fonction RFX_Date est basée sur CTime et TIMESTAMP_STRUCT.

Voici les principaux changements de fonctionnalités qui peuvent affecter votre application et exigent des changements de nom plus simple.

  1. Les constantes et les macros utilisées pour spécifier les choses comme le jeu d'enregistrements de type et de jeu d'enregistrements libres options ont été modifiées.

    Avec les classes ODBC MFC nécessaires pour définir ces options par le biais de macros ou énuméré les types.

    Avec les classes DAO, DAO fournit la définition de ces options dans un fichier d'en-tête (DBDAOINT.H). donc le type de jeu d'enregistrements est un membre énuméré de CRecordset, mais avec DAO c'est une constante. Par exemple vous utiliseriez instantané lorsque vous spécifiez le type de CRecordset dans ODBC mais DB_OPEN_SNAPSHOT lors de la spécification du type de CDaoRecordset.

  2. Le type de jeu d'enregistrements par défaut pour l'objet CRecordset est instantané tandis que le type de jeu d'enregistrements par défaut pour CDaoRecordset est feuille de réponse dynamique (voir la Note ci-dessous pour une autre question sur les instantanés de classe ODBC).

  3. La classe ODBC CRecordset a une option pour créer un type de jeu d'enregistrements vers l'avant uniquement. Dans la classe de CDaoRecordset , avant uniquement n'est pas un type de jeu d'enregistrements, mais plutôt une propriété (ou option) de certains types de jeux d'enregistrements.

  4. Un recordset append uniquement lors de l'ouverture d'un objet CRecordset signifie que les données du jeu d'enregistrements pourraient être lu et annexées. Avec l'objet CDaoRecordset , l'option append-only signifie littéralement que les données du jeu d'enregistrements ne peuvent être ajoutés (et pas lire).

  5. Fonctions de membres des classes ODBC transaction sont membres de l'objet CDatabase et Loi au niveau de la base de données. Dans les classes DAO, les fonctions de membre de transaction sont membres d'une classe de niveau supérieure (CDaoWorkspace) et donc peut-être un impact sur plusieurs objets CDaoDatabase partage le même espace de travail (espace de transaction).

  6. La classe d'exception a été changée. CDBExceptions sont jetés dans les classes ODBC et CDaoExceptions dans les classes DAO.

  7. RFX_Date utilise les objets CTime et TIMESTAMP_STRUCT tandis que DFX_Date utilise COleDateTime. Le COleDateTime est presque identique à CTime, mais repose sur 8 octets OLE DATE plutôt que sur un 4 octets time_t peut donc contenir une gamme beaucoup plue de données.

&Notenbsp ;  Instantanés DAO (CDaoRecordset) sont en lecture seule, tandis que les instantanés de l'ODBC (CRecordset) peuvent être modifiable selon le pilote et l'utilisation de la bibliothèque de curseurs ODBC. Si vous utilisez la bibliothèque de curseurs, CRecordset instantanés sont actualisables. Si vous utilisez un des pilotes Microsoft Desktop Driver Pack 3.0 sans la bibliothèque de curseurs ODBC, les instantanés de CRecordset sont en lecture seule. Si vous utilisez un autre pilote, consultez la documentation du conducteur pour voir si les instantanés (STATIC_CURSORS) sont en lecture seule.

&Notes techniques par le numéro |nbsp ; Notes techniques par catégorie

Index