CDaoDatabase, classe

Représente une connexion à une base de données Access à l’aide d’objets DAO (Data Access Objects).

Remarque

L’objet d’accès aux données (DAO) est pris en charge via Office 2013. DAO 3.6 est la version finale et est obsolète.

Syntaxe

class CDaoDatabase : public CObject

Membres

Constructeurs publics

Nom Description
CDaoDatabase ::CDaoDatabase Construit un objet CDaoDatabase. Appelez Open pour connecter l’objet à une base de données.

Méthodes publiques

Nom Description
CDaoDatabase ::CanTransact Retourne une valeur différente de zéro si la base de données prend en charge les transactions.
CDaoDatabase ::CanUpdate Renvoie une valeur différente de zéro si l’objet CDaoDatabase est pouvant être mis à jour (pas en lecture seule).
CDaoDatabase ::Close Ferme la connexion de base de données.
CDaoDatabase ::Create Crée l’objet de base de données DAO sous-jacent et initialise l’objet CDaoDatabase .
CDaoDatabase ::CreateRelation Définit une nouvelle relation entre les tables de la base de données.
CDaoDatabase ::D eleteQueryDef Supprime un objet querydef enregistré dans la collection QueryDefs de la base de données.
CDaoDatabase ::D eleteRelation Supprime une relation existante entre les tables de la base de données.
CDaoDatabase ::D eleteTableDef Supprime la définition d’une table dans la base de données. Cela supprime la table réelle et toutes ses données.
CDaoDatabase ::Execute Exécute une requête d’action. L’appel Execute d’une requête qui retourne les résultats lève une exception.
CDaoDatabase ::GetConnect Retourne la chaîne de connexion utilisée pour connecter l’objet CDaoDatabase à une base de données. Utilisé pour ODBC.
CDaoDatabase ::GetName Retourne le nom de la base de données en cours d’utilisation.
CDaoDatabase ::GetQueryDefCount Retourne le nombre de requêtes définies pour la base de données.
CDaoDatabase ::GetQueryDefInfo Retourne des informations sur une requête spécifiée définie dans la base de données.
CDaoDatabase ::GetQueryTimeout Retourne le nombre de secondes après lesquelles les opérations de requête de base de données expirent. Affecte toutes les opérations d’ouverture, d’ajout, de mise à jour et de modification ultérieures et d’autres opérations sur des sources de données ODBC (uniquement) telles que Execute les appels.
CDaoDatabase ::GetRecordsAffected Retourne le nombre d’enregistrements affectés par la dernière mise à jour, la modification ou l’opération d’ajout ou par un appel à Execute.
CDaoDatabase ::GetRelationCount Retourne le nombre de relations définies entre les tables de la base de données.
CDaoDatabase ::GetRelationInfo Retourne des informations sur une relation spécifiée définie entre les tables de la base de données.
CDaoDatabase ::GetTableDefCount Retourne le nombre de tables définies dans la base de données.
CDaoDatabase ::GetTableDefInfo Retourne des informations sur une table spécifiée dans la base de données.
CDaoDatabase ::GetVersion Retourne la version du moteur de base de données associé à la base de données.
CDaoDatabase ::IsOpen Retourne une valeur différente de zéro si l’objet CDaoDatabase est actuellement connecté à une base de données.
CDaoDatabase ::Open Établit une connexion à une base de données.
CDaoDatabase ::SetQueryTimeout Définit le nombre de secondes après lesquelles les opérations de requête de base de données (sur les sources de données ODBC uniquement) expirent. Affecte toutes les opérations d’ouverture, d’ajout, de mise à jour et de suppression suivantes.

Membres de données publics

Nom Description
CDaoDatabase ::m_pDAODatabase Pointeur vers l’objet de base de données DAO sous-jacent.
CDaoDatabase ::m_pWorkspace Pointeur vers l’objet CDaoWorkspace qui contient la base de données et définit son espace de transaction.

Notes

Pour plus d’informations sur les formats de base de données pris en charge, consultez la fonction membre GetName . Vous pouvez avoir un ou plusieurs CDaoDatabase objets actifs à la fois dans un « espace de travail » donné, représenté par un objet CDaoWorkspace . L’espace de travail gère une collection d’objets de base de données ouverts, appelée collection Databases.

Utilisation

Vous pouvez créer implicitement des objets de base de données lorsque vous créez des objets recordset. Toutefois, vous pouvez également créer des objets de base de données explicitement. Pour utiliser une base de données existante explicitement avec CDaoDatabase, effectuez l’une des opérations suivantes :

  • Construisez un CDaoDatabase objet, en passant un pointeur à un objet CDaoWorkspace ouvert.

  • Ou construisez un CDaoDatabase objet sans spécifier l’espace de travail (MFC crée un objet d’espace de travail temporaire).

Pour créer un Microsoft Jet (. Base de données MDB, construisez un CDaoDatabase objet et appelez sa fonction créer un membre. N’appelez Open pas après Create.

Pour ouvrir une base de données existante, construisez un CDaoDatabase objet et appelez sa fonction Open member.

Toutes ces techniques ajoutent l’objet de base de données DAO à la collection Databases de l’espace de travail et ouvre une connexion aux données. Lorsque vous construisez ensuite des objets CDaoRecordset, CDaoTableDef ou CDaoQueryDef pour fonctionner sur la base de données connectée, transmettez les constructeurs pour ces objets un pointeur vers votre CDaoDatabase objet. Lorsque vous avez terminé d’utiliser la connexion, appelez la fonction Membre Close et détruisez l’objet CDaoDatabase . Close ferme tous les jeux d’enregistrements que vous n’avez pas encore fermés.

Transactions

Le traitement des transactions de base de données est fourni au niveau de l’espace de travail : consultez les fonctions membres BeginTrans, CommitTrans et Rollback de la classe CDaoWorkspace.

Connexions ODBC

La méthode recommandée pour utiliser des sources de données ODBC (Open Database Base Connectivity) consiste à attacher des tables externes à une base de données Microsoft Jet (.MDB).

Collections

Chaque base de données conserve ses propres collections d’objets tabledef, querydef, recordset et relation. La classe CDaoDatabase fournit des fonctions membres pour manipuler ces objets.

Remarque

Les objets sont stockés dans DAO, et non dans l’objet de base de données MFC. MFC fournit des classes pour les objets tabledef, querydef et recordset, mais pas pour les objets de relation.

Hiérarchie d'héritage

CObject

CDaoDatabase

Spécifications

En-tête : afxdao.h

CDaoDatabase ::CanTransact

Appelez cette fonction membre pour déterminer si la base de données autorise les transactions.

BOOL CanTransact();

Valeur de retour

Différent de zéro si la base de données prend en charge les transactions ; sinon 0.

Notes

Les transactions sont gérées dans l’espace de travail de la base de données.

CDaoDatabase ::CanUpdate

Appelez cette fonction membre pour déterminer si l’objet autorise les CDaoDatabase mises à jour.

BOOL CanUpdate();

Valeur de retour

Différent de zéro si l’objet autorise les CDaoDatabase mises à jour ; sinon 0, indiquant que vous avez passé TRUE dans bReadOnly lorsque vous avez ouvert l’objet CDaoDatabase ou que la base de données elle-même est en lecture seule. Consultez la fonction Ouvrir un membre.

Notes

Pour plus d’informations sur la mise à jour de la base de données, consultez la rubrique « Updatable Property » dans L’aide de DAO.

CDaoDatabase ::CDaoDatabase

Construit un objet CDaoDatabase.

CDaoDatabase(CDaoWorkspace* pWorkspace = NULL);

Paramètres

pWorkspace
Pointeur vers l’objet CDaoWorkspace qui contiendra le nouvel objet de base de données. Si vous acceptez la valeur par défaut de NULL, le constructeur crée un objet temporaire CDaoWorkspace qui utilise l’espace de travail DAO par défaut. Vous pouvez obtenir un pointeur vers l’objet de l’espace de travail via le membre de données m_pWorkspace .

Notes

Après avoir construit l’objet, si vous créez un microsoft Jet (. Base de données MDB, appelez la fonction Créer un membre de l’objet. Si vous ouvrez plutôt une base de données existante, appelez la fonction Open member de l’objet.

Lorsque vous avez terminé avec l’objet, vous devez appeler sa fonction de membre Close , puis détruire l’objet CDaoDatabase .

Vous trouverez peut-être pratique d’incorporer l’objet CDaoDatabase dans votre classe de document.

Remarque

Un CDaoDatabase objet est également créé implicitement si vous ouvrez un objet CDaoRecordset sans passer de pointeur à un objet existant CDaoDatabase . Cet objet de base de données est fermé lorsque vous fermez l’objet recordset.

CDaoDatabase ::Close

Appelez cette fonction membre pour vous déconnecter d’une base de données et fermez tous les jeux d’enregistrements ouverts, tablesdefs et querydefs associés à la base de données.

virtual void Close();

Notes

Il est recommandé de fermer ces objets vous-même avant d’appeler cette fonction membre. La fermeture d’un CDaoDatabase objet le supprime de la collection Databases dans l’espace de travail associé. Étant donné que Close ne détruit pas l’objet CDaoDatabase , vous pouvez réutiliser l’objet en ouvrant la même base de données ou une autre base de données.

Attention

Appelez la fonction membre Update (s’il existe des modifications en attente) et la Close fonction membre sur tous les objets recordset ouverts avant de fermer une base de données. Si vous quittez une fonction qui déclare CDaoRecordset ou CDaoDatabase des objets sur la pile, la base de données est fermée, toutes les modifications non enregistrées sont perdues, toutes les transactions en attente sont restaurées et toutes les modifications en attente apportées à vos données sont perdues.

Attention

Si vous essayez de fermer un objet de base de données pendant qu’un objet recordset est ouvert ou si vous essayez de fermer un objet d’espace de travail alors que tous les objets de base de données appartenant à cet espace de travail spécifique sont ouverts, ces objets recordset sont fermés et toutes les mises à jour ou modifications en attente seront restaurées. Si vous essayez de fermer un objet d’espace de travail alors que tous les objets de base de données appartenant à celui-ci sont ouverts, l’opération ferme tous les objets de base de données appartenant à cet objet d’espace de travail spécifique, ce qui peut entraîner la fermeture d’objets recordset non fermés. Si vous ne fermez pas votre objet de base de données, MFC signale un échec d’assertion dans les builds de débogage.

Si l’objet de base de données est défini en dehors de l’étendue d’une fonction et que vous quittez la fonction sans la fermer, l’objet de base de données reste ouvert jusqu’à ce que le module dans lequel il est défini soit hors portée.

CDaoDatabase ::Create

Pour créer un Microsoft Jet (. Base de données MDB, appelez cette fonction membre après avoir construit un CDaoDatabase objet.

virtual void Create(
    LPCTSTR lpszName,
    LPCTSTR lpszLocale = dbLangGeneral,
    int dwOptions = 0);

Paramètres

lpszName
Expression de chaîne qui est le nom du fichier de base de données que vous créez. Il peut s’agir du chemin d’accès complet et du nom de fichier, par exemple « C :\\MYDB. MDB ». Vous devez fournir un nom. Si vous ne fournissez pas d’extension de nom de fichier, . MDB est ajouté. Si votre réseau prend en charge la convention d’affectation de noms uniforme (UNC), vous pouvez également spécifier un chemin d’accès réseau, tel que « \\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB ». Seul Microsoft Jet (. Les fichiers de base de données MDB) peuvent être créés à l’aide de cette fonction membre. (Les barres obliques inverses doubles sont requises dans les littéraux de chaîne, car « \ » est le caractère d’échappement C++.)

lpszLocale
Expression de chaîne utilisée pour spécifier l’ordre de classement de la création de la base de données. La valeur par défaut est dbLangGeneral. Les valeurs possibles sont les suivantes :

  • dbLangGeneral Anglais, allemand, Français, portugais, italien et espagnol moderne

  • dbLangArabic Arabe

  • dbLangCyrillic Russe

  • dbLangCzech Tchèque

  • dbLangDutch Néerlandais

  • dbLangGreek Grec

  • dbLangHebrew Hébreu

  • dbLangHungarian Hongrois

  • dbLangIcelandic Islandais

  • dbLangNordic Langues nordiques (moteur de base de données Microsoft Jet version 1.0 uniquement)

  • dbLangNorwdan Norvégien et danois

  • dbLangPolish Polonais

  • dbLangSpanish Espagnol traditionnel

  • dbLangSwedfin Suédois et finnois

  • dbLangTurkish Turc

dwOptions
Entier qui indique une ou plusieurs options. Les valeurs possibles sont les suivantes :

  • dbEncrypt Créez une base de données chiffrée.

  • dbVersion10 Créez une base de données avec la base de données Microsoft Jet version 1.0.

  • dbVersion11 Créez une base de données avec la base de données Microsoft Jet version 1.1.

  • dbVersion20 Créez une base de données avec la base de données Microsoft Jet version 2.0.

  • dbVersion30 Créez une base de données avec la base de données Microsoft Jet version 3.0.

Si vous omettez la constante de chiffrement, une base de données non chiffrée est créée. Vous ne pouvez spécifier qu’une seule constante de version. Si vous omettez une constante de version, une base de données qui utilise la base de données Microsoft Jet version 3.0 est créée.

Attention

Si une base de données n’est pas chiffrée, il est possible, même si vous implémentez la sécurité utilisateur/mot de passe, de lire directement le fichier de disque binaire qui constitue la base de données.

Notes

Create crée le fichier de base de données et l’objet de base de données DAO sous-jacent et initialise l’objet C++. L’objet est ajouté à la collection Databases de l’espace de travail associé. L’objet de base de données est dans un état ouvert ; n’appelez Open* pas après Create.

Remarque

Avec Create, vous pouvez créer uniquement Microsoft Jet (. Bases de données MDB. Vous ne pouvez pas créer de bases de données ISAM ou de bases de données ODBC.

CDaoDatabase ::CreateRelation

Appelez cette fonction membre pour établir une relation entre un ou plusieurs champs d’une table primaire de la base de données et un ou plusieurs champs d’une table étrangère (une autre table de la base de données).

void CreateRelation(
    LPCTSTR lpszName,
    LPCTSTR lpszTable,
    LPCTSTR lpszForeignTable,
    long lAttributes,
    LPCTSTR lpszField,
    LPCTSTR lpszForeignField);

void CreateRelation(CDaoRelationInfo& relinfo);

Paramètres

lpszName
Nom unique de l’objet relation. Le nom doit commencer par une lettre et peut contenir un maximum de 40 caractères. Il peut inclure des nombres et des caractères de soulignement, mais ne peut pas inclure de ponctuation ou d’espaces.

lpszTable
Nom de la table primaire dans la relation. Si la table n’existe pas, MFC lève une exception de type CDaoException.

lpszForeignTable
Nom de la table étrangère dans la relation. Si la table n’existe pas, MFC lève une exception de type CDaoException.

lAttributes
Valeur longue qui contient des informations sur le type de relation. Vous pouvez utiliser cette valeur pour appliquer l’intégrité référentielle, entre autres. Vous pouvez utiliser l’opérateur OR au niveau du bit (|) pour combiner l’une des valeurs suivantes (tant que la combinaison est logique) :

  • dbRelationUnique La relation est un-à-un.

  • dbRelationDontEnforce La relation n’est pas appliquée (aucune intégrité référentielle).

  • dbRelationInherited La relation existe dans une base de données noncurrente qui contient les deux tables jointes.

  • dbRelationUpdateCascade Les mises à jour sont en cascade (pour plus d’informations sur les cascades, voir Remarques).

  • dbRelationDeleteCascade Les suppressions sont en cascade.

lpszField
Pointeur vers une chaîne terminée par null contenant le nom d’un champ dans la table primaire (nommée par lpszTable).

lpszForeignField
Pointeur vers une chaîne terminée par null contenant le nom d’un champ dans la table étrangère (nommée par lpszForeignTable).

relinfo
Référence à un objet CDaoRelationInfo qui contient des informations sur la relation que vous souhaitez créer.

Notes

La relation ne peut pas impliquer une requête ou une table jointe à partir d’une base de données externe.

Utilisez la première version de la fonction lorsque la relation implique un champ dans chacune des deux tables. Utilisez la deuxième version lorsque la relation implique plusieurs champs. Le nombre maximal de champs dans une relation est de 14.

Cette action crée un objet de relation DAO sous-jacent, mais il s’agit d’un détail d’implémentation MFC, car l’encapsulation des objets relationnels est contenue dans la classe CDaoDatabase. MFC ne fournit pas de classe pour les relations.

Si vous définissez les attributs de l’objet relation pour activer les opérations en cascade, le moteur de base de données met automatiquement à jour ou supprime automatiquement les enregistrements d’une ou de plusieurs autres tables lorsque des modifications sont apportées aux tables de clés primaires associées.

Par exemple, supposons que vous établissez une relation de suppression en cascade entre une table Customers et une table Orders. Lorsque vous supprimez des enregistrements de la table Customers, les enregistrements de la table Orders associés à ce client sont également supprimés. En outre, si vous établissez des relations de suppression en cascade entre la table Orders et d’autres tables, les enregistrements de ces tables sont automatiquement supprimés lorsque vous supprimez des enregistrements de la table Customers.

Pour plus d’informations, consultez la rubrique « CreateRelation Method » dans L’aide de DAO.

CDaoDatabase ::D eleteQueryDef

Appelez cette fonction membre pour supprimer le querydef spécifié ( requête enregistrée) de la collection QueryDefs de l’objet CDaoDatabase .

void DeleteQueryDef(LPCTSTR lpszName);

Paramètres

lpszName
Nom de la requête enregistrée à supprimer.

Notes

Par la suite, cette requête n’est plus définie dans la base de données.

Pour plus d’informations sur la création d’objets querydef, consultez la classe CDaoQueryDef. Un objet querydef devient associé à un objet particulier CDaoDatabase lorsque vous construisez l’objet CDaoQueryDef , en lui transmettant un pointeur vers l’objet de base de données.

CDaoDatabase ::D eleteRelation

Appelez cette fonction membre pour supprimer une relation existante de la collection Relations de l’objet de base de données.

void DeleteRelation(LPCTSTR lpszName);

Paramètres

lpszName
Nom de la relation à supprimer.

Notes

Par la suite, la relation n’existe plus.

Pour plus d’informations, consultez la rubrique « Supprimer la méthode » dans l’aide de DAO.

CDaoDatabase ::D eleteTableDef

Appelez cette fonction membre pour supprimer la table spécifiée et toutes ses données de la collection TableDefs de l’objet CDaoDatabase .

void DeleteTableDef(LPCTSTR lpszName);

Paramètres

lpszName
Nom du tabledef à supprimer.

Notes

Par la suite, cette table n’est plus définie dans la base de données.

Remarque

Veillez à ne pas supprimer les tables système.

Pour plus d’informations sur la création d’objets tabledef, consultez la classe CDaoTableDef. Un objet tabledef devient associé à un objet particulier CDaoDatabase lorsque vous construisez l’objet CDaoTableDef , en lui transmettant un pointeur vers l’objet de base de données.

Pour plus d’informations, consultez la rubrique « Supprimer la méthode » dans l’aide de DAO.

CDaoDatabase ::Execute

Appelez cette fonction membre pour exécuter une requête d’action ou exécuter une instruction SQL sur la base de données.

void Execute(
    LPCTSTR lpszSQL,
    int nOptions = dbFailOnError);

Paramètres

lpszSQL
Pointeur vers une chaîne terminée par null contenant une commande SQL valide à exécuter.

nOptions
Entier qui spécifie les options relatives à l’intégrité de la requête. Vous pouvez utiliser l’opérateur OR au niveau du bit (|) pour combiner l’une des constantes suivantes, à condition que la combinaison soit logique. Par exemple, vous ne devez pas combiner dbInconsistent avec dbConsistent:

  • dbDenyWrite Refuser l’autorisation d’écriture à d’autres utilisateurs.

  • dbInconsistent (Par défaut) Mises à jour incohérentes.

  • dbConsistent Mises à jour cohérentes.

  • dbSQLPassThrough Pass-through SQL. Provoque le passage de l’instruction SQL à une source de données ODBC pour le traitement.

  • dbFailOnError Restaurer les mises à jour si une erreur se produit.

  • dbSeeChanges Générez une erreur d’exécution si un autre utilisateur modifie les données que vous modifiez.

Remarque

Si les deux dbInconsistent et dbConsistent sont inclus ou si aucun n’est inclus, le résultat est la valeur par défaut. Pour obtenir une explication de ces constantes, consultez la rubrique « Execute Method » dans L’aide de DAO.

Notes

Execute fonctionne uniquement pour les requêtes d’action ou les requêtes directes SQL qui ne retournent pas de résultats. Il ne fonctionne pas pour les requêtes select, qui retournent des enregistrements.

Pour obtenir une définition et des informations sur les requêtes d’action, consultez les rubriques « Requête d’action » et « Exécuter la méthode » dans l’aide DAO.

Conseil

Étant donné une instruction SQL correcte de manière syntactique et des autorisations appropriées, la Execute fonction membre ne échouera pas même si aucune ligne ne peut être modifiée ou supprimée. Par conséquent, utilisez toujours l’option dbFailOnError lors de l’utilisation de la Execute fonction membre pour exécuter une requête de mise à jour ou de suppression. Cette option entraîne la levée d’une exception de type CDaoException et restaure toutes les modifications réussies si l’un des enregistrements affectés est verrouillé et ne peut pas être mis à jour ou supprimé. Notez que vous pouvez toujours appeler GetRecordsAffected pour voir le nombre d’enregistrements affectés.

Appelez la fonction membre GetRecordsAffected de l’objet de base de données pour déterminer le nombre d’enregistrements affectés par l’appel le plus récent Execute . Par exemple, GetRecordsAffected retourne des informations sur le nombre d’enregistrements supprimés, mis à jour ou insérés lors de l’exécution d’une requête d’action. Le nombre retourné ne reflète pas les modifications apportées aux tables associées lorsque les mises à jour ou suppressions en cascade sont en vigueur.

Execute ne retourne pas un jeu d’enregistrements. L’utilisation Execute sur une requête qui sélectionne les enregistrements entraîne la levée d’une exception de type CDaoExceptionpar MFC. (Il n’existe aucune ExecuteSQL fonction membre analogue à CDatabase::ExecuteSQL.)

CDaoDatabase ::GetConnect

Appelez cette fonction membre pour récupérer le chaîne de connexion utilisé pour connecter l’objet CDaoDatabase à une base de données ODBC ou ISAM.

CString GetConnect();

Valeur de retour

L’chaîne de connexion si Open a été appelé avec succès sur une source de données ODBC ; sinon, une chaîne vide. Pour un Microsoft Jet (. Base de données MDB, la chaîne est toujours vide, sauf si vous la définissez pour une utilisation avec l’option utilisée avec la dbSQLPassThrough fonction Membre Execute ou utilisée pour ouvrir un jeu d’enregistrements.

Notes

La chaîne fournit des informations sur la source d’une base de données ouverte ou d’une base de données utilisée dans une requête directe. Le chaîne de connexion est composé d’un spécificateur de type de base de données et de zéro ou plusieurs paramètres séparés par des points-virgules.

Remarque

L’utilisation des classes DAO MFC pour se connecter à une source de données via ODBC est moins efficace que la connexion via une table jointe.

Remarque

Le chaîne de connexion est utilisé pour transmettre des informations supplémentaires à ODBC et à certains pilotes ISAM en fonction des besoins. Il n’est pas utilisé pour . Bases de données MDB. Pour les tables de base de données Microsoft Jet, l’chaîne de connexion est une chaîne vide ( » « ) sauf lorsque vous l’utilisez pour une requête directe SQL, comme décrit dans La valeur renvoyée ci-dessus.

Consultez la fonction Open member pour obtenir une description de la façon dont la chaîne de connexion est créée. Une fois que le chaîne de connexion a été défini dans l’appelOpen, vous pouvez l’utiliser ultérieurement pour vérifier le type, le chemin d’accès, l’ID utilisateur, le mot de passe ou la source de données ODBC de la base de données.

CDaoDatabase ::GetName

Appelez cette fonction membre pour récupérer le nom de la base de données actuellement ouverte, qui est le nom d’un fichier de base de données existant ou le nom d’une source de données ODBC inscrite.

CString GetName();

Valeur de retour

Chemin d’accès complet et nom de fichier de la base de données en cas de réussite ; sinon, un CString vide.

Notes

Si votre réseau prend en charge la convention d’affectation de noms uniforme (UNC), vous pouvez également spécifier un chemin d’accès réseau, par exemple « \\MYSERVER\\MYSHARE\\MYDIR\\MYDB. MDB ». (Les barres obliques inverses doubles sont requises dans les littéraux de chaîne, car « \ » est le caractère d’échappement C++.)

Vous pouvez, par exemple, afficher ce nom dans un titre. Si une erreur se produit pendant la récupération du nom, MFC lève une exception de type CDaoException.

Remarque

Pour de meilleures performances lorsque des bases de données externes sont accessibles, nous vous recommandons d’attacher des tables de base de données externes à une base de données Microsoft Jet (. MDB) au lieu de se connecter directement à la source de données.

Le type de base de données est indiqué par le fichier ou le répertoire vers lequel le chemin pointe, comme suit :

Pathname pointe vers.. Type de base de données
. Fichier MDB Base de données Microsoft Jet (Microsoft Access)
Répertoire qui contient . Fichier(s) DBF base de données dBASE
Répertoire contenant .XLS fichier Base de données Microsoft Excel
Répertoire qui contient . Fichier(s) PDX Base de données Paradox
Répertoire contenant des fichiers de base de données texte correctement mis en forme Base de données au format texte

Pour les bases de données ODBC telles que SQL Server et Oracle, le chaîne de connexion de la base de données identifie un nom de source de données (DSN) inscrit par ODBC.

CDaoDatabase ::GetQueryDefCount

Appelez cette fonction membre pour récupérer le nombre de requêtes définies dans la collection QueryDefs de la base de données.

short GetQueryDefCount();

Valeur de retour

Nombre de requêtes définies dans la base de données.

Notes

GetQueryDefCount est utile si vous devez parcourir tous les querydefs de la collection QueryDefs. Pour obtenir des informations sur une requête donnée dans la collection, consultez GetQueryDefInfo.

CDaoDatabase ::GetQueryDefInfo

Appelez cette fonction membre pour obtenir différents types d’informations sur une requête définie dans la base de données.

void GetQueryDefInfo(
    int nIndex,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetQueryDefInfo(
    LPCTSTR lpszName,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Paramètres

nIndex
Index de la requête prédéfinie dans la collection QueryDefs de la base de données, pour la recherche par index.

querydefinfo
Référence à un objet CDaoQueryDefInfo qui retourne les informations demandées.

dwInfoOptions
Options qui spécifient les informations sur le jeu d’enregistrements à récupérer. Les options disponibles sont répertoriées ici, ainsi que ce qu’elles entraînent le retour de la fonction sur le jeu d’enregistrements :

  • nom AFX_DAO_PRIMARY_INFO (valeur par défaut), type

  • AFX_DAO_SECONDARY_INFO Informations principales plus : Date de création, date de dernière mise à jour, retour d’enregistrements, mise à jour pouvant être mise à jour

  • AFX_DAO_ALL_INFO informations primaires et secondaires plus : SQL, Connect, ODBCTimeout

lpszName
Chaîne contenant le nom d’une requête définie dans la base de données, pour la recherche par nom.

Notes

Deux versions de la fonction sont fournies pour vous permettre de sélectionner une requête par index dans la collection QueryDefs de la base de données ou par le nom de la requête.

Pour obtenir une description des informations retournées dans querydefinfo, consultez la structure CDaoQueryDefInfo . Cette structure comporte des membres qui correspondent aux éléments d’informations répertoriés ci-dessus dans la description de dwInfoOptions. Si vous demandez un niveau d’information, vous obtenez également tous les niveaux d’information antérieurs.

CDaoDatabase ::GetQueryTimeout

Appelez cette fonction membre pour récupérer le nombre actuel de secondes à autoriser avant que les opérations suivantes sur la base de données connectée soient expirées.

short GetQueryTimeout();

Valeur de retour

Entier court contenant la valeur de délai d’expiration en secondes.

Notes

Une opération peut expirer en raison de problèmes d’accès réseau, de temps de traitement excessif des requêtes, et ainsi de suite. Bien que le paramètre soit en vigueur, il affecte toutes les opérations d’ouverture, d’ajout, de mise à jour et de suppression sur tous les jeux d’enregistrements associés à cet CDaoDatabase objet. Vous pouvez modifier le paramètre de délai d’attente actuel en appelant SetQueryTimeout. La modification de la valeur du délai d’expiration de la requête pour un jeu d’enregistrements après l’ouverture ne modifie pas la valeur du jeu d’enregistrements. Par exemple, les opérations de déplacement suivantes n’utilisent pas la nouvelle valeur. La valeur par défaut est initialement définie lorsque le moteur de base de données est initialisé.

La valeur par défaut des délais d’expiration de requête est extraite du Registre Windows. S’il n’existe aucun paramètre de Registre, la valeur par défaut est de 60 secondes. Toutes les bases de données ne prennent pas en charge la possibilité de définir une valeur de délai d’expiration de requête. Si vous définissez une valeur de délai d’expiration de requête de 0, aucun délai d’expiration ne se produit ; et la communication avec la base de données peuvent cesser de répondre. Ce comportement peut être utile pendant le développement. Si l’appel échoue, MFC lève une exception de type CDaoException.

Pour plus d’informations, consultez la rubrique « QueryTimeout Property » dans L’aide de DAO.

CDaoDatabase ::GetRecordsAffected

Appelez cette fonction membre pour déterminer le nombre d’enregistrements affectés par l’appel le plus récent de la fonction de membre Execute .

long GetRecordsAffected();

Valeur de retour

Entier long contenant le nombre d’enregistrements affectés.

Notes

La valeur retournée inclut le nombre d’enregistrements supprimés, mis à jour ou insérés par une requête d’action exécutée avec Execute. Le nombre retourné ne reflète pas les modifications apportées aux tables associées lorsque les mises à jour ou suppressions en cascade sont en vigueur.

Pour plus d’informations, consultez la rubrique « RecordsAffected Property » dans L’aide de DAO.

CDaoDatabase ::GetRelationCount

Appelez cette fonction membre pour obtenir le nombre de relations définies entre les tables de la base de données.

short GetRelationCount();

Valeur de retour

Nombre de relations définies entre les tables de la base de données.

Notes

GetRelationCount est utile si vous devez parcourir toutes les relations définies dans la collection Relations de la base de données. Pour obtenir des informations sur une relation donnée dans la collection, consultez GetRelationInfo.

Pour illustrer le concept d’une relation, considérez une table Fournisseurs et une table Products, qui peut avoir une relation un-à-plusieurs. Dans cette relation, un fournisseur peut fournir plusieurs produits. D’autres relations sont un-à-un et plusieurs-à-plusieurs.

CDaoDatabase ::GetRelationInfo

Appelez cette fonction membre pour obtenir des informations sur une relation spécifiée dans la collection Relations de la base de données.

void GetRelationInfo(
    int nIndex,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetRelationInfo(
    LPCTSTR lpszName,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Paramètres

nIndex
Index de l’objet relation dans la collection Relations de la base de données, pour la recherche par index.

relinfo
Référence à un objet CDaoRelationInfo qui retourne les informations demandées.

dwInfoOptions
Options qui spécifient les informations relatives à la relation à récupérer. Les options disponibles sont répertoriées ici, ainsi que ce qu’elles entraînent le retour de la fonction sur la relation :

  • nom AFX_DAO_PRIMARY_INFO (valeur par défaut), table, table étrangère

  • attributs AFX_DAO_SECONDARY_INFO, informations de champ

Field Information est un objet CDaoRelationFieldInfo contenant les champs de la table primaire impliquée dans la relation.

lpszName
Chaîne contenant le nom de l’objet relation, pour rechercher par nom.

Notes

Deux versions de cette fonction fournissent un accès par index ou par nom. Pour obtenir une description des informations retournées dans relinfo, consultez la structure CDaoRelationInfo . Cette structure comporte des membres qui correspondent aux éléments d’informations répertoriés ci-dessus dans la description de dwInfoOptions. Si vous demandez des informations à un niveau, vous obtenez également des informations à tous les niveaux antérieurs.

Remarque

Si vous définissez les attributs de l’objet relation pour activer des opérations en cascade (dbRelationUpdateCascades ou dbRelationDeleteCascades), le moteur de base de données Microsoft Jet met automatiquement à jour ou supprime automatiquement les enregistrements dans une ou plusieurs autres tables lorsque des modifications sont apportées aux tables de clés primaires associées. Par exemple, supposons que vous établissez une relation de suppression en cascade entre une table Customers et une table Orders. Lorsque vous supprimez des enregistrements de la table Customers, les enregistrements de la table Orders associés à ce client sont également supprimés. En outre, si vous établissez des relations de suppression en cascade entre la table Orders et d’autres tables, les enregistrements de ces tables sont automatiquement supprimés lorsque vous supprimez des enregistrements de la table Customers.

CDaoDatabase ::GetTableDefCount

Appelez cette fonction membre pour récupérer le nombre de tables définies dans la base de données.

short GetTableDefCount();

Valeur de retour

Nombre de tabledefs définis dans la base de données.

Notes

GetTableDefCount est utile si vous devez effectuer une boucle dans toutes les tablesdefs de la collection TableDefs de la base de données. Pour obtenir des informations sur une table donnée dans la collection, consultez GetTableDefInfo.

CDaoDatabase ::GetTableDefInfo

Appelez cette fonction membre pour obtenir différents types d’informations sur une table définie dans la base de données.

void GetTableDefInfo(
    int nIndex,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetTableDefInfo(
    LPCTSTR lpszName,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Paramètres

nIndex
Index de l’objet tabledef dans la collection TableDefs de la base de données, pour la recherche par index.

tabledefinfo
Référence à un objet CDaoTableDefInfo qui retourne les informations demandées.

dwInfoOptions
Options qui spécifient les informations sur la table à récupérer. Les options disponibles sont répertoriées ici, ainsi que ce qu’elles entraînent le retour de la fonction sur la relation :

  • nom AFX_DAO_PRIMARY_INFO (valeur par défaut), mise à jour, attributs

  • AFX_DAO_SECONDARY_INFO Informations principales plus : Date de création, Date de dernière mise à jour, Nom de la table source, Connexion

  • AFX_DAO_ALL_INFO informations primaires et secondaires plus : règle de validation, texte de validation, nombre d’enregistrements

lpszName
Nom de l’objet tabledef, pour la recherche par nom.

Notes

Deux versions de la fonction sont fournies pour vous permettre de sélectionner une table par index dans la collection TableDefs de la base de données ou par le nom de la table.

Pour obtenir une description des informations retournées dans tabledefinfo, consultez la structure CDaoTableDefInfo . Cette structure comporte des membres qui correspondent aux éléments d’informations répertoriés ci-dessus dans la description de dwInfoOptions. Si vous demandez des informations à un niveau, vous obtenez également des informations pour tous les niveaux antérieurs.

Remarque

L’option AFX_DAO_ALL_INFO fournit des informations qui peuvent être lentes à obtenir. Dans ce cas, le comptage des enregistrements dans la table peut prendre beaucoup de temps s’il existe de nombreux enregistrements.

CDaoDatabase ::GetVersion

Appelez cette fonction membre pour déterminer la version du fichier de base de données Microsoft Jet.

CString GetVersion();

Valeur de retour

CString qui indique la version du fichier de base de données associé à l’objet.

Notes

La valeur retournée représente le numéro de version sous la forme « major.minor » ; par exemple, « 3.0 ». Le numéro de version du produit (par exemple, 3.0) se compose du numéro de version (3), d’une période et du numéro de version (0). Les versions à ce jour sont 1.0, 1.1, 2.0 et 3.0.

Pour plus d’informations, consultez la rubrique « Version Property » dans l’aide de DAO.

CDaoDatabase ::IsOpen

Appelez cette fonction membre pour déterminer si l’objet CDaoDatabase est actuellement ouvert sur une base de données.

BOOL IsOpen() const;

Valeur de retour

Différent de zéro si l’objet CDaoDatabase est actuellement ouvert ; sinon, 0.

Notes

CDaoDatabase ::m_pDAODatabase

Contient un pointeur vers l’interface OLE de l’objet de base de données DAO sous-jacent à l’objet CDaoDatabase .

Notes

Utilisez ce pointeur si vous devez accéder directement à l’interface DAO.

Pour plus d’informations sur l’appel de DAO directement, consultez la Note technique 54.

CDaoDatabase ::m_pWorkspace

Contient un pointeur vers l’objet CDaoWorkspace qui contient l’objet de base de données.

Notes

Utilisez ce pointeur si vous devez accéder directement à l’espace de travail. Par exemple, pour obtenir des pointeurs vers d’autres objets de base de données dans la collection Databases de l’espace de travail.

CDaoDatabase ::Open

Vous devez appeler cette fonction membre pour initialiser un objet nouvellement construit CDaoDatabase qui représente une base de données existante.

virtual void Open(
    LPCTSTR lpszName,
    BOOL bExclusive = FALSE,
    BOOL bReadOnly = FALSE,
    LPCTSTR lpszConnect = _T(""));

Paramètres

lpszName
Expression de chaîne qui est le nom d’un Microsoft Jet existant (. Fichier de base de données MDB. Si le nom de fichier a une extension, il est nécessaire. Si votre réseau prend en charge la convention d’affectation de noms uniforme (UNC), vous pouvez également spécifier un chemin d’accès réseau, tel que « \\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB. MDB ». (Les barres obliques inverses doubles sont requises dans les littéraux de chaîne, car « \ » est le caractère d’échappement C++.)

Certaines considérations s’appliquent lors de l’utilisation de lpszName. Si tel est le cas :

  • Fait référence à une base de données déjà ouverte pour un accès exclusif par un autre utilisateur, MFC lève une exception de type CDaoException. Interceptez cette exception pour informer votre utilisateur que la base de données n’est pas disponible.

  • Chaîne vide ( » « ) et lpszConnect est « ODBC ; », une boîte de dialogue répertoriant tous les noms de sources de données ODBC inscrits s’affiche afin que l’utilisateur puisse sélectionner une base de données. Vous devez éviter les connexions directes aux sources de données ODBC ; utilisez plutôt une table jointe.

  • Sinon, ne fait pas référence à une base de données existante ou à un nom de source de données ODBC valide, MFC lève une exception de type CDaoException.

Remarque

Pour plus d’informations sur les codes d’erreur DAO, consultez le DAOERR. Fichier H. Pour plus d’informations, consultez la rubrique « Erreurs d’accès aux données interceptables » dans l’aide de DAO.

bExclusive
Valeur booléenne true si la base de données doit être ouverte pour un accès exclusif (non partagé) et FALSE si la base de données doit être ouverte pour l’accès partagé. Si vous omettez cet argument, la base de données est ouverte pour l’accès partagé.

bReadOnly
Valeur booléenne true si la base de données doit être ouverte pour l’accès en lecture seule et FALSE si la base de données doit être ouverte pour l’accès en lecture/écriture. Si vous omettez cet argument, la base de données est ouverte pour l’accès en lecture/écriture. Tous les jeux d’enregistrements dépendants héritent de cet attribut.

lpszConnect
Expression de chaîne utilisée pour ouvrir la base de données. Cette chaîne constitue les arguments de connexion ODBC. Vous devez fournir les arguments exclusifs et en lecture seule pour fournir une chaîne source. Si la base de données est une base de données Microsoft Jet (. MDB), cette chaîne est vide («  »). La syntaxe de la valeur par défaut ( _T(«  ») fournit la portabilité pour Unicode ainsi que les builds ANSI de votre application.

Notes

Open associe la base de données à l’objet DAO sous-jacent. Vous ne pouvez pas utiliser l’objet de base de données pour construire un jeu d’enregistrements, un tabledef ou des objets querydef tant qu’il n’est pas initialisé. Open ajoute l’objet de base de données à la collection Bases de données de l’espace de travail associé.

Utilisez les paramètres comme suit :

  • Si vous ouvrez un Microsoft Jet (. Base de données MDB, utilisez le paramètre lpszName et transmettez une chaîne vide pour le paramètre lpszConnect ou transmettez une chaîne de mot de passe du formulaire « ; PWD=password » si la base de données est protégée par mot de passe (. Bases de données MDB uniquement).

  • Si vous ouvrez une source de données ODBC, transmettez une chaîne de connexion ODBC valide dans lpszConnect et une chaîne vide dans lpszName.

Pour plus d’informations, consultez la rubrique « OpenDatabase Method » dans DAO Help.

Remarque

Pour de meilleures performances lors de l’accès aux bases de données externes, notamment les bases de données ISAM et les sources de données ODBC, il est recommandé d’attacher des tables de base de données externes à une base de données du moteur Microsoft Jet (. MDB) au lieu de se connecter directement à la source de données.

Il est possible qu’une tentative de connexion expire si, par exemple, l’hôte SGBD n’est pas disponible. Si la tentative de connexion échoue, Open lève une exception de type CDaoException.

Les remarques restantes s’appliquent uniquement aux bases de données ODBC :

Si la base de données est une base de données ODBC et que les paramètres de votre Open appel ne contiennent pas suffisamment d’informations pour établir la connexion, le pilote ODBC ouvre une boîte de dialogue pour obtenir les informations nécessaires de l’utilisateur. Lorsque vous appelez Open, votre chaîne de connexion, lpszConnect, est stocké en privé et est disponible en appelant la fonction membre GetConnect.

Si vous le souhaitez, vous pouvez ouvrir votre propre boîte de dialogue avant d’appeler Open pour obtenir des informations de l’utilisateur, telles qu’un mot de passe, puis ajouter ces informations au chaîne de connexion à laquelle vous passez Open. Vous pouvez également enregistrer le chaîne de connexion que vous transmettez (peut-être dans le Registre Windows) afin de pouvoir le réutiliser la prochaine fois que votre application appelle Open un CDaoDatabase objet.

Vous pouvez également utiliser le chaîne de connexion pour plusieurs niveaux d’autorisation de connexion (chacun pour un objet différentCDaoDatabase) ou pour transmettre d’autres informations spécifiques à la base de données.

CDaoDatabase ::SetQueryTimeout

Appelez cette fonction membre pour remplacer le nombre de secondes par défaut à autoriser avant les opérations suivantes sur le délai d’expiration de la base de données connectée.

void SetQueryTimeout(short nSeconds);

Paramètres

nSeconds
Nombre de secondes à autoriser avant qu’une tentative de requête expire.

Notes

Une opération peut expirer en raison de problèmes d’accès réseau, de temps de traitement excessif des requêtes, et ainsi de suite. Appelez SetQueryTimeout avant d’ouvrir votre jeu d’enregistrements ou avant d’appeler les fonctions de membre AddNew, Update ou Delete du jeu d’enregistrements si vous souhaitez modifier la valeur du délai d’expiration de la requête. Le paramètre affecte tous les appels AddNew, Update et Deleteouverts suivants à tous les jeux d’enregistrements associés à cet objet CDaoDatabase. La modification de la valeur du délai d’expiration de la requête pour un jeu d’enregistrements après l’ouverture ne modifie pas la valeur du jeu d’enregistrements. Par exemple, les opérations de déplacement suivantes n’utilisent pas la nouvelle valeur.

La valeur par défaut des délais d’expiration de requête est de 60 secondes. Toutes les bases de données ne prennent pas en charge la possibilité de définir une valeur de délai d’expiration de requête. Si vous définissez une valeur de délai d’expiration de requête de 0, aucun délai d’expiration ne se produit ; la communication avec la base de données peut cesser de répondre. Ce comportement peut être utile pendant le développement.

Pour plus d’informations, consultez la rubrique « QueryTimeout Property » dans L’aide de DAO.

Voir aussi

CObject, classe
Graphique hiérarchique
CDaoWorkspace, classe
CDaoRecordset, classe
CDaoTableDef, classe
CDaoQueryDef, classe
CDatabase, classe
CDaoException, classe