Partager via


CDaoRecordset::Open

Vous devez appeler cette fonction membre pour récupérer les enregistrements du recordset.

virtual void Open(
   int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
   LPCTSTR lpszSQL = NULL,
   int nOptions = 0 
);
virtual void Open(
   CDaoTableDef* pTableDef,
   int nOpenType = dbOpenTable,
   int nOptions = 0 
);
virtual void Open(
   CDaoQueryDef* pQueryDef,
   int nOpenType = dbOpenDynaset,
   int nOptions = 0 
);

Paramètres

  • nOpenType
    Une des valeurs suivantes :

    • Recordset de type feuille de réponse dynamique dedbOpenDynaset Un avec le défilement bidirectionnel.Valeur par défaut.

    • Recordset de type table dedbOpenTable Un avec le défilement bidirectionnel.

    • Recordset de type instantané dedbOpenSnapshot Un avec le défilement bidirectionnel.

  • lpszSQL
    Un pointeur de chaîne contenant un des éléments suivants :

    • Un pointeur de NULL .

    • Le nom d'un ou plusieurs tabledefs et/ou querydefs (séparés par des virgules).

    • Une instruction SQL SELECT (éventuellement avec une clause SQL WHERE ou d' ORDERBY ).

    • Une requête directe.

  • nOptions
    Un ou plusieurs des options répertoriées ci-dessous.La valeur par défaut est 0.Les valeurs possibles sont les suivantes :

    • dbAppendOnly vous pouvez uniquement ajouter de nouveaux enregistrements (recordset de type feuille de réponse dynamique uniquement).Cette option littéralement signifie que les enregistrements peuvent être ajoutés.Les classes de base de données ODBC MFC ont une option qui permet d'ajouter des enregistrements à récupérer et être ajoutés.

    • dbForwardOnly le recordset est un instantané avant seulement de défilement.

    • dbSeeChanges génèrent une exception si un autre utilisateur modifie les données que vous modifiez.

    • dbDenyWrite que d'autres utilisateurs ne peuvent pas modifier ou ajouter des enregistrements.

    • dbDenyRead d'autres utilisateurs ne peut pas afficher les enregistrements (recordset de type table uniquement).

    • dbReadOnly vous pouvez consulter des enregistrements ; d'autres utilisateurs peuvent les modifier.

    • Il permet des mises à jour incohérentes dedbInconsistent (recordset de type feuille de réponse dynamique uniquement).

    • Il permet des mises à jour la cohérence dedbConsistent uniquement (recordset de type feuille de réponse dynamique uniquement).

    [!REMARQUE]

    Les constantes dbConsistent et dbInconsistent s'excluent mutuellement.Vous pouvez utiliser un ou l'autre, mais pas les deux dans une instance donnée de Ouvrir.

  • pTableDef
    Un pointeur vers un objet de CDaoTableDef .Cette version est valide uniquement pour les recordsets de type table.En utilisant cette option, le pointeur d' CDaoDatabase utilisé pour construire CDaoRecordset n'est pas utilisé ; au contraire, la base de données dans laquelle le tabledef réside est utilisée.

  • pQueryDef
    Un pointeur vers un objet de CDaoQueryDef .Cette version est valide uniquement pour les recordsets de type feuille de réponse dynamique et de type instantané.En utilisant cette option, le pointeur d' CDaoDatabase utilisé pour construire CDaoRecordset n'est pas utilisé ; au contraire, la base de données dans laquelle le querydef réside est utilisée.

Notes

Avant d'appeler Ouvrir, vous devez construire l'objet recordset.Pour ce faire, plusieurs méthodes sont possibles :

  • Lorsque vous construisez l'objet recordset, passez un pointeur vers un objet d' CDaoDatabase déjà ouvert.

  • Lorsque vous construisez l'objet recordset, passez un pointeur vers un objet d' CDaoDatabase qui n'est pas ouvert.Le recordset ouvre un objet d' CDaoDatabase , mais ne le ferme pas lorsque l'objet recordset se ferme.

  • Lorsque vous construisez l'objet recordset, passez un pointeur de NULL .L'objet recordset appelle GetDefaultDBName pour obtenir le nom du fichier Microsoft Access .MDB à ouvrir.Le recordset ensuite ouvre un objet d' CDaoDatabase et le maintient ouvert tant que le recordset est ouvert.Lorsque vous appelez Fermer du recordset, l'objet d' CDaoDatabase est également fermé.

    [!REMARQUE]

    Lorsque le recordset ouvre l'objet d' CDaoDatabase , il ouvre la source de données avec un accès non exclusif.

Pour la version de Ouvrir qui utilise le paramètre d' lpszSQL , une fois que le recordset est ouvert vous pouvez récupérer les enregistrements de plusieurs façons.La première option consiste à avoir de fonctions de DFX dans votre DoFieldExchange.La deuxième option consiste à utiliser la liaison dynamique en appelant la fonction membre d' GetFieldValue .Ces options peuvent être implémentées séparément ou en association.S'ils sont combinés, vous devez passer dans l'instruction SQL vous-même dans l'appel à Ouvrir.

Lorsque vous utilisez la deuxième version de Ouvrir où vous passez un objet d' CDaoTableDef , les colonnes résultantes seront disponibles pour vous liiez via DoFieldExchange et du mécanisme DFX, et/ou les lient dynamiquement via GetFieldValue.

[!REMARQUE]

Vous pouvez uniquement appeler Ouvrir à l'aide d'un objet d' CDaoTableDef pour les recordsets de type table.

Lorsque vous utilisez la troisième version de Ouvrir où vous passez un objet d' CDaoQueryDef , cette requête est exécutée, et les colonnes résultantes seront disponibles pour vous liiez via DoFieldExchange et du mécanisme DFX, et/ou les lient dynamiquement via GetFieldValue.

[!REMARQUE]

Vous pouvez uniquement appeler Ouvrir à l'aide d'un objet d' CDaoQueryDef pour les recordsets de type feuille de réponse dynamique et de type instantané.

Pour la première version de Ouvrir qui utilise le paramètre d' lpszSQL , les enregistrements sont sélectionnés selon des critères présentés dans le tableau suivant.

Valeur du paramètre lpszSQL

Les enregistrements sélectionnés sont déterminés par

Exemple

NULL

La chaîne retournée par GetDefaultSQL.

 

Une liste avec la virgule comme séparateur d'un ou plusieurs tabledefs et/ou noms de querydef.

Toutes les colonnes représentées dans DoFieldExchange.

"Customer"

Tableau de FROM de liste de colonnes deSELECT

Les colonnes spécifiées de tabledefs spécifiés et/ou

"SELECT CustId, CustName

FROM Customer"

La procédure habituelle consiste à passer NULL à Ouvrir; dans ce cas, Ouvrir appelle GetDefaultSQL, une fonction membre substituable que ClassWizard génère l'erreur lors de la création CDaoRecordsetclasse dérivée.Cette valeur présente les noms de tabledefs et/ou querydef que vous avez spécifiés dans l'assistant classe.Vous pouvez à la place spécifier d'autres informations du paramètre d' lpszSQL .

Celui que vous passer, les éléments de Ouvrir une chaîne finale SQL pour la requête (la chaîne peut avoir SQL WHERE et les clauses d' ORDERBY ajoutées à lpszSQL vous chaînes sont passées) et exécute la requête.Vous pouvez examiner la chaîne construite en appelant GetSQL après avoir appelé Ouvrir.

Les données membres de champ de la classe de recordset sont liées aux colonnes de données sélectionnées.Si les enregistrements retournés, le premier enregistrement redevient l'enregistrement courant.

Si vous souhaitez définir des options pour le recordset, tel qu'un filtre ou un tri, affectez m_strSort ou m_strFilter après avoir construit l'objet recordset mais avant d'appeler Ouvrir.Si vous souhaitez actualiser les enregistrements du recordset après que le recordset est déjà ouvert, appelez Requery.

Si vous appelez Ouvrir sur un recordset de type feuille de réponse dynamique ou de type instantané, ou si la source de données fait référence à une instruction SQL ou un tabledef qui représente une table jointe, vous ne pouvez pas utiliser dbOpenTable pour l'argument de type ; si vous le faites, MFC lève une exception.Pour déterminer si un objet de tabledef représente une table jointe, créez un objet de CDaoTableDef et appelez sa fonction membre de GetConnect .

Utilisez la balise de dbSeeChanges si vous souhaitez les modifications d'interruption apportées par un autre utilisateur ou un programme différent sur votre ordinateur lorsque vous êtes modification ou suppression du même enregistrement.Par exemple, si deux utilisateurs commencent à modifier le même enregistrement, le premier utilisateur pour appeler la fonction membre de Mettre à jour réussit.Lorsque Mettre à jour est appelé par le second utilisateur, CDaoException est levée.De même, si le deuxième utilisateur essaie d'appeler Supprimer pour supprimer l'enregistrement, et lui a déjà été modifiés par le premier utilisateur, CDaoException se produit.

En général, si l'utilisateur obtient cet CDaoException tout en maintenant, votre code doit actualiser le contenu des champs et récupérer les valeurs récemment modifiées.Si l'exception se produit en cours de suppression, votre code peut afficher les données de nouvel enregistrement à l'utilisateur et un message indiquant que les données ont été récemment changé.à ce stade, votre code peut demander une confirmation que l'utilisateur souhaite toujours supprimer l'enregistrement.

ConseilConseil

Utilisez l'option avant seulement de défilement (dbForwardOnly) pour améliorer les performances lorsque votre application effectue un monopasse au sein d'un recordset ouvert d'une source de données ODBC.

Pour des informations connexes, consultez la rubrique « méthode d'OpenRecordset » dans l'aide de DAO.

Configuration requise

Header: afxdao.h

Voir aussi

Référence

Classe de CDaoRecordset

Graphique de la hiérarchie

CDaoRecordset::Close

CDaoRecordset::CDaoRecordset