CDaoRecordset, classe

Représente un ensemble d'enregistrements sélectionnés à partir d'une source de données.

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 CDaoRecordset : public CObject

Membres

Constructeurs publics

Nom Description
CDaoRecordset ::CDaoRecordset Construit un objet CDaoRecordset.

Méthodes publiques

Nom Description
CDaoRecordset ::AddNew Prépare l’ajout d’un nouvel enregistrement. Appelez La mise à jour pour terminer l’ajout.
CDaoRecordset ::CanAppend Retourne une valeur différente de zéro si de nouveaux enregistrements peuvent être ajoutés au jeu d’enregistrements via la fonction membre AddNew .
CDaoRecordset ::CanBookmark Retourne une valeur différente de zéro si le jeu d’enregistrements prend en charge les signets.
CDaoRecordset ::CancelUpdate Annule les mises à jour en attente en raison d’une opération Edit ou AddNew .
CDaoRecordset ::CanRestart Retourne une valeur différente de zéro si Requery peut être appelé pour réexécuter la requête du jeu d’enregistrements.
CDaoRecordset ::CanScroll Retourne une valeur différente de zéro si vous pouvez faire défiler les enregistrements.
CDaoRecordset ::CanTransact Retourne une valeur différente de zéro si la source de données prend en charge les transactions.
CDaoRecordset ::CanUpdate Retourne une valeur différente de zéro si le jeu d’enregistrements peut être mis à jour (vous pouvez ajouter, mettre à jour ou supprimer des enregistrements).
CDaoRecordset ::Close Ferme le jeu d’enregistrements.
CDaoRecordset ::D elete Supprime l’enregistrement actif du jeu d’enregistrements. Vous devez faire défiler explicitement vers un autre enregistrement après la suppression.
CDaoRecordset ::D oFieldExchange Appelé pour échanger des données (dans les deux sens) entre les membres de données de champ du jeu d’enregistrements et l’enregistrement correspondant sur la source de données. Implémente l’échange de champs d’enregistrement DAO (DFX).
CDaoRecordset ::Edit Prépare les modifications apportées à l’enregistrement actif. Appel Update pour terminer la modification.
CDaoRecordset ::FillCache Remplit tout ou partie d’un cache local pour un objet recordset qui contient des données d’une source de données ODBC.
CDaoRecordset ::Find Localise le premier, suivant, précédent ou dernier emplacement d’une chaîne particulière dans un jeu d’enregistrements de type feuille de réponse dynamique qui satisfait aux critères spécifiés et rend cet enregistrement actif.
CDaoRecordset ::FindFirst Localise le premier enregistrement d’un jeu d’enregistrements de type feuille de réponse dynamique ou de type instantané qui satisfait aux critères spécifiés et rend cet enregistrement l’enregistrement actif.
CDaoRecordset ::FindLast Localise le dernier enregistrement dans un jeu d’enregistrements de type feuille de réponse dynamique ou de type instantané qui satisfait aux critères spécifiés et rend cet enregistrement l’enregistrement actif.
CDaoRecordset ::FindNext Localise l’enregistrement suivant dans un jeu d’enregistrements de type feuille de réponse dynamique ou de type instantané qui satisfait aux critères spécifiés et rend cet enregistrement l’enregistrement actif.
CDaoRecordset ::FindPrev Recherche l’enregistrement précédent dans un jeu d’enregistrements de type feuille de réponse dynamique ou de type instantané qui satisfait aux critères spécifiés et rend cet enregistrement l’enregistrement actif.
CDaoRecordset ::GetAbsolutePosition Retourne le numéro d’enregistrement de l’enregistrement actif d’un objet recordset.
CDaoRecordset ::GetBookmark Retourne une valeur qui représente le signet sur un enregistrement.
CDaoRecordset ::GetCacheSize Retourne une valeur qui spécifie le nombre d’enregistrements dans un jeu d’enregistrements de type feuille de réponse dynamique contenant des données à mettre en cache localement à partir d’une source de données ODBC.
CDaoRecordset ::GetCacheStart Retourne une valeur qui spécifie le signet du premier enregistrement dans le jeu d’enregistrements à mettre en cache.
CDaoRecordset ::GetCurrentIndex Retourne un CString nom contenant l’index le plus récemment utilisé sur un type CDaoRecordsettable indexé.
CDaoRecordset ::GetDateCreated Retourne la date et l’heure de création de la table de base sous-jacente à un CDaoRecordset objet
CDaoRecordset ::GetDateLastUpdated Retourne la date et l’heure de la modification la plus récente apportée à la conception d’une table de base sous-jacente à un CDaoRecordset objet.
CDaoRecordset ::GetDefaultDBName Retourne le nom de la source de données par défaut.
CDaoRecordset ::GetDefaultSQL Appelé pour obtenir la chaîne SQL par défaut à exécuter.
CDaoRecordset ::GetEditMode Retourne une valeur qui indique l’état de modification de l’enregistrement actif.
CDaoRecordset ::GetFieldCount Retourne une valeur qui représente le nombre de champs d’un jeu d’enregistrements.
CDaoRecordset ::GetFieldInfo Retourne des types d’informations spécifiques sur les champs du jeu d’enregistrements.
CDaoRecordset ::GetFieldValue Retourne la valeur d’un champ dans un jeu d’enregistrements.
CDaoRecordset ::GetIndexCount Récupère le nombre d’index d’une table sous-jacente à un jeu d’enregistrements.
CDaoRecordset ::GetIndexInfo Retourne différents types d’informations sur un index.
CDaoRecordset ::GetLastModifiedBookmark Permet de déterminer l’enregistrement le plus récemment ajouté ou mis à jour.
CDaoRecordset ::GetLockingMode Retourne une valeur qui indique le type de verrouillage qui est en vigueur pendant la modification.
CDaoRecordset ::GetName Retourne un CString nom contenant le jeu d’enregistrements.
CDaoRecordset ::GetParamValue Récupère la valeur actuelle du paramètre spécifié stocké dans l’objet DAOParameter sous-jacent.
CDaoRecordset ::GetPercentPosition Retourne la position de l’enregistrement actif sous la forme d’un pourcentage du nombre total d’enregistrements.
CDaoRecordset ::GetRecordCount Retourne le nombre d’enregistrements accessibles dans un objet recordset.
CDaoRecordset ::GetSQL Obtient la chaîne SQL utilisée pour sélectionner des enregistrements pour le jeu d’enregistrements.
CDaoRecordset ::GetType Appelé pour déterminer le type d’un jeu d’enregistrements : type table, type dynaset ou type d’instantané.
CDaoRecordset ::GetValidationRule Retourne une CString valeur contenant la valeur qui valide les données à mesure qu’elles sont entrées dans un champ.
CDaoRecordset ::GetValidationText Récupère le texte affiché lorsqu’une règle de validation n’est pas satisfaite.
CDaoRecordset ::IsBOF Retourne une valeur différente de zéro si le jeu d’enregistrements a été positionné avant le premier enregistrement. Il n’y a pas d’enregistrement actif.
CDaoRecordset ::IsDeleted Retourne une valeur différente de zéro si le jeu d’enregistrements est positionné sur un enregistrement supprimé.
CDaoRecordset ::IsEOF Retourne une valeur différente de zéro si le jeu d’enregistrements a été positionné après le dernier enregistrement. Il n’y a pas d’enregistrement actif.
CDaoRecordset ::IsFieldDirty Retourne une valeur différente de zéro si le champ spécifié dans l’enregistrement actif a été modifié.
CDaoRecordset ::IsFieldNull Retourne une valeur différente de zéro si le champ spécifié dans l’enregistrement actif est Null (sans valeur).
CDaoRecordset ::IsFieldNullable Retourne une valeur différente de zéro si le champ spécifié dans l’enregistrement actif peut être défini sur Null (sans valeur).
CDaoRecordset ::IsOpen Retourne une valeur différente de zéro si Open a été appelé précédemment.
CDaoRecordset ::Move Positionne le jeu d’enregistrements sur un nombre spécifié d’enregistrements de l’enregistrement actif dans les deux sens.
CDaoRecordset ::MoveFirst Positionne l’enregistrement actif sur le premier enregistrement dans le jeu d’enregistrements.
CDaoRecordset ::MoveLast Positionne l’enregistrement actif sur le dernier enregistrement dans le jeu d’enregistrements.
CDaoRecordset ::MoveNext Positionne l’enregistrement actif sur l’enregistrement suivant dans le jeu d’enregistrements .
CDaoRecordset ::MovePrev Positionne l’enregistrement actif sur l’enregistrement précédent dans le jeu d’enregistrements.
CDaoRecordset ::Open Crée un jeu d’enregistrements à partir d’une table, d’une feuille de réponse dynamique ou d’un instantané.
CDaoRecordset ::Requery Exécute à nouveau la requête du jeu d’enregistrements pour actualiser les enregistrements sélectionnés.
CDaoRecordset ::Seek Localise l’enregistrement dans un objet recordset de type table indexé qui satisfait aux critères spécifiés pour l’index actif et rend cet enregistrement l’enregistrement actif.
CDaoRecordset ::SetAbsolutePosition Définit le numéro d’enregistrement de l’enregistrement actif d’un objet recordset.
CDaoRecordset ::SetBookmark Positionne le jeu d’enregistrements sur un enregistrement contenant le signet spécifié.
CDaoRecordset ::SetCacheSize Définit une valeur qui spécifie le nombre d’enregistrements dans un jeu d’enregistrements de type feuille de réponse dynamique contenant des données à mettre en cache localement à partir d’une source de données ODBC.
CDaoRecordset ::SetCacheStart Définit une valeur qui spécifie le signet du premier enregistrement dans le jeu d’enregistrements à mettre en cache.
CDaoRecordset ::SetCurrentIndex Appelé pour définir un index sur un jeu d’enregistrements de type table.
CDaoRecordset ::SetFieldDirty Marque le champ spécifié dans l’enregistrement actif comme modifié.
CDaoRecordset ::SetFieldNull Définit la valeur du champ spécifié dans l’enregistrement actif sur Null (sans valeur).
CDaoRecordset ::SetFieldValue Définit la valeur d’un champ dans un jeu d’enregistrements.
CDaoRecordset ::SetFieldValueNull Définit la valeur d’un champ dans un jeu d’enregistrements sur Null. (sans valeur).
CDaoRecordset ::SetLockingMode Définit une valeur qui indique le type de verrouillage à mettre en vigueur lors de la modification.
CDaoRecordset ::SetParamValue Définit la valeur actuelle du paramètre spécifié stocké dans l’objet DAOParameter sous-jacent
CDaoRecordset ::SetParamValueNull Définit la valeur actuelle du paramètre spécifié sur Null (sans valeur).
CDaoRecordset ::SetPercentPosition Définit la position de l’enregistrement actif sur un emplacement correspondant à un pourcentage du nombre total d’enregistrements dans un jeu d’enregistrements.
CDaoRecordset ::Update Termine une AddNew opération en Edit enregistrant les données nouvelles ou modifiées sur la source de données.

Membres de données publics

Nom Description
CDaoRecordset ::m_bCheckCacheForDirtyFields Contient un indicateur indiquant si les champs sont automatiquement marqués comme modifiés.
CDaoRecordset ::m_nFields Contient le nombre de membres de données de champ dans la classe recordset et le nombre de colonnes sélectionnées par le jeu d’enregistrements de la source de données.
CDaoRecordset ::m_nParams Contient le nombre de membres de données de paramètre dans la classe recordset : nombre de paramètres passés avec la requête du jeu d’enregistrements
CDaoRecordset ::m_pDAORecordset Pointeur vers l’interface DAO sous-jacente à l’objet recordset.
CDaoRecordset ::m_pDatabase Base de données source pour ce jeu de résultats. Contient un pointeur vers un objet CDaoDatabase .
CDaoRecordset ::m_strFilter Contient une chaîne utilisée pour construire une instruction SQL WHERE .
CDaoRecordset ::m_strSort Contient une chaîne utilisée pour construire une instruction SQL ORDER BY .

Notes

Les objets appelés « recordsets », CDaoRecordset sont disponibles sous les trois formes suivantes :

  • Les recordsets de type table représentent une table de base que vous pouvez utiliser pour examiner, ajouter, modifier ou supprimer des enregistrements d’une seule table de base de données.

  • Les recordsets de type Dynaset sont le résultat d’une requête qui peut avoir des enregistrements pouvant être mis à jour. Ces jeux d’enregistrements sont un ensemble d’enregistrements que vous pouvez utiliser pour examiner, ajouter, modifier ou supprimer des enregistrements d’une table ou d’une table de base de données sous-jacente. Les recordsets de type Dynaset peuvent contenir des champs d’une ou plusieurs tables d’une base de données.

  • Les jeux d’enregistrements de type instantané sont une copie statique d’un ensemble d’enregistrements que vous pouvez utiliser pour rechercher des données ou générer des rapports. Ces recordsets peuvent contenir des champs d’une ou plusieurs tables d’une base de données, mais ne peuvent pas être mis à jour.

Chaque forme de jeu d’enregistrements représente un ensemble d’enregistrements fixes au moment de l’ouverture du jeu d’enregistrements. Lorsque vous faites défiler vers un enregistrement dans un jeu d’enregistrements de type table ou un jeu d’enregistrements de type dynaset, il reflète les modifications apportées à l’enregistrement après l’ouverture du jeu d’enregistrements, par d’autres utilisateurs ou par d’autres recordsets dans votre application. (Impossible de mettre à jour un jeu d’enregistrements de type instantané.) Vous pouvez utiliser CDaoRecordset directement ou dériver une classe recordset spécifique à l’application à partir de CDaoRecordset. Vous pouvez ensuite :

  • Faites défiler les enregistrements.

  • Définissez un index et recherchez rapidement des enregistrements à l’aide de Seek (jeux d’enregistrements de type table uniquement).

  • Recherchez des enregistrements basés sur une comparaison de chaînes : « < », « <= », « = », « >="ou « > » (jeux d’enregistrements de type dynaset et de type d’instantané).

  • Mettez à jour les enregistrements et spécifiez un mode de verrouillage (à l’exception des jeux d’enregistrements de type instantané).

  • Filtrez le jeu d’enregistrements pour limiter les enregistrements qu’il sélectionne parmi ceux disponibles sur la source de données.

  • Triez le jeu d’enregistrements.

  • Paramétrez le jeu d’enregistrements pour personnaliser sa sélection avec des informations non connues jusqu’au moment de l’exécution.

La classe CDaoRecordset fournit une interface similaire à celle de la classe CRecordset. La principale différence est que la classe CDaoRecordset accède aux données via un objet DAO (Data Access Object) basé sur OLE. La classe CRecordset accède au SGBD par le biais d’Open Database Connectivity (ODBC) et d’un pilote ODBC pour ce SGBD.

Remarque

Les classes de base de données DAO sont distinctes des classes de base de données MFC basées sur Open Database Connectivity (ODBC). Tous les noms de classes de base de données DAO ont le préfixe « CDao ». Vous pouvez toujours accéder aux sources de données ODBC avec les classes DAO ; les classes DAO offrent généralement des fonctionnalités supérieures, car elles sont spécifiques au moteur de base de données Microsoft Jet.

Vous pouvez utiliser CDaoRecordset directement ou dériver une classe à partir de CDaoRecordset. Pour utiliser une classe recordset dans les deux cas, ouvrez une base de données et construisez un objet recordset, en transmettant au constructeur un pointeur vers votre CDaoDatabase objet. Vous pouvez également construire un CDaoRecordset objet et laisser MFC créer un objet temporaire CDaoDatabase pour vous. Appelez ensuite la fonction membre Open du jeu d’enregistrements, en spécifiant si l’objet est un jeu d’enregistrements de type table, un jeu d’enregistrements de type dynaset ou un jeu d’enregistrements de type instantané. L’appel Open sélectionne les données de la base de données et récupère le premier enregistrement.

Utilisez les fonctions membres de l’objet et les membres de données pour faire défiler les enregistrements et les exploiter. Les opérations disponibles varient selon que l’objet est un jeu d’enregistrements de type table, un jeu d’enregistrements de type dynaset ou un jeu d’enregistrements de type instantané, et s’il est mis à jour ou en lecture seule. Cela dépend de la capacité de la base de données ou de la source de données ODBC (Open Database Connectivity). Pour actualiser les enregistrements qui ont peut-être été modifiés ou ajoutés depuis l’appelOpen, appelez la fonction membre Requery de l’objet. Appelez la fonction membre de Close l’objet et détruisez l’objet lorsque vous avez terminé avec celui-ci.

CDaoRecordset utilise l’échange de champs d’enregistrement DAO (DFX) pour prendre en charge la lecture et la mise à jour des champs d’enregistrement par le biais de membres C++ de type sécurisé de votre CDaoRecordset classe ou CDaoRecordsetdérivée. Vous pouvez également implémenter une liaison dynamique de colonnes dans une base de données sans utiliser le mécanisme DFX à l’aide de GetFieldValue et de SetFieldValue.

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

Hiérarchie d'héritage

CObject

CDaoRecordset

Spécifications

En-tête : afxdao.h

CDaoRecordset ::AddNew

Appelez cette fonction membre pour ajouter un nouvel enregistrement à un jeu d’enregistrements de type table ou de type dynaset.

virtual void AddNew();

Notes

Les champs de l’enregistrement sont initialement Null. (Dans la terminologie de la base de données, Null signifie « sans valeur » et n’est pas identique à NULL en C++.) Pour terminer l’opération, vous devez appeler la fonction membre Update . Update enregistre vos modifications dans la source de données.

Attention

Si vous modifiez un enregistrement, puis faites défiler vers un autre enregistrement sans appeler Update, vos modifications sont perdues sans avertissement.

Si vous ajoutez un enregistrement à un jeu d’enregistrements de type dynaset en appelant AddNew, l’enregistrement est visible dans le jeu d’enregistrements et inclus dans la table sous-jacente où il devient visible par les nouveaux CDaoRecordset objets.

La position du nouvel enregistrement dépend du type de jeu d’enregistrements :

  • Dans un jeu d’enregistrements de type dynaset, où le nouvel enregistrement est inséré n’est pas garanti. Ce comportement a changé avec Microsoft Jet 3.0 pour des raisons de performances et de concurrence. Si votre objectif est de faire de l’enregistrement actif l’enregistrement que vous venez d’ajouter, obtenez le signet du dernier enregistrement modifié et passez à ce signet :
rs.SetBookmark(rs.GetLastModifiedBookmark());
  • Dans un jeu d’enregistrements de type table pour lequel un index a été spécifié, les enregistrements sont retournés dans leur emplacement approprié dans l’ordre de tri. Si aucun index n’a été spécifié, de nouveaux enregistrements sont retournés à la fin du jeu d’enregistrements.

Enregistrement actif avant que vous n’utilisiez AddNew reste actif. Si vous souhaitez rendre le nouvel enregistrement actif et que l’ensemble d’enregistrements prend en charge les signets, appelez SetBookmark au signet identifié par le paramètre de propriété LastModified de l’objet recordset DAO sous-jacent. Cela est utile pour déterminer la valeur des champs compteur (incrément automatique) dans un enregistrement ajouté. Pour plus d’informations, consultez GetLastModifiedBookmark.

Si la base de données prend en charge les transactions, vous pouvez faire partie de votre AddNew appel d’une transaction. Pour plus d’informations sur les transactions, consultez la classe CDaoWorkspace. Vous devez appeler CDaoWorkspace ::BeginTrans avant d’appeler AddNew.

Il est illégal d’appeler AddNew un jeu d’enregistrements dont Open la fonction membre n’a pas été appelée. A CDaoException est levée si vous appelez AddNew un jeu d’enregistrements qui ne peut pas être ajouté. Vous pouvez déterminer si le jeu d’enregistrements peut être mis à jour en appelant CanAppend.

Le framework marque les membres de données de champ modifiés pour s’assurer qu’ils seront écrits dans l’enregistrement sur la source de données par le mécanisme d’échange de champs d’enregistrement DAO (DFX). La modification de la valeur d’un champ définit généralement le champ sale automatiquement. Vous devrez donc rarement appeler SetFieldDirty vous-même, mais vous pouvez parfois vous assurer que les colonnes sont explicitement mises à jour ou insérées indépendamment de la valeur du membre de données de champ. Le mécanisme DFX utilise également l’utilisation de PSEUDO NULL. Pour plus d’informations, consultez CDaoFieldExchange ::m_nOperation.

Si le mécanisme de double mise en mémoire tampon n’est pas utilisé, la modification de la valeur du champ ne définit pas automatiquement le champ comme étant sale. Dans ce cas, il est nécessaire de définir explicitement le champ sale. L’indicateur contenu dans m_bCheckCacheForDirtyFields contrôle cette vérification automatique des champs.

Remarque

Si les enregistrements sont mis en mémoire tampon double (autrement dit, la vérification automatique des champs est activée), l’appel CancelUpdate restaure les variables membres sur les valeurs qu’ils avaient avant AddNew ou Edit a été appelées.

Pour plus d’informations, consultez les rubriques « AddNew Method », « CancelUpdate Method », « LastModified Property » et « EditMode Property » dans L’aide DAO.

CDaoRecordset ::CanAppend

Appelez cette fonction membre pour déterminer si le jeu d’enregistrements ouvert précédemment vous permet d’ajouter de nouveaux enregistrements en appelant la fonction membre AddNew .

BOOL CanAppend() const;

Valeur de retour

Différent de zéro si le jeu d’enregistrements autorise l’ajout de nouveaux enregistrements ; sinon 0. CanAppend renvoie 0 si vous avez ouvert le jeu d’enregistrements en lecture seule.

Notes

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

CDaoRecordset ::CanBookmark

Appelez cette fonction membre pour déterminer si le jeu d’enregistrements ouvert précédemment vous permet de marquer individuellement les enregistrements à l’aide de signets.

BOOL CanBookmark();

Valeur de retour

Différent de zéro si le jeu d’enregistrements prend en charge les signets, sinon 0.

Notes

Si vous utilisez des recordsets basés entièrement sur les tables du moteur de base de données Microsoft Jet, les signets peuvent être utilisés à l’exception des recordsets de type instantané marqués comme des jeux d’enregistrements de défilement vers l’avant uniquement. D’autres produits de base de données (sources de données ODBC externes) peuvent ne pas prendre en charge les signets.

Pour plus d’informations, consultez la rubrique « Propriété bookmarkable » dans l’aide de DAO.

CDaoRecordset ::CancelUpdate

La CancelUpdate fonction membre annule les mises à jour en attente en raison d’une opération Edit ou AddNew .

virtual void CancelUpdate();

Notes

Par exemple, si une application appelle la Edit fonction ou AddNew membre et n’a pas appelé Update, CancelUpdate annule les modifications apportées après Edit ou AddNew a été appelée.

Remarque

Si les enregistrements sont mis en mémoire tampon double (autrement dit, la vérification automatique des champs est activée), l’appel CancelUpdate restaure les variables membres sur les valeurs qu’ils avaient avant AddNew ou Edit a été appelées.

Si aucune opération n’est Edit AddNew en attente, CancelUpdate MFC lève une exception. Appelez la fonction membre GetEditMode pour déterminer s’il existe une opération en attente qui peut être annulée.

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

CDaoRecordset ::CanRestart

Appelez cette fonction membre pour déterminer si le jeu d’enregistrements autorise le redémarrage de sa requête (pour actualiser ses enregistrements) en appelant la Requery fonction membre.

BOOL CanRestart();

Valeur de retour

Différent de zéro si Requery vous pouvez appeler pour réexécuter la requête du jeu d’enregistrements, sinon 0.

Notes

Les recordsets de type table ne prennent pas en charge Requery.

Si Requery ce n’est pas pris en charge, appelez Fermer , puis Ouvrez pour actualiser les données. Vous pouvez appeler Requery pour mettre à jour la requête de paramètre sous-jacente d’un objet recordset après la modification des valeurs de paramètre.

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

CDaoRecordset ::CanScroll

Appelez cette fonction membre pour déterminer si le jeu d’enregistrements autorise le défilement.

BOOL CanScroll() const;

Valeur de retour

Différent de zéro si vous pouvez faire défiler les enregistrements, sinon 0.

Notes

Si vous appelez Open avec dbForwardOnly, le jeu d’enregistrements ne peut faire défiler que vers l’avant.

Pour plus d’informations, consultez la rubrique « Positionnement du pointeur d’enregistrement actuel avec DAO » dans l’aide de DAO.

CDaoRecordset ::CanTransact

Appelez cette fonction membre pour déterminer si le jeu d’enregistrements autorise les transactions.

BOOL CanTransact();

Valeur de retour

Différent de zéro si la source de données sous-jacente prend en charge les transactions, sinon 0.

Notes

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

CDaoRecordset ::CanUpdate

Appelez cette fonction membre pour déterminer si le jeu d’enregistrements peut être mis à jour.

BOOL CanUpdate() const;

Valeur de retour

Différent de zéro si le jeu d’enregistrements peut être mis à jour (ajouter, mettre à jour et supprimer des enregistrements), sinon 0.

Notes

Un recordset peut être en lecture seule si la source de données sous-jacente est en lecture seule ou si vous avez spécifié dbReadOnly pour nOptions lorsque vous avez appelé Ouvrir pour le jeu d’enregistrements.

Pour plus d’informations, consultez les rubriques « AddNew Method », « Edit Method », « Delete Method », « Update Method » et « Updatable Property » dans L’aide de DAO.

CDaoRecordset ::CDaoRecordset

Construit un objet CDaoRecordset.

CDaoRecordset(CDaoDatabase* pDatabase = NULL);

Paramètres

pDatabase
Contient un pointeur vers un objet CDaoDatabase ou la valeur NULL. S’il n’est pas NULL et que la fonction membre de l’objet CDaoDatabase n’a pas été appelée pour la connecter à la source de données, le jeu d’enregistrements tente de l’ouvrir pour vous pendant son propre appel Open.Open Si vous passez NULL, un CDaoDatabase objet est construit et connecté pour vous à l’aide des informations de source de données que vous avez spécifiées si vous avez dérivé votre classe recordset à partir CDaoRecordsetde .

Notes

Vous pouvez utiliser CDaoRecordset directement ou dériver une classe spécifique à l’application à partir de CDaoRecordset. Vous pouvez utiliser ClassWizard pour dériver vos classes recordset.

Remarque

Si vous dérivez une CDaoRecordset classe, votre classe dérivée doit fournir son propre constructeur. Dans le constructeur de votre classe dérivée, appelez le constructeur CDaoRecordset::CDaoRecordset, en lui transmettant les paramètres appropriés.

Passez NULL à votre constructeur recordset pour avoir un CDaoDatabase objet construit et connecté automatiquement pour vous. Il s’agit d’un raccourci utile qui ne vous oblige pas à construire et à connecter un CDaoDatabase objet avant de construire votre jeu d’enregistrements. Si l’objet CDaoDatabase n’est pas ouvert, un objet CDaoWorkspace est également créé pour vous qui utilise l’espace de travail par défaut. Pour plus d’informations, consultez CDaoDatabase ::CDaoDatabase.

CDaoRecordset ::Close

La fermeture d’un CDaoRecordset objet le supprime de la collection d’ensembles d’enregistrements ouverts dans la base de données associée.

virtual void Close();

Notes

Étant donné que Close ne détruit pas l’objet CDaoRecordset , vous pouvez réutiliser l’objet en appelant Open la même source de données ou une autre source de données.

Toutes les instructions AddNew ou Edit en attente sont annulées et toutes les transactions en attente sont restaurées. Si vous souhaitez conserver des ajouts ou des modifications en attente, appelez Update avant d’appeler Close chaque jeu d’enregistrements.

Vous pouvez appeler Open à nouveau après l’appel Close. Cela vous permet de réutiliser l’objet recordset. Une meilleure alternative consiste à appeler Requery, si possible.

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

CDaoRecordset ::D elete

Appelez cette fonction membre pour supprimer l’enregistrement actif dans un objet recordset de type dynaset ouvert ou de type table.

virtual void Delete();

Notes

Une fois la suppression réussie, les membres de données de champ du jeu d’enregistrements sont définis sur une valeur Null et vous devez appeler explicitement l’une des fonctions membres de navigation du jeu d’enregistrements ( Move, Seek, SetBookmark, et ainsi de suite) pour quitter l’enregistrement supprimé. Lorsque vous supprimez des enregistrements d’un jeu d’enregistrements, il doit y avoir un enregistrement actif dans le jeu d’enregistrements avant d’appeler Delete; sinon, MFC lève une exception.

Delete supprime l’enregistrement actif et le rend inaccessible. Bien que vous ne puissiez pas modifier ou utiliser l’enregistrement supprimé, il reste actif. Une fois que vous passez à un autre enregistrement, toutefois, vous ne pouvez pas rendre l’enregistrement supprimé à nouveau actif.

Attention

Le jeu d’enregistrements doit être mis à jour et il doit y avoir un enregistrement valide actif dans le jeu d’enregistrements lorsque vous appelez Delete. Par exemple, si vous supprimez un enregistrement, mais que vous ne faites pas défiler vers un nouvel enregistrement avant d’appeler Delete à nouveau, Delete lève une exception CDaoException.

Vous pouvez annuler la suppression d’un enregistrement si vous utilisez des transactions et que vous appelez la fonction membre CDaoWorkspace ::Rollback . Si la table de base est la table principale dans une relation de suppression en cascade, la suppression de l’enregistrement actif peut également supprimer un ou plusieurs enregistrements dans une table étrangère. Pour plus d’informations, consultez la définition « suppression en cascade » dans l’aide de DAO.

Contrairement AddNew à et Edit, un appel à Delete n’est pas suivi d’un appel à Update.

Pour plus d’informations, consultez les rubriques « AddNew Method », « Edit Method », « Delete Method », « Update Method » et « Updatable Property » dans L’aide de DAO.

CDaoRecordset ::D oFieldExchange

L’infrastructure appelle cette fonction membre pour échanger automatiquement des données entre les membres de données de champ de votre objet recordset et les colonnes correspondantes de l’enregistrement actif sur la source de données.

virtual void DoFieldExchange(CDaoFieldExchange* pFX);

Paramètres

Pfx
Contient un pointeur vers un CDaoFieldExchange objet. L’infrastructure a déjà configuré cet objet pour spécifier un contexte pour l’opération d’échange de champs.

Notes

Il lie également vos membres de données de paramètre, le cas échéant, aux espaces réservés de paramètres dans la chaîne d’instruction SQL pour la sélection du jeu d’enregistrements. L’échange de données de champ, appelée DAO record field exchange (DFX), fonctionne dans les deux sens : des membres de données de champ de l’objet recordset aux champs de l’enregistrement sur la source de données, et de l’enregistrement de la source de données à l’objet recordset. Si vous liez dynamiquement des colonnes, vous n’êtes pas obligé d’implémenter DoFieldExchange.

La seule action que vous devez normalement entreprendre pour implémenter DoFieldExchange pour votre classe recordset dérivée consiste à créer la classe avec ClassWizard et à spécifier les noms et les types de données des membres de données de champ. Vous pouvez également ajouter du code à ce que ClassWizard écrit pour spécifier des membres de données de paramètre. Si tous les champs doivent être liés dynamiquement, cette fonction est inactive, sauf si vous spécifiez des membres de données de paramètre.

Lorsque vous déclarez votre classe recordset dérivée avec ClassWizard, l’Assistant écrit un remplacement pour DoFieldExchange vous, qui ressemble à l’exemple suivant :

void CCustSet::DoFieldExchange(CDaoFieldExchange *pFX)
{
   pFX->SetFieldType(CDaoFieldExchange::param);
   DFX_Text(pFX, _T("Param"), m_strParam);
   pFX->SetFieldType(CDaoFieldExchange::outputColumn);
   DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
   DFX_Text(pFX, _T("LastName"), m_LastName);
   DFX_Short(pFX, _T("Age"), m_Age);
   DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
   DFX_DateTime(pFX, _T("termination_date"), m_termination_date);

   CDaoRecordset::DoFieldExchange(pFX);
}

CDaoRecordset ::Edit

Appelez cette fonction membre pour autoriser les modifications apportées à l’enregistrement actif.

virtual void Edit();

Notes

Une fois que vous appelez la Edit fonction membre, les modifications apportées aux champs de l’enregistrement actif sont copiées dans la mémoire tampon de copie. Après avoir apporté les modifications souhaitées à l’enregistrement, appelez Update pour enregistrer vos modifications. Edit enregistre les valeurs des membres de données du jeu d’enregistrements. Si vous appelez Edit, apportez des modifications, puis appelez Edit à nouveau, les valeurs de l’enregistrement sont restaurées sur ce qu’elles étaient avant le premier Edit appel.

Attention

Si vous modifiez un enregistrement, puis effectuez une opération qui se déplace vers un autre enregistrement sans appeler Updated’abord, vos modifications sont perdues sans avertissement. En outre, si vous fermez le jeu d’enregistrements ou la base de données parente, votre enregistrement modifié est ignoré sans avertissement.

Dans certains cas, vous pouvez mettre à jour une colonne en la rendant Null (contenant aucune donnée). Pour ce faire, appelez SetFieldNull avec un paramètre true pour marquer le champ Null ; cela entraîne également la mise à jour de la colonne. Si vous souhaitez qu’un champ soit écrit dans la source de données même si sa valeur n’a pas changé, appelez SetFieldDirty avec un paramètre TRUE. Cela fonctionne même si le champ a la valeur Null.

Le framework marque les membres de données de champ modifiés pour s’assurer qu’ils seront écrits dans l’enregistrement sur la source de données par le mécanisme d’échange de champs d’enregistrement DAO (DFX). La modification de la valeur d’un champ définit généralement le champ sale automatiquement. Vous devrez donc rarement appeler SetFieldDirty vous-même, mais vous pouvez parfois vous assurer que les colonnes sont explicitement mises à jour ou insérées indépendamment de la valeur du membre de données de champ. Le mécanisme DFX utilise également l’utilisation de PSEUDO NULL. Pour plus d’informations, consultez CDaoFieldExchange ::m_nOperation.

Si le mécanisme de double mise en mémoire tampon n’est pas utilisé, la modification de la valeur du champ ne définit pas automatiquement le champ comme étant sale. Dans ce cas, il est nécessaire de définir explicitement le champ sale. L’indicateur contenu dans m_bCheckCacheForDirtyFields contrôle cette vérification automatique des champs.

Lorsque l’objet recordset est pessimistement verrouillé dans un environnement multiutilisateur, l’enregistrement reste verrouillé à partir du moment Edit où il est utilisé jusqu’à la fin de la mise à jour. Si le jeu d’enregistrements est verrouillé de manière optimiste, l’enregistrement est verrouillé et comparé à l’enregistrement pré-modifié juste avant sa mise à jour dans la base de données. Si l’enregistrement a changé depuis que vous avez appelé Edit, l’opération Update échoue et MFC lève une exception. Vous pouvez modifier le mode de verrouillage avec SetLockingMode.

Remarque

Le verrouillage optimiste est toujours utilisé sur les formats de base de données externes, tels que ODBC et ISAM installable.

L’enregistrement actif reste actif après l’appel Edit. Pour appeler Edit, il doit y avoir un enregistrement actif. S’il n’existe aucun enregistrement actif ou si le jeu d’enregistrements ne fait pas référence à un objet recordset de type table ouvert ou de type dynaset, une exception se produit. L’appel Edit entraîne la levée d’une CDaoException exception dans les conditions suivantes :

  • Il n’y a pas d’enregistrement actif.

  • La base de données ou le jeu d’enregistrements est en lecture seule.

  • Aucun champ de l’enregistrement n’est modifiable.

  • La base de données ou le jeu d’enregistrements a été ouvert pour une utilisation exclusive par un autre utilisateur.

  • Un autre utilisateur a verrouillé la page contenant votre enregistrement.

Si la source de données prend en charge les transactions, vous pouvez effectuer la Edit partie d’appel d’une transaction. Vous devez appeler avant d’appeler CDaoWorkspace::BeginTrans Edit et après l’ouverture du jeu d’enregistrements. L’appel CDaoWorkspace::CommitTrans n’est pas un substitut à l’appel Update pour terminer l’opération Edit . Pour plus d’informations sur les transactions, consultez la classe CDaoWorkspace.

Pour plus d’informations, consultez les rubriques « AddNew Method », « Edit Method », « Delete Method », « Update Method » et « Updatable Property » dans L’aide de DAO.

CDaoRecordset ::FillCache

Appelez cette fonction membre pour mettre en cache un nombre spécifié d’enregistrements à partir du jeu d’enregistrements.

void FillCache(
    long* pSize = NULL,
    COleVariant* pBookmark = NULL);

Paramètres

Psize
Spécifie le nombre de lignes à remplir dans le cache. Si vous omettez ce paramètre, la valeur est déterminée par le paramètre de propriété CacheSize de l’objet DAO sous-jacent.

pBookmark
COleVariant spécifiant un signet. Le cache est rempli à partir de l’enregistrement indiqué par ce signet. Si vous omettez ce paramètre, le cache est rempli à partir de l’enregistrement indiqué par la propriété CacheStart de l’objet DAO sous-jacent.

Notes

La mise en cache améliore les performances d’une application qui récupère ou récupère des données à partir d’un serveur distant. Un cache est un espace dans la mémoire locale qui contient les données les plus récemment extraites du serveur en supposant que les données seront probablement demandées à nouveau pendant l’exécution de l’application. Lorsque des données sont demandées, le moteur de base de données Microsoft Jet vérifie d’abord le cache des données au lieu de les extraire du serveur, ce qui prend plus de temps. L’utilisation de la mise en cache des données sur des sources de données non ODBC n’a aucun effet, car les données ne sont pas enregistrées dans le cache.

Au lieu d’attendre que le cache soit rempli avec des enregistrements à mesure qu’ils sont récupérés, vous pouvez remplir explicitement le cache à tout moment en appelant la FillCache fonction membre. Il s’agit d’un moyen plus rapide de remplir le cache, car FillCache récupère plusieurs enregistrements à la fois au lieu d’un à la fois. Par exemple, pendant que chaque écran d’enregistrements est affiché, vous pouvez appeler votre application FillCache pour récupérer le prochain écran des enregistrements.

Toute base de données ODBC accessible avec des objets recordset peut avoir un cache local. Pour créer le cache, ouvrez un objet recordset à partir de la source de données distante, puis appelez les SetCacheSize fonctions membres du SetCacheStart jeu d’enregistrements. Si lSize et lBookmark créent une plage en partie ou en dehors de la plage spécifiée et SetCacheSize SetCacheStart, la partie du jeu d’enregistrements en dehors de cette plage est ignorée et n’est pas chargée dans le cache. Si FillCache les demandes dépassent le nombre d’enregistrements dans la source de données distante, seuls les enregistrements restants sont récupérés et aucune exception n’est levée.

Les enregistrements récupérés à partir du cache ne reflètent pas les modifications apportées simultanément aux données sources par d’autres utilisateurs.

FillCache récupère uniquement les enregistrements non déjà mis en cache. Pour forcer une mise à jour de toutes les données mises en cache, appelez la SetCacheSize fonction membre avec un paramètre lSize égal à 0, appelez SetCacheSize à nouveau avec le paramètre lSize égal à la taille du cache que vous avez demandé à l’origine, puis appelez FillCache.

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

CDaoRecordset ::Find

Appelez cette fonction membre pour localiser une chaîne particulière dans un jeu d’enregistrements de type feuille de réponse dynamique ou d’instantané à l’aide d’un opérateur de comparaison.

virtual BOOL Find(
    long lFindType,
    LPCTSTR lpszFilter);

Paramètres

lFindType
Valeur indiquant le type d’opération Rechercher souhaitée. Les valeurs possibles sont les suivantes :

  • AFX_DAO_NEXT Rechercher l’emplacement suivant d’une chaîne correspondante.

  • AFX_DAO_PREV Rechercher l’emplacement précédent d’une chaîne correspondante.

  • AFX_DAO_FIRST Rechercher le premier emplacement d’une chaîne correspondante.

  • AFX_DAO_LAST Rechercher le dernier emplacement d’une chaîne correspondante.

lpszFilter
Expression de chaîne (comme la clause WHERE dans une instruction SQL sans le mot WHERE) utilisée pour localiser l’enregistrement. Par exemple :

rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));

Valeur de retour

Différent de zéro si des enregistrements correspondants sont trouvés, sinon 0.

Notes

Vous trouverez la première, la suivante, la précédente ou la dernière instance de la chaîne. Find est une fonction virtuelle, de sorte que vous pouvez la remplacer et ajouter votre propre implémentation. Les FindFirstfonctions , , FindLastFindNextet FindPrev membres appellent la Find fonction membre. Vous pouvez donc utiliser Find pour contrôler le comportement de toutes les opérations De recherche.

Pour localiser un enregistrement dans un jeu d’enregistrements de type table, appelez la fonction membre Seek .

Conseil

Plus l’ensemble d’enregistrements que vous avez est petit, plus il est efficace Find . En général, et en particulier avec les données ODBC, il est préférable de créer une requête qui récupère uniquement les enregistrements souhaités.

Pour plus d’informations, consultez la rubrique « FindFirst, FindLast, FindNext, FindPrevious Methods » dans l’aide de DAO.

CDaoRecordset ::FindFirst

Appelez cette fonction membre pour rechercher le premier enregistrement qui correspond à une condition spécifiée.

BOOL FindFirst(LPCTSTR lpszFilter);

Paramètres

lpszFilter
Expression de chaîne (comme la clause WHERE dans une instruction SQL sans le mot WHERE) utilisée pour localiser l’enregistrement.

Valeur de retour

Différent de zéro si des enregistrements correspondants sont trouvés, sinon 0.

Notes

La FindFirst fonction membre commence sa recherche à partir du début du jeu d’enregistrements et recherche à la fin du jeu d’enregistrements.

Si vous souhaitez inclure tous les enregistrements dans votre recherche (pas seulement ceux qui répondent à une condition spécifique) utilisez l’une des opérations Move pour passer de l’enregistrement à l’enregistrement. Pour localiser un enregistrement dans un jeu d’enregistrements de type table, appelez la Seek fonction membre.

Si un enregistrement correspondant aux critères n’est pas localisé, le pointeur d’enregistrement actif est indéterminé et FindFirst retourne zéro. Si le jeu d’enregistrements contient plusieurs enregistrements qui répondent aux critères, FindFirst localise la première occurrence, FindNext localise l’occurrence suivante, etc.

Attention

Si vous modifiez l’enregistrement actif, veillez à enregistrer les modifications en appelant la Update fonction membre avant de passer à un autre enregistrement. Si vous passez à un autre enregistrement sans mise à jour, vos modifications sont perdues sans avertissement.

Les Find fonctions membres effectuent une recherche à partir de l’emplacement et dans la direction spécifiée dans le tableau suivant :

Opérations de recherche Début Direction de la recherche
FindFirst Début du jeu d’enregistrements Fin du jeu d’enregistrements
FindLast Fin du jeu d’enregistrements Début du jeu d’enregistrements
FindNext Enregistrement actif Fin du jeu d’enregistrements
FindPrevious Enregistrement actif Début du jeu d’enregistrements

Remarque

Lorsque vous appelez FindLast, le moteur de base de données Microsoft Jet remplit entièrement votre jeu d’enregistrements avant de commencer la recherche, si ce n’est pas déjà fait. La première recherche peut prendre plus de temps que les recherches suivantes.

L’utilisation de l’une des opérations De recherche n’est pas la même que l’appel MoveFirst ou MoveNext, toutefois, ce qui rend simplement le premier enregistrement actif ou suivant sans spécifier de condition. Vous pouvez suivre une opération Rechercher avec une opération Déplacer.

Gardez à l’esprit ce qui suit lors de l’utilisation des opérations De recherche :

  • Si Find la valeur est renvoyée différente de zéro, l’enregistrement actif n’est pas défini. Dans ce cas, vous devez positionner le pointeur d’enregistrement actuel vers un enregistrement valide.

  • Vous ne pouvez pas utiliser une opération Find avec un jeu d’enregistrements de type instantané de défilement vers l’avant uniquement.

  • Vous devez utiliser le format de date des États-Unis (mois-jour-année) lorsque vous recherchez des champs contenant des dates, même si vous n’utilisez pas la version américaine du moteur de base de données Microsoft Jet ; sinon, les enregistrements correspondants peuvent ne pas être trouvés.

  • Lorsque vous utilisez des bases de données ODBC et des feuilles de réponse dynamique volumineuses, vous pouvez découvrir que l’utilisation des opérations De recherche est lente, en particulier lorsque vous utilisez des jeux d’enregistrements volumineux. Vous pouvez améliorer les performances à l’aide de requêtes SQL avec des clauses ORDERBY ou WHERE personnalisées, des requêtes de paramètres ou CDaoQuerydef des objets qui récupèrent des enregistrements indexés spécifiques.

Pour plus d’informations, consultez la rubrique « FindFirst, FindLast, FindNext, FindPrevious Methods » dans l’aide de DAO.

CDaoRecordset ::FindLast

Appelez cette fonction membre pour rechercher le dernier enregistrement qui correspond à une condition spécifiée.

BOOL FindLast(LPCTSTR lpszFilter);

Paramètres

lpszFilter
Expression de chaîne (comme la clause WHERE dans une instruction SQL sans le mot WHERE) utilisée pour localiser l’enregistrement.

Valeur de retour

Différent de zéro si des enregistrements correspondants sont trouvés, sinon 0.

Notes

La FindLast fonction membre commence sa recherche à la fin du jeu d’enregistrements et recherche vers l’arrière vers le début du jeu d’enregistrements.

Si vous souhaitez inclure tous les enregistrements dans votre recherche (pas seulement ceux qui répondent à une condition spécifique) utilisez l’une des opérations Move pour passer de l’enregistrement à l’enregistrement. Pour localiser un enregistrement dans un jeu d’enregistrements de type table, appelez la Seek fonction membre.

Si un enregistrement correspondant aux critères n’est pas localisé, le pointeur d’enregistrement actif est indéterminé et FindLast retourne zéro. Si le jeu d’enregistrements contient plusieurs enregistrements qui répondent aux critères, FindFirst localise la première occurrence, FindNext localise l’occurrence suivante après la première occurrence, etc.

Attention

Si vous modifiez l’enregistrement actif, veillez à enregistrer les modifications en appelant la Update fonction membre avant de passer à un autre enregistrement. Si vous passez à un autre enregistrement sans mise à jour, vos modifications sont perdues sans avertissement.

L’utilisation de l’une des opérations De recherche n’est pas la même que l’appel MoveFirst ou MoveNext, toutefois, ce qui rend simplement le premier enregistrement actif ou suivant sans spécifier de condition. Vous pouvez suivre une opération Rechercher avec une opération Déplacer.

Gardez à l’esprit ce qui suit lors de l’utilisation des opérations De recherche :

  • Si Find la valeur est renvoyée différente de zéro, l’enregistrement actif n’est pas défini. Dans ce cas, vous devez positionner le pointeur d’enregistrement actuel vers un enregistrement valide.

  • Vous ne pouvez pas utiliser une opération Find avec un jeu d’enregistrements de type instantané de défilement vers l’avant uniquement.

  • Vous devez utiliser le format de date des États-Unis (mois-jour-année) lorsque vous recherchez des champs contenant des dates, même si vous n’utilisez pas la version américaine du moteur de base de données Microsoft Jet ; sinon, les enregistrements correspondants peuvent ne pas être trouvés.

  • Lorsque vous utilisez des bases de données ODBC et des feuilles de réponse dynamique volumineuses, vous pouvez découvrir que l’utilisation des opérations De recherche est lente, en particulier lorsque vous utilisez des jeux d’enregistrements volumineux. Vous pouvez améliorer les performances à l’aide de requêtes SQL avec des clauses ORDERBY ou WHERE personnalisées, des requêtes de paramètres ou CDaoQuerydef des objets qui récupèrent des enregistrements indexés spécifiques.

Pour plus d’informations, consultez la rubrique « FindFirst, FindLast, FindNext, FindPrevious Methods » dans l’aide de DAO.

CDaoRecordset ::FindNext

Appelez cette fonction membre pour rechercher l’enregistrement suivant qui correspond à une condition spécifiée.

BOOL FindNext(LPCTSTR lpszFilter);

Paramètres

lpszFilter
Expression de chaîne (comme la clause WHERE dans une instruction SQL sans le mot WHERE) utilisée pour localiser l’enregistrement.

Valeur de retour

Différent de zéro si des enregistrements correspondants sont trouvés, sinon 0.

Notes

La FindNext fonction membre commence sa recherche à l’enregistrement actif et recherche à la fin du jeu d’enregistrements.

Si vous souhaitez inclure tous les enregistrements dans votre recherche (pas seulement ceux qui répondent à une condition spécifique) utilisez l’une des opérations Move pour passer de l’enregistrement à l’enregistrement. Pour localiser un enregistrement dans un jeu d’enregistrements de type table, appelez la Seek fonction membre.

Si un enregistrement correspondant aux critères n’est pas localisé, le pointeur d’enregistrement actif est indéterminé et FindNext retourne zéro. Si le jeu d’enregistrements contient plusieurs enregistrements qui répondent aux critères, FindFirst localise la première occurrence, FindNext localise l’occurrence suivante, etc.

Attention

Si vous modifiez l’enregistrement actif, veillez à enregistrer les modifications en appelant la Update fonction membre avant de passer à un autre enregistrement. Si vous passez à un autre enregistrement sans mise à jour, vos modifications sont perdues sans avertissement.

L’utilisation de l’une des opérations De recherche n’est pas la même que l’appel MoveFirst ou MoveNext, toutefois, ce qui rend simplement le premier enregistrement actif ou suivant sans spécifier de condition. Vous pouvez suivre une opération Rechercher avec une opération Déplacer.

Gardez à l’esprit ce qui suit lors de l’utilisation des opérations De recherche :

  • Si Find la valeur est renvoyée différente de zéro, l’enregistrement actif n’est pas défini. Dans ce cas, vous devez positionner le pointeur d’enregistrement actuel vers un enregistrement valide.

  • Vous ne pouvez pas utiliser une opération Find avec un jeu d’enregistrements de type instantané de défilement vers l’avant uniquement.

  • Vous devez utiliser le format de date des États-Unis (mois-jour-année) lorsque vous recherchez des champs contenant des dates, même si vous n’utilisez pas la version américaine du moteur de base de données Microsoft Jet ; sinon, les enregistrements correspondants peuvent ne pas être trouvés.

  • Lorsque vous utilisez des bases de données ODBC et des feuilles de réponse dynamique volumineuses, vous pouvez découvrir que l’utilisation des opérations De recherche est lente, en particulier lorsque vous utilisez des jeux d’enregistrements volumineux. Vous pouvez améliorer les performances à l’aide de requêtes SQL avec des clauses ORDERBY ou WHERE personnalisées, des requêtes de paramètres ou CDaoQuerydef des objets qui récupèrent des enregistrements indexés spécifiques.

Pour plus d’informations, consultez la rubrique « FindFirst, FindLast, FindNext, FindPrevious Methods » dans l’aide de DAO.

CDaoRecordset ::FindPrev

Appelez cette fonction membre pour rechercher l’enregistrement précédent qui correspond à une condition spécifiée.

BOOL FindPrev(LPCTSTR lpszFilter);

Paramètres

lpszFilter
Expression de chaîne (comme la clause WHERE dans une instruction SQL sans le mot WHERE) utilisée pour localiser l’enregistrement.

Valeur de retour

Différent de zéro si des enregistrements correspondants sont trouvés, sinon 0.

Notes

La FindPrev fonction membre commence sa recherche au niveau de l’enregistrement actif et recherche vers l’arrière vers le début du jeu d’enregistrements.

Si vous souhaitez inclure tous les enregistrements dans votre recherche (pas seulement ceux qui répondent à une condition spécifique) utilisez l’une des opérations Move pour passer de l’enregistrement à l’enregistrement. Pour localiser un enregistrement dans un jeu d’enregistrements de type table, appelez la Seek fonction membre.

Si un enregistrement correspondant aux critères n’est pas localisé, le pointeur d’enregistrement actif est indéterminé et FindPrev retourne zéro. Si le jeu d’enregistrements contient plusieurs enregistrements qui répondent aux critères, FindFirst localise la première occurrence, FindNext localise l’occurrence suivante, etc.

Attention

Si vous modifiez l’enregistrement actif, veillez à enregistrer les modifications en appelant la Update fonction membre avant de passer à un autre enregistrement. Si vous passez à un autre enregistrement sans mise à jour, vos modifications sont perdues sans avertissement.

L’utilisation de l’une des opérations De recherche n’est pas la même que l’appel MoveFirst ou MoveNext, toutefois, ce qui rend simplement le premier enregistrement actif ou suivant sans spécifier de condition. Vous pouvez suivre une opération Rechercher avec une opération Déplacer.

Gardez à l’esprit ce qui suit lors de l’utilisation des opérations De recherche :

  • Si Find la valeur est renvoyée différente de zéro, l’enregistrement actif n’est pas défini. Dans ce cas, vous devez positionner le pointeur d’enregistrement actuel vers un enregistrement valide.

  • Vous ne pouvez pas utiliser une opération Find avec un jeu d’enregistrements de type instantané de défilement vers l’avant uniquement.

  • Vous devez utiliser le format de date des États-Unis (mois-jour-année) lorsque vous recherchez des champs contenant des dates, même si vous n’utilisez pas la version américaine du moteur de base de données Microsoft Jet ; sinon, les enregistrements correspondants peuvent ne pas être trouvés.

  • Lorsque vous utilisez des bases de données ODBC et des feuilles de réponse dynamique volumineuses, vous pouvez découvrir que l’utilisation des opérations De recherche est lente, en particulier lorsque vous utilisez des jeux d’enregistrements volumineux. Vous pouvez améliorer les performances à l’aide de requêtes SQL avec des clauses ORDERBY ou WHERE personnalisées, des requêtes de paramètres ou CDaoQuerydef des objets qui récupèrent des enregistrements indexés spécifiques.

Pour plus d’informations, consultez la rubrique « FindFirst, FindLast, FindNext, FindPrevious Methods » dans l’aide de DAO.

CDaoRecordset ::GetAbsolutePosition

Retourne le numéro d’enregistrement de l’enregistrement actif d’un objet recordset.

long GetAbsolutePosition();

Valeur de retour

Entier compris entre 0 et le nombre d’enregistrements dans le jeu d’enregistrements. Correspond à la position ordinale de l’enregistrement actif dans le jeu d’enregistrements.

Notes

La valeur de propriété AbsolutePosition de l’objet DAO sous-jacent est basée sur zéro ; un paramètre de 0 fait référence au premier enregistrement dans le jeu d’enregistrements. Vous pouvez déterminer le nombre d’enregistrements renseignés dans le jeu d’enregistrements en appelant GetRecordCount. L’appel GetRecordCount peut prendre un certain temps, car il doit accéder à tous les enregistrements pour déterminer le nombre.

S’il n’y a pas d’enregistrement actif, comme s’il n’y a pas d’enregistrements dans le jeu d’enregistrements, - 1 est retourné. Si l’enregistrement actif est supprimé, la valeur de la propriété AbsolutePosition n’est pas définie et MFC lève une exception si elle est référencée. Pour les recordsets de type dynaset, de nouveaux enregistrements sont ajoutés à la fin de la séquence.

Remarque

Cette propriété n’est pas destinée à être utilisée comme numéro d’enregistrement de substitution. Les signets sont toujours le moyen recommandé de conserver et de revenir à une position donnée et sont la seule façon de positionner l’enregistrement actif sur tous les types d’objets recordset. En particulier, la position d’un enregistrement donné change lorsque les enregistrements précédents sont supprimés. Il n’existe pas non plus d’assurance qu’un enregistrement donné aura la même position absolue si le jeu d’enregistrements est recréé, car l’ordre des enregistrements individuels au sein d’un jeu d’enregistrements n’est pas garanti, sauf s’il est créé avec une instruction SQL à l’aide d’une clause ORDERBY .

Remarque

Cette fonction membre est valide uniquement pour les jeux d’enregistrements de type feuille de réponse dynamique et de type instantané.

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

CDaoRecordset ::GetBookmark

Appelez cette fonction membre pour obtenir la valeur de signet dans un enregistrement particulier.

COleVariant GetBookmark();

Valeur de retour

Retourne une valeur représentant le signet sur l’enregistrement actif.

Notes

Lorsqu’un objet recordset est créé ou ouvert, chacun de ses enregistrements a déjà un signet unique s’il les prend en charge. Appel CanBookmark pour déterminer si un jeu d’enregistrements prend en charge les signets.

Vous pouvez enregistrer le signet pour l’enregistrement actif en affectant la valeur du signet à un COleVariant objet. Pour revenir rapidement à cet enregistrement après le passage à un autre enregistrement, appelez SetBookmark avec un paramètre correspondant à la valeur de cet COleVariant objet.

Remarque

L’appel de Requery modifie les signets DAO.

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

CDaoRecordset ::GetCacheSize

Appelez cette fonction membre pour obtenir le nombre d’enregistrements mis en cache.

long GetCacheSize();

Valeur de retour

Valeur qui spécifie le nombre d’enregistrements dans un jeu d’enregistrements de type feuille de réponse dynamique contenant des données à mettre en cache localement à partir d’une source de données ODBC.

Notes

La mise en cache des données améliore les performances d’une application qui récupère des données à partir d’un serveur distant via des objets recordset de type dynaset. Un cache est un espace dans la mémoire locale qui contient les données les plus récemment récupérées du serveur au cas où les données sont demandées à nouveau pendant l’exécution de l’application. Lorsque des données sont demandées, le moteur de base de données Microsoft Jet vérifie d’abord le cache des données demandées au lieu de les récupérer à partir du serveur, ce qui prend plus de temps. Les données qui ne proviennent pas d’une source de données ODBC ne sont pas enregistrées dans le cache.

Toute source de données ODBC, telle qu’une table jointe, peut avoir un cache local.

Pour plus d’informations, consultez la rubrique « CacheSize, CacheStart Properties » dans l’aide de DAO.

CDaoRecordset ::GetCacheStart

Appelez cette fonction membre pour obtenir la valeur de signet du premier enregistrement du jeu d’enregistrements à mettre en cache.

COleVariant GetCacheStart();

Valeur de retour

Qui COleVariant spécifie le signet du premier enregistrement dans le jeu d’enregistrements à mettre en cache.

Notes

Le moteur de base de données Microsoft Jet demande des enregistrements dans la plage de cache à partir du cache et demande des enregistrements en dehors de la plage de cache du serveur.

Remarque

Les enregistrements récupérés à partir du cache ne reflètent pas les modifications apportées simultanément aux données sources par d’autres utilisateurs.

Pour plus d’informations, consultez la rubrique « CacheSize, CacheStart Properties » dans l’aide de DAO.

CDaoRecordset ::GetCurrentIndex

Appelez cette fonction membre pour déterminer l’index actuellement utilisé dans un objet de type CDaoRecordset table indexé.

CString GetCurrentIndex();

Valeur de retour

Contenant CString le nom de l’index actuellement utilisé avec un jeu d’enregistrements de type table. Retourne une chaîne vide si aucun index n’a été défini.

Notes

Cet index est la base de l’ordre des enregistrements dans un jeu d’enregistrements de type table et est utilisé par la fonction membre Seek pour localiser les enregistrements.

Un CDaoRecordset objet peut avoir plusieurs index, mais peut utiliser un seul index à la fois (bien qu’un objet CDaoTableDef puisse avoir plusieurs index définis dessus).

Pour plus d’informations, consultez la rubrique « Index Object » et la définition « current index » dans DAO Help.

CDaoRecordset ::GetDateCreated

Appelez cette fonction membre pour récupérer la date et l’heure de création d’une table de base.

COleDateTime GetDateCreated();

Valeur de retour

Objet COleDateTime contenant la date et l’heure de création de la table de base.

Notes

Les paramètres de date et d’heure sont dérivés de l’ordinateur sur lequel la table de base a été créée.

Pour plus d’informations, consultez la rubrique « DateCreated, LastUpdated Properties » dans l’aide de DAO.

CDaoRecordset ::GetDateLastUpdated

Appelez cette fonction membre pour récupérer la date et l’heure de la dernière mise à jour du schéma.

COleDateTime GetDateLastUpdated();

Valeur de retour

Objet COleDateTime contenant la date et l’heure de la dernière mise à jour de la structure de table de base (schéma).

Notes

Les paramètres de date et d’heure sont dérivés de l’ordinateur sur lequel la structure de table de base (schéma) a été mise à jour pour la dernière fois.

Pour plus d’informations, consultez la rubrique « DateCreated, LastUpdated Properties » dans l’aide de DAO.

CDaoRecordset ::GetDefaultDBName

Appelez cette fonction membre pour déterminer le nom de la base de données pour ce jeu d’enregistrements.

virtual CString GetDefaultDBName();

Valeur de retour

Qui CString contient le chemin d’accès et le nom de la base de données à partir de laquelle ce jeu d’enregistrements est dérivé.

Notes

Si un recordset est créé sans pointeur vers CDaoDatabase, ce chemin est utilisé par le jeu d’enregistrements pour ouvrir la base de données par défaut. Par défaut, cette fonction retourne une chaîne vide. Lorsque ClassWizard dérive un nouveau jeu d’enregistrements CDaoRecordset, il crée cette fonction pour vous.

L’exemple suivant illustre l’utilisation de la double barre oblique inverse (\\) dans la chaîne, comme il est nécessaire que la chaîne soit interprétée correctement.

CString CCustSet::GetDefaultDBName()
{
   return _T("c:\\mydir\\datasrc.mdb");
}

CDaoRecordset ::GetDefaultSQL

L’infrastructure appelle cette fonction membre pour obtenir l’instruction SQL par défaut sur laquelle le jeu d’enregistrements est basé.

virtual CString GetDefaultSQL();

Valeur de retour

Qui CString contient l’instruction SQL par défaut.

Notes

Il peut s’agir d’un nom de table ou d’une instruction SQL SELECT .

Vous définissez indirectement l’instruction SQL par défaut en déclarant votre classe recordset avec ClassWizard et ClassWizard effectue cette tâche pour vous.

Si vous transmettez une chaîne SQL Null à Open, cette fonction est appelée pour déterminer le nom de la table ou SQL pour votre jeu d’enregistrements.

CDaoRecordset ::GetEditMode

Appelez cette fonction membre pour déterminer l’état de modification, qui est l’une des valeurs suivantes :

short GetEditMode();

Valeur de retour

Retourne une valeur qui indique l’état de modification de l’enregistrement actif.

Notes

Valeur Description
dbEditNone Aucune opération d’édition n’est en cours.
dbEditInProgress Edit a été appelé.
dbEditAdd AddNew a été appelé.

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

CDaoRecordset ::GetFieldCount

Appelez cette fonction membre pour récupérer le nombre de champs (colonnes) définis dans le jeu d’enregistrements.

short GetFieldCount();

Valeur de retour

Nombre de champs dans le jeu d’enregistrements.

Notes

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

CDaoRecordset ::GetFieldInfo

Appelez cette fonction membre pour obtenir des informations sur les champs d’un jeu d’enregistrements.

void GetFieldInfo(
    int nIndex,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetFieldInfo(
    LPCTSTR lpszName,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Paramètres

nIndex
Index de base zéro du champ prédéfini dans la collection Fields du jeu d’enregistrements, pour la recherche par index.

fieldinfo
Référence à une structure CDaoFieldInfo .

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. Pour optimiser les performances, récupérez uniquement le niveau d’informations dont vous avez besoin :

  • AFX_DAO_PRIMARY_INFO (Par défaut) Nom, Type, Taille, Attributs

  • AFX_DAO_SECONDARY_INFO Informations principales, plus : position ordinale, Obligatoire, Autoriser la longueur zéro, Collating Order, Foreign Name, Source Field, Source Table

  • AFX_DAO_ALL_INFO Informations primaires et secondaires, plus : valeur par défaut, règle de validation, texte de validation

lpszName
Nom du champ.

Notes

Une version de la fonction vous permet de rechercher un champ par index. L’autre version vous permet de rechercher un champ par nom.

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

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

CDaoRecordset ::GetFieldValue

Appelez cette fonction membre pour récupérer des données dans un jeu d’enregistrements.

virtual void GetFieldValue(
    LPCTSTR lpszName,
    COleVariant& varValue);

virtual void GetFieldValue(
    int nIndex,
    COleVariant& varValue);

virtual COleVariant GetFieldValue(LPCTSTR lpszName);
virtual COleVariant GetFieldValue(int nIndex);

Paramètres

lpszName
Pointeur vers une chaîne qui contient le nom d’un champ.

varValue
Référence à un COleVariant objet qui stocke la valeur d’un champ.

nIndex
Index de base zéro du champ dans la collection Fields du jeu d’enregistrements, pour la recherche par index.

Valeur de retour

Les deux versions de GetFieldValue ce qui retournent une valeur retournent un objet COleVariant qui contient la valeur d’un champ.

Notes

Vous pouvez rechercher un champ par nom ou par position ordinale.

Remarque

Il est plus efficace d’appeler l’une des versions de cette fonction membre qui prend une COleVariant référence d’objet en tant que paramètre, plutôt que d’appeler une version qui retourne un COleVariant objet. Les dernières versions de cette fonction sont conservées pour une compatibilité descendante.

Utilisez GetFieldValue et SetFieldValue pour lier dynamiquement des champs au moment de l’exécution plutôt que de lier statiquement des colonnes à l’aide du mécanisme DoFieldExchange .

GetFieldValue et le DoFieldExchange mécanisme peut être combiné pour améliorer les performances. Par exemple, utilisez GetFieldValue pour récupérer une valeur dont vous avez besoin uniquement à la demande et affecter cet appel à un bouton « Plus d’informations » dans l’interface.

Pour plus d’informations, consultez les rubriques « Objet de champ » et « Value Property » dans l’aide de DAO.

CDaoRecordset ::GetIndexCount

Appelez cette fonction membre pour déterminer le nombre d’index disponibles sur le jeu d’enregistrements de type table.

short GetIndexCount();

Valeur de retour

Nombre d’index dans le jeu d’enregistrements de type table.

Notes

GetIndexCount est utile pour effectuer une boucle dans tous les index dans le jeu d’enregistrements. À cet effet, utilisez GetIndexCount avec GetIndexInfo. Si vous appelez cette fonction membre sur des jeux d’enregistrements de type dynaset ou de type instantané, MFC lève une exception.

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

CDaoRecordset ::GetIndexInfo

Appelez cette fonction membre pour obtenir différents types d’informations sur un index défini dans la table de base sous-jacente à un jeu d’enregistrements.

void GetIndexInfo(
    int nIndex,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetIndexInfo(
    LPCTSTR lpszName,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Paramètres

nIndex
Index de base zéro dans la collection Indexes de la table, pour rechercher par position numérique.

indexinfo
Référence à une structure CDaoIndexInfo .

dwInfoOptions
Options qui spécifient les informations sur l’index à récupérer. Les options disponibles sont répertoriées ici, ainsi que ce qu’elles entraînent le retour de la fonction. Pour optimiser les performances, récupérez uniquement le niveau d’informations dont vous avez besoin :

  • AFX_DAO_PRIMARY_INFO (Par défaut) Nom, Informations de champ, Champs

  • AFX_DAO_SECONDARY_INFO Informations principales, plus : Primary, Unique, Clustered, IgnoreNulls, Required, Foreign

  • AFX_DAO_ALL_INFO Informations primaires et secondaires, plus : Nombre distinct

lpszName
Pointeur vers le nom de l’objet d’index, pour rechercher par nom.

Notes

Une version de la fonction vous permet de rechercher un index par sa position dans la collection. L’autre version vous permet de rechercher un index par nom.

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

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

CDaoRecordset ::GetLastModifiedBookmark

Appelez cette fonction membre pour récupérer le signet de l’enregistrement récemment ajouté ou mis à jour.

COleVariant GetLastModifiedBookmark();

Valeur de retour

Contenant COleVariant un signet qui indique le dernier enregistrement ajouté ou modifié.

Notes

Lorsqu’un objet recordset est créé ou ouvert, chacun de ses enregistrements a déjà un signet unique s’il les prend en charge. Appelez GetBookmark pour déterminer si le jeu d’enregistrements prend en charge les signets. Si le jeu d’enregistrements ne prend pas en charge les signets, un CDaoException objet est levée.

Lorsque vous ajoutez un enregistrement, il apparaît à la fin du jeu d’enregistrements et n’est pas l’enregistrement actif. Pour rendre le nouvel enregistrement actif, appelez et appelez-le GetLastModifiedBookmark SetBookmark pour revenir à l’enregistrement nouvellement ajouté.

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

CDaoRecordset ::GetLockingMode

Appelez cette fonction membre pour déterminer le type de verrouillage en vigueur pour le jeu d’enregistrements.

BOOL GetLockingMode();

Valeur de retour

Différent de zéro si le type de verrouillage est pessimiste, sinon 0 pour le verrouillage d’enregistrement optimiste.

Notes

Lorsque le verrouillage pessimiste est en vigueur, la page de données contenant l’enregistrement que vous modifiez est verrouillée dès que vous appelez la fonction Modifier le membre. La page est déverrouillée lorsque vous appelez la fonction Membre Update ou Close ou l’une des opérations Move ou Find.

Lorsque le verrouillage optimiste est en vigueur, la page de données contenant l’enregistrement est verrouillée uniquement lorsque l’enregistrement est mis à jour avec la Update fonction membre.

Lorsque vous utilisez des sources de données ODBC, le mode de verrouillage est toujours optimiste.

Pour plus d’informations, consultez les rubriques « LockEdits Property » et « Locking Behavior in Multiuser Applications » dans L’aide de DAO.

CDaoRecordset ::GetName

Appelez cette fonction membre pour récupérer le nom du jeu d’enregistrements.

CString GetName();

Valeur de retour

Contenant CString le nom du jeu d’enregistrements.

Notes

Le nom du jeu d’enregistrements 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.

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

CDaoRecordset ::GetParamValue

Appelez cette fonction membre pour récupérer la valeur actuelle du paramètre spécifié stocké dans l’objet DAOParameter sous-jacent.

virtual COleVariant GetParamValue(int nIndex);
virtual COleVariant GetParamValue(LPCTSTR lpszName);

Paramètres

nIndex
Position numérique du paramètre dans l’objet DAOParameter sous-jacent.

lpszName
Nom du paramètre dont vous souhaitez obtenir la valeur.

Valeur de retour

Objet de la classe COleVariant qui contient la valeur du paramètre.

Notes

Vous pouvez accéder au paramètre par nom ou par sa position numérique dans la collection.

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

CDaoRecordset ::GetPercentPosition

Lorsque vous utilisez un jeu d’enregistrements de type dynaset ou de type instantané, si vous appelez GetPercentPosition avant de remplir entièrement le jeu d’enregistrements, la quantité de déplacement est relative au nombre d’enregistrements accessibles comme indiqué en appelant GetRecordCount.

float GetPercentPosition();

Valeur de retour

Nombre compris entre 0 et 100 qui indique l’emplacement approximatif de l’enregistrement actif dans l’objet recordset en fonction d’un pourcentage des enregistrements dans le jeu d’enregistrements.

Notes

Vous pouvez passer au dernier enregistrement en appelant MoveLast pour terminer la population de tous les jeux d’enregistrements, mais cela peut prendre beaucoup de temps.

Vous pouvez appeler GetPercentPosition les trois types d’objets recordset, y compris les tables sans index. Toutefois, vous ne pouvez pas appeler GetPercentPosition des instantanés de défilement vers l’avant uniquement ou sur un jeu d’enregistrements ouvert à partir d’une requête directe sur une base de données externe. S’il n’y a pas d’enregistrement actif ou si l’enregistrement actif a été supprimé, un CDaoException enregistrement est levée.

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

CDaoRecordset ::GetRecordCount

Appelez cette fonction membre pour savoir combien d’enregistrements d’un jeu d’enregistrements ont été consultés.

long GetRecordCount();

Valeur de retour

Retourne le nombre d’enregistrements accessibles dans un objet recordset.

Notes

GetRecordCount n’indique pas le nombre d’enregistrements contenus dans un jeu d’enregistrements de type dynaset ou de type instantané tant que tous les enregistrements n’ont pas été consultés. Cet appel de fonction membre peut prendre beaucoup de temps.

Une fois le dernier enregistrement accédé, la valeur de retour indique le nombre total d’enregistrements non supprimés dans le jeu d’enregistrements. Pour forcer l’accès au dernier enregistrement, appelez la fonction membre ou FindLast l’ensemble MoveLast d’enregistrements. Vous pouvez également utiliser un nombre SQL pour déterminer le nombre approximatif d’enregistrements retournés par votre requête.

Lorsque votre application supprime des enregistrements dans un jeu d’enregistrements de type dynaset, la valeur de retour des GetRecordCount diminutions. Toutefois, les enregistrements supprimés par d’autres utilisateurs ne sont pas reflétés GetRecordCount tant que l’enregistrement actif n’est pas positionné sur un enregistrement supprimé. Si vous exécutez une transaction qui affecte le nombre d’enregistrements et restaurez par la suite la transaction, GetRecordCount le nombre réel d’enregistrements restants ne reflète pas le nombre réel d’enregistrements restants.

La valeur d’un jeu d’enregistrements de GetRecordCount type instantané n’est pas affectée par les modifications apportées aux tables sous-jacentes.

La valeur d’un GetRecordCount jeu d’enregistrements de type table reflète le nombre approximatif d’enregistrements de la table et est affectée immédiatement à mesure que les enregistrements de table sont ajoutés et supprimés.

Un jeu d’enregistrements sans enregistrement retourne la valeur 0. Lorsque vous utilisez des tables jointes ou des bases de données ODBC, GetRecordCount retourne toujours - 1. L’appel de GetRecordCount la Requery fonction membre sur un jeu d’enregistrements réinitialise la valeur de la même manière que si la requête a été réexécutée.

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

CDaoRecordset ::GetSQL

Appelez cette fonction membre pour obtenir l’instruction SQL utilisée pour sélectionner les enregistrements du jeu d’enregistrements lorsqu’il a été ouvert.

CString GetSQL() const;

Valeur de retour

Qui CString contient l’instruction SQL.

Notes

Il s’agit généralement d’une instruction SQL SELECT .

La chaîne retournée par GetSQL est généralement différente de n’importe quelle chaîne que vous avez peut-être passée au jeu d’enregistrements dans le paramètre lpszSQL à la fonction membre Open . Cela est dû au fait que le jeu d’enregistrements construit une instruction SQL complète en fonction de ce à quoi vous avez passé Open, de ce que vous avez spécifié avec ClassWizard et de ce que vous avez peut-être spécifié dans les membres de données m_strFilter et m_strSort .

Remarque

Appelez cette fonction membre uniquement après l’appel Open.

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

CDaoRecordset ::GetType

Appelez cette fonction membre après avoir ouvert le jeu d’enregistrements pour déterminer le type de l’objet recordset.

short GetType();

Valeur de retour

Une des valeurs suivantes qui indique le type d’un jeu d’enregistrements :

  • dbOpenTable Jeu d’enregistrements de type table

  • dbOpenDynaset Jeu d’enregistrements de type Dynaset

  • dbOpenSnapshot Jeu d’enregistrements de type instantané

Notes

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

CDaoRecordset ::GetValidationRule

Appelez cette fonction membre pour déterminer la règle utilisée pour valider les données.

CString GetValidationRule();

Valeur de retour

Objet CString contenant une valeur qui valide les données d’un enregistrement à mesure qu’elles sont modifiées ou ajoutées à une table.

Notes

Cette règle est basée sur du texte et est appliquée chaque fois que la table sous-jacente est modifiée. Si les données ne sont pas légales, MFC lève une exception. Le message d’erreur retourné est le texte de la propriété ValidationText de l’objet de champ sous-jacent, le cas échéant, ou le texte de l’expression spécifiée par la propriété ValidationRule de l’objet de champ sous-jacent. Vous pouvez appeler GetValidationText pour obtenir le texte du message d’erreur.

Par exemple, un champ d’un enregistrement qui nécessite le jour du mois peut avoir une règle de validation telle que « DAY BETWEEN 1 AND 31 ».

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

CDaoRecordset ::GetValidationText

Appelez cette fonction membre pour récupérer le texte de la propriété ValidationText de l’objet de champ sous-jacent.

CString GetValidationText();

Valeur de retour

Objet CString contenant le texte du message affiché si la valeur d’un champ ne satisfait pas à la règle de validation de l’objet de champ sous-jacent.

Notes

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

CDaoRecordset ::IsBOF

Appelez cette fonction membre avant de faire défiler l’enregistrement vers l’enregistrement pour savoir si vous avez disparu avant le premier enregistrement du jeu d’enregistrements.

BOOL IsBOF() const;

Valeur de retour

Différent de zéro si le jeu d’enregistrements ne contient aucun enregistrement ou si vous avez fait défiler vers l’arrière avant le premier enregistrement ; sinon 0.

Notes

Vous pouvez également appeler IsBOF avec IsEOF pour déterminer si le jeu d’enregistrements contient des enregistrements ou est vide. Immédiatement après l’appel Open, si le jeu d’enregistrements ne contient aucun enregistrement, IsBOF retourne un nombre différent de zéro. Lorsque vous ouvrez un jeu d’enregistrements qui a au moins un enregistrement, le premier enregistrement est l’enregistrement actif et IsBOF retourne 0.

Si le premier enregistrement est l’enregistrement actif et que vous appelez MovePrev, IsBOF retourne par la suite un résultat différent de zéro. Si IsBOF elle retourne un nombre différent de zéro et que vous appelez MovePrev, une exception est levée. Si IsBOF cette propriété renvoie une valeur différente de zéro, l’enregistrement actif n’est pas défini et toute action nécessitant un enregistrement actif entraîne une exception.

Effet des méthodes spécifiques sur IsBOF et IsEOF des paramètres :

  • L’appel Open* en interne effectue le premier enregistrement dans le jeu d’enregistrements l’enregistrement actif en appelant MoveFirst. Par conséquent, l’appel Open sur un jeu d’enregistrements vide provoque IsBOF et IsEOF retourne non zéro. (Consultez le tableau suivant pour connaître le comportement d’un échec MoveFirst ou MoveLast d’un appel.)

  • Toutes les opérations de déplacement qui localisent correctement un enregistrement provoquent à la fois IsBOF et IsEOF retournent 0.

  • Un AddNew appel suivi d’un Update appel qui insère correctement un nouvel enregistrement entraîne IsBOF le retour 0, mais uniquement s’il IsEOF n’est pas encore différent de zéro. L’état de l’état IsEOF reste toujours inchangé. Comme défini par le moteur de base de données Microsoft Jet, le pointeur d’enregistrement actuel d’un jeu d’enregistrements vide se trouve à la fin d’un fichier, de sorte que tout nouvel enregistrement est inséré après l’enregistrement actif.

  • Tout Delete appel, même s’il supprime le seul enregistrement restant d’un jeu d’enregistrements, ne modifie pas la valeur ou IsBOF IsEOF.

Ce tableau indique les opérations de déplacement autorisées avec différentes combinaisons de IsBOF/ IsEOF.

State MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=non égal à zéro,

IsEOF=0
Autorisé Exception Exception Autorisé
IsBOF=0,

IsEOF=non égal à zéro
Autorisé(e) Autorisé Exception Exception
Les deux non-zéro Exception Exception Exception Exception
0 Autorisé(e) Autorisé Autorisé Autorisé

L’autorisation d’une opération move ne signifie pas que l’opération localisera correctement un enregistrement. Il indique simplement qu’une tentative d’exécution de l’opération move spécifiée est autorisée et ne génère pas d’exception. La valeur des fonctions membres et IsEOF des IsBOF fonctions peut changer suite à la tentative de déplacement.

L’effet des opérations de déplacement qui ne localisent pas d’enregistrement sur la valeur et IsBOF IsEOF les paramètres est indiqué dans le tableau suivant.

Opérations IsBOF IsEOF
MoveFirst, MoveLast Non différent de zéro Non différent de zéro
Move 0 Aucun changement Aucun changement
MovePrev, Move< 0 Non différent de zéro Aucun changement
MoveNext, Move> 0 Aucun changement Non différent de zéro

Pour plus d’informations, consultez la rubrique « BOF, EOF Properties » dans L’aide de DAO.

CDaoRecordset ::IsDeleted

Appelez cette fonction membre pour déterminer si l’enregistrement actif a été supprimé.

BOOL IsDeleted() const;

Valeur de retour

Différent de zéro si le jeu d’enregistrements est positionné sur un enregistrement supprimé ; sinon 0.

Notes

Si vous faites défiler vers un enregistrement et IsDeleted retourne TRUE (différent de zéro), vous devez faire défiler vers un autre enregistrement avant de pouvoir effectuer d’autres opérations d’ensemble d’enregistrements.

Remarque

Vous n’avez pas besoin de vérifier l’état supprimé des enregistrements dans un jeu d’enregistrements de type instantané ou table. Étant donné que les enregistrements ne peuvent pas être supprimés d’un instantané, il n’est pas nécessaire d’appeler IsDeleted. Pour les recordsets de type table, les enregistrements supprimés sont réellement supprimés du jeu d’enregistrements. Une fois qu’un enregistrement a été supprimé, par vous, par un autre utilisateur ou dans un autre jeu d’enregistrements, vous ne pouvez pas faire défiler vers cet enregistrement. Par conséquent, il n’est pas nécessaire d’appeler IsDeleted.

Lorsque vous supprimez un enregistrement d’une feuille de réponse dynamique, il est supprimé du jeu d’enregistrements et vous ne pouvez pas faire défiler vers cet enregistrement. Toutefois, si un enregistrement d’une feuille de réponse dynamique est supprimé par un autre utilisateur ou dans un autre jeu d’enregistrements basé sur la même table, IsDeleted retourne TRUE lorsque vous faites défiler l’enregistrement ultérieurement vers cet enregistrement.

Pour plus d’informations, consultez les rubriques « Delete Method », « LastModified Property » et « EditMode Property » dans l’aide de DAO.

CDaoRecordset ::IsEOF

Appelez cette fonction membre lorsque vous faites défiler l’enregistrement pour savoir si vous avez dépassé le dernier enregistrement du jeu d’enregistrements.

BOOL IsEOF() const;

Valeur de retour

Différent de zéro si le jeu d’enregistrements ne contient aucun enregistrement ou si vous avez fait défiler au-delà du dernier enregistrement ; sinon 0.

Notes

Vous pouvez également appeler IsEOF pour déterminer si le jeu d’enregistrements contient des enregistrements ou est vide. Immédiatement après l’appel Open, si le jeu d’enregistrements ne contient aucun enregistrement, IsEOF retourne un nombre différent de zéro. Lorsque vous ouvrez un jeu d’enregistrements qui a au moins un enregistrement, le premier enregistrement est l’enregistrement actif et IsEOF retourne 0.

Si le dernier enregistrement est l’enregistrement actif lorsque vous appelez MoveNext, IsEOF retourne par la suite un résultat différent de zéro. Si IsEOF elle retourne un nombre différent de zéro et que vous appelez MoveNext, une exception est levée. Si IsEOF cette propriété renvoie une valeur différente de zéro, l’enregistrement actif n’est pas défini et toute action nécessitant un enregistrement actif entraîne une exception.

Effet des méthodes spécifiques sur IsBOF et IsEOF des paramètres :

  • L’appel Open en interne effectue le premier enregistrement dans le jeu d’enregistrements l’enregistrement actif en appelant MoveFirst. Par conséquent, l’appel Open sur un jeu d’enregistrements vide provoque IsBOF et IsEOF retourne non zéro. (Consultez le tableau suivant pour connaître le comportement d’un appel ayant échoué MoveFirst .)

  • Toutes les opérations de déplacement qui localisent correctement un enregistrement provoquent à la fois IsBOF et IsEOF retournent 0.

  • Un AddNew appel suivi d’un Update appel qui insère correctement un nouvel enregistrement entraîne IsBOF le retour 0, mais uniquement s’il IsEOF n’est pas encore différent de zéro. L’état de l’état IsEOF reste toujours inchangé. Comme défini par le moteur de base de données Microsoft Jet, le pointeur d’enregistrement actuel d’un jeu d’enregistrements vide se trouve à la fin d’un fichier, de sorte que tout nouvel enregistrement est inséré après l’enregistrement actif.

  • Tout Delete appel, même s’il supprime le seul enregistrement restant d’un jeu d’enregistrements, ne modifie pas la valeur ou IsBOF IsEOF.

Ce tableau indique les opérations de déplacement autorisées avec différentes combinaisons de IsBOF/ IsEOF.

State MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=non égal à zéro,

IsEOF=0
Autorisé Exception Exception Autorisé
IsBOF=0,

IsEOF=non égal à zéro
Autorisé(e) Autorisé Exception Exception
Les deux non-zéro Exception Exception Exception Exception
0 Autorisé(e) Autorisé Autorisé Autorisé

L’autorisation d’une opération move ne signifie pas que l’opération localisera correctement un enregistrement. Il indique simplement qu’une tentative d’exécution de l’opération move spécifiée est autorisée et ne génère pas d’exception. La valeur des fonctions membres et IsEOF des IsBOF fonctions peut changer en raison de la tentative de déplacement.

L’effet des opérations de déplacement qui ne localisent pas d’enregistrement sur la valeur et IsBOF IsEOF les paramètres est indiqué dans le tableau suivant.

Opérations IsBOF IsEOF
MoveFirst, MoveLast Non différent de zéro Non différent de zéro
Move 0 Aucun changement Aucun changement
MovePrev, Move< 0 Non différent de zéro Aucun changement
MoveNext, Move> 0 Aucun changement Non différent de zéro

Pour plus d’informations, consultez la rubrique « BOF, EOF Properties » dans L’aide de DAO.

CDaoRecordset ::IsFieldDirty

Appelez cette fonction membre pour déterminer si le membre de données de champ spécifié d’une feuille de réponse dynamique a été marqué comme étant « sale » (modifié).

BOOL IsFieldDirty(void* pv);

Paramètres

Pv
Pointeur vers le membre de données de champ dont vous souhaitez vérifier l’état, ou NULL pour déterminer si l’un des champs est incorrect.

Valeur de retour

Différent de zéro si le membre de données de champ spécifié est marqué comme étant sale ; sinon 0.

Notes

Les données de tous les membres de données de champ sale sont transférées vers l’enregistrement sur la source de données lorsque l’enregistrement actif est mis à jour par un appel à la Update fonction membre de CDaoRecordset (après un appel à ou AddNew).Edit Avec cette connaissance, vous pouvez effectuer d’autres étapes, telles que le membre de données de champ sans indicateur pour marquer la colonne afin qu’elle ne soit pas écrite dans la source de données.

IsFieldDirty est implémenté par le biais DoFieldExchangede .

CDaoRecordset ::IsFieldNull

Appelez cette fonction membre pour déterminer si le membre de données de champ spécifié d’un recordset a été marqué comme Null.

BOOL IsFieldNull(void* pv);

Paramètres

Pv
Pointeur vers le membre de données de champ dont l’état vous souhaitez vérifier ou NULL pour déterminer si l’un des champs est Null.

Valeur de retour

Différent de zéro si le membre de données de champ spécifié est marqué comme Null ; sinon 0.

Notes

(Dans la terminologie de la base de données, Null signifie « sans valeur » et n’est pas identique à NULL en C++.) Si un membre de données de champ est marqué comme Null, il est interprété comme une colonne de l’enregistrement actif pour laquelle il n’existe aucune valeur.

Remarque

Dans certaines situations, l’utilisation IsFieldNull peut être inefficace, car l’exemple de code suivant illustre :

COleVariant varValue;
void *pField = &(rs.m_Age);
int nField = 2;

// this code is inefficient because data
// must be retrieved for both IsFieldNull
// and GetFieldValue
if (!rs.IsFieldNull(pField))
   rs.GetFieldValue(nField, varValue);

// this code is more efficient
rs.GetFieldValue(nField, varValue);
if (varValue.vt == VT_NULL)
   varValue.Attach(varNewVal); // do something

Remarque

Si vous utilisez la liaison d’enregistrement dynamique, sans dériver CDaoRecordset, veillez à utiliser VT_NULL comme indiqué dans l’exemple.

CDaoRecordset ::IsFieldNullable

Appelez cette fonction membre pour déterminer si le membre de données de champ spécifié est « nullable » (peut être défini sur une valeur Null ; C++ NULL n’est pas identique à Null, ce qui, dans la terminologie de la base de données, signifie « sans valeur »).

BOOL IsFieldNullable(void* pv);

Paramètres

Pv
Pointeur vers le membre de données de champ dont l’état vous souhaitez vérifier ou NULL pour déterminer si l’un des champs est Null.

Valeur de retour

Différent de zéro si le membre de données de champ spécifié peut être rendu Null ; sinon 0.

Notes

Un champ qui ne peut pas être Null doit avoir une valeur. Si vous tentez de définir un tel champ sur Null lors de l’ajout ou de la mise à jour d’un enregistrement, la source de données rejette l’ajout ou la mise à jour et Update lève une exception. L’exception se produit lorsque vous appelez Update, et non lorsque vous appelez SetFieldNull.

CDaoRecordset ::IsOpen

Appelez cette fonction membre pour déterminer si le jeu d’enregistrements est ouvert.

BOOL IsOpen() const;

Valeur de retour

Différent de zéro si la fonction membre ou Requery l’objet Open recordset a été appelée précédemment et que le jeu d’enregistrements n’a pas été fermé ; sinon, 0.

Notes

CDaoRecordset ::m_bCheckCacheForDirtyFields

Contient un indicateur indiquant si les champs mis en cache sont automatiquement marqués comme étant incorrects (modifiés) et Null.

Notes

L’indicateur a la valeur TRUE par défaut. Le paramètre de ce membre de données contrôle l’ensemble du mécanisme de mise en mémoire tampon double. Si vous définissez l’indicateur sur TRUE, vous pouvez désactiver la mise en cache sur un champ par champ à l’aide du mécanisme DFX. Si vous définissez l’indicateur sur FALSE, vous devez appeler SetFieldDirty et SetFieldNull vous-même.

Définissez ce membre de données avant d’appeler Open. Ce mécanisme est principalement destiné à faciliter l’utilisation. Les performances peuvent être plus lentes en raison de la double mise en mémoire tampon des champs à mesure que des modifications sont apportées.

CDaoRecordset ::m_nFields

Contient le nombre de membres de données de champ dans la classe recordset et le nombre de colonnes sélectionnées par le jeu d’enregistrements de la source de données.

Notes

Le constructeur de la classe recordset doit initialiser m_nFields avec le nombre correct de champs liés statiquement. ClassWizard écrit cette initialisation lorsque vous l’utilisez pour déclarer votre classe recordset. Vous pouvez également l’écrire manuellement.

L’infrastructure utilise ce nombre pour gérer l’interaction entre les membres de données de champ et les colonnes correspondantes de l’enregistrement actif sur la source de données.

Remarque

Ce nombre doit correspondre au nombre de colonnes de sortie inscrites DoFieldExchange après un appel au SetFieldType paramètre CDaoFieldExchange::outputColumn.

Vous pouvez lier des colonnes dynamiquement par le biais de CDaoRecordset::GetFieldValue et CDaoRecordset::SetFieldValue. Si vous le faites, vous n’avez pas besoin d’incrémenter le nombre m_nFields pour refléter le nombre d’appels de fonction DFX dans votre DoFieldExchange fonction membre.

CDaoRecordset ::m_nParams

Contient le nombre de membres de données de paramètre dans la classe recordset : nombre de paramètres passés avec la requête du jeu d’enregistrements.

Notes

Si votre classe recordset a des membres de données de paramètre, le constructeur de la classe doit initialiser m_nParams avec le nombre correct. La valeur de m_nParams par défaut est 0. Si vous ajoutez des membres de données de paramètre ( que vous devez faire manuellement), vous devez également ajouter manuellement une initialisation dans le constructeur de classe pour refléter le nombre de paramètres (qui doivent être au moins aussi volumineux que le nombre d’espaces réservés « » dans votre chaîne m_strFilter ou m_strSort ).

L’infrastructure utilise ce nombre lorsqu’il paramétre la requête du jeu d’enregistrements.

Remarque

Ce nombre doit correspondre au nombre de « params » inscrits DoFieldExchange après un appel au SetFieldType paramètre CFieldExchange::param.

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

CDaoRecordset ::m_pDAORecordset

Contient un pointeur vers l’interface OLE de l’objet recordset DAO sous-jacent à l’objet CDaoRecordset .

Notes

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

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

CDaoRecordset ::m_pDatabase

Contient un pointeur vers l’objet CDaoDatabase via lequel le jeu d’enregistrements est connecté à une source de données.

Notes

Cette variable est définie de deux façons. En règle générale, vous passez un pointeur vers un objet déjà ouvert CDaoDatabase lorsque vous construisez l’objet recordset. Si vous passez la valeur NULL à la place, CDaoRecordset crée un CDaoDatabase objet pour vous et l’ouvre. Dans les deux cas, CDaoRecordset stocke le pointeur dans cette variable.

Normalement, vous n’aurez pas besoin directement d’utiliser le pointeur stocké dans m_pDatabase. Toutefois, si vous écrivez vos propres extensions CDaoRecordset, vous devrez peut-être utiliser le pointeur. Par exemple, vous aurez peut-être besoin du pointeur si vous lèvez votre propre CDaoException(s).

Pour plus d’informations, consultez la rubrique « Objet de base de données » dans l’aide DAO.

CDaoRecordset ::m_strFilter

Contient une chaîne utilisée pour construire la clause WHERE d’une instruction SQL.

Notes

Il n’inclut pas le mot réservé WHERE pour filtrer le jeu d’enregistrements. L’utilisation de ce membre de données n’est pas applicable aux jeux d’enregistrements de type table. L’utilisation de n’a aucun effet lors de m_strFilter l’ouverture d’un jeu d’enregistrements à l’aide d’un CDaoQueryDef pointeur.

Utilisez le format de date américain (mois-jour-année) lorsque vous filtrez des champs contenant des dates, même si vous n’utilisez pas la version américaine du moteur de base de données Microsoft Jet ; sinon, les données peuvent ne pas être filtrées comme prévu.

Pour plus d’informations, consultez la rubrique « Filtrer la propriété » dans l’aide de DAO.

CDaoRecordset ::m_strSort

Contient une chaîne contenant la clause ORDERBY d’une instruction SQL sans les mots réservés ORDERBY.

Notes

Vous pouvez trier sur des objets recordset de type feuille de réponse dynamique et d’instantané.

Vous ne pouvez pas trier les objets recordset de type table. Pour déterminer l’ordre de tri d’un jeu d’enregistrements de type table, appelez SetCurrentIndex.

L’utilisation de m_strSort n’a aucun effet lors de l’ouverture d’un jeu d’enregistrements à l’aide d’un CDaoQueryDef pointeur.

Pour plus d’informations, consultez la rubrique « Trier la propriété » dans l’aide de DAO.

CDaoRecordset ::Move

Appelez cette fonction membre pour positionner les enregistrements lRows du jeu d’enregistrements à partir de l’enregistrement actif.

virtual void Move(long lRows);

Paramètres

lRows
Nombre d’enregistrements à déplacer vers l’avant ou vers l’arrière. Les valeurs positives avancent vers la fin du jeu d’enregistrements. Les valeurs négatives se déplacent vers l’arrière, vers le début.

Notes

Vous pouvez avancer ou reculer. Move( 1 ) équivaut à MoveNext, et Move( -1 ) équivaut à MovePrev.

Attention

L’appel d’une des Move fonctions lève une exception si le jeu d’enregistrements n’a pas d’enregistrements. En général, appelez à la fois IsBOF et IsEOF avant une opération Move pour déterminer si le jeu d’enregistrements contient des enregistrements. Après avoir appelé Open ou Requery, appelez ou IsEOFIsBOF .

Remarque

Si vous avez fait défiler le début ou la fin du jeu d’enregistrements ( IsBOF ou IsEOF retourne un nombre différent de zéro), un appel pour Move lever un CDaoException.

Remarque

Si vous appelez l’une des Move fonctions pendant que l’enregistrement actif est mis à jour ou ajouté, les mises à jour sont perdues sans avertissement.

Lorsque vous appelez Move un instantané de défilement vers l’avant uniquement, le paramètre lRows doit être un entier positif et les signets ne sont pas autorisés. Vous pouvez donc avancer uniquement.

Pour effectuer le premier enregistrement, le dernier, le suivant ou l’enregistrement précédent dans un jeu d’enregistrements, appelez l’enregistrement actif, appelez la fonction membreMoveLastMoveNext, ou MovePrev la MoveFirstfonction membre.

Pour plus d’informations, consultez les rubriques « Move Method » et « MoveFirst, MoveLast, MoveNext, MovePrevious Methods » dans L’aide de DAO.

CDaoRecordset ::MoveFirst

Appelez cette fonction membre pour créer le premier enregistrement dans le jeu d’enregistrements (le cas échéant) l’enregistrement actif.

void MoveFirst();

Notes

Vous n’avez pas besoin d’appeler MoveFirst immédiatement après avoir ouvert le jeu d’enregistrements. À ce stade, le premier enregistrement (le cas échéant) est automatiquement l’enregistrement actif.

Attention

L’appel d’une des Move fonctions lève une exception si le jeu d’enregistrements n’a pas d’enregistrements. En général, appelez à la fois IsBOF et IsEOF avant une opération Move pour déterminer si le jeu d’enregistrements contient des enregistrements. Après avoir appelé Open ou Requery, appelez ou IsEOFIsBOF .

Remarque

Si vous appelez l’une des Move fonctions pendant que l’enregistrement actif est mis à jour ou ajouté, les mises à jour sont perdues sans avertissement.

Utilisez les fonctions pour passer de l’enregistrement Move à l’enregistrement sans appliquer de condition. Utilisez les opérations De recherche pour localiser les enregistrements dans un objet recordset de type feuille de réponse dynamique ou de type instantané qui satisfait à une certaine condition. Pour localiser un enregistrement dans un objet recordset de type table, appelez Seek.

Si le jeu d’enregistrements fait référence à un jeu d’enregistrements de type table, le mouvement suit l’index actuel de la table. Vous pouvez définir l’index actuel à l’aide de la propriété Index de l’objet DAO sous-jacent. Si vous ne définissez pas l’index actuel, l’ordre des enregistrements retournés n’est pas défini.

Si vous appelez MoveLast un objet recordset basé sur une requête SQL ou querydef, la requête est forcée à terminer et l’objet recordset est entièrement rempli.

Vous ne pouvez pas appeler la fonction ou MovePrev membre MoveFirst avec un instantané de défilement vers l’avant uniquement.

Pour déplacer la position de l’enregistrement actif dans un objet recordset, un nombre spécifique d’enregistrements vers l’avant ou vers l’arrière, appelez Move.

Pour plus d’informations, consultez les rubriques « Move Method » et « MoveFirst, MoveLast, MoveNext, MovePrevious Methods » dans L’aide de DAO.

CDaoRecordset ::MoveLast

Appelez cette fonction membre pour effectuer le dernier enregistrement (le cas échéant) dans le jeu d’enregistrements l’enregistrement actif.

void MoveLast();

Notes

Attention

L’appel d’une des Move fonctions lève une exception si le jeu d’enregistrements n’a pas d’enregistrements. En général, appelez à la fois IsBOF et IsEOF avant une opération Move pour déterminer si le jeu d’enregistrements contient des enregistrements. Après avoir appelé Open ou Requery, appelez ou IsEOFIsBOF .

Remarque

Si vous appelez l’une des Move fonctions pendant que l’enregistrement actif est mis à jour ou ajouté, les mises à jour sont perdues sans avertissement.

Utilisez les fonctions pour passer de l’enregistrement Move à l’enregistrement sans appliquer de condition. Utilisez les opérations De recherche pour localiser les enregistrements dans un objet recordset de type feuille de réponse dynamique ou de type instantané qui satisfait à une certaine condition. Pour localiser un enregistrement dans un objet recordset de type table, appelez Seek.

Si le jeu d’enregistrements fait référence à un jeu d’enregistrements de type table, le mouvement suit l’index actuel de la table. Vous pouvez définir l’index actuel à l’aide de la propriété Index de l’objet DAO sous-jacent. Si vous ne définissez pas l’index actuel, l’ordre des enregistrements retournés n’est pas défini.

Si vous appelez MoveLast un objet recordset basé sur une requête SQL ou querydef, la requête est forcée à terminer et l’objet recordset est entièrement rempli.

Pour déplacer la position de l’enregistrement actif dans un objet recordset, un nombre spécifique d’enregistrements vers l’avant ou vers l’arrière, appelez Move.

Pour plus d’informations, consultez les rubriques « Move Method » et « MoveFirst, MoveLast, MoveNext, MovePrevious Methods » dans L’aide de DAO.

CDaoRecordset ::MoveNext

Appelez cette fonction membre pour créer l’enregistrement suivant dans le jeu d’enregistrements l’enregistrement actif.

void MoveNext();

Notes

Il est recommandé d’appeler IsBOF avant de tenter de passer à l’enregistrement précédent. Un appel pour MovePrev lever une valeur si IsBOF elle renvoie une CDaoException valeur différente de zéro, indiquant que vous avez déjà fait défiler l’enregistrement avant le premier enregistrement ou qu’aucun enregistrement n’a été sélectionné par le jeu d’enregistrements.

Attention

L’appel d’une des Move fonctions lève une exception si le jeu d’enregistrements n’a pas d’enregistrements. En général, appelez à la fois IsBOF et IsEOF avant une opération Move pour déterminer si le jeu d’enregistrements contient des enregistrements. Après avoir appelé Open ou Requery, appelez ou IsEOFIsBOF .

Remarque

Si vous appelez l’une des Move fonctions pendant que l’enregistrement actif est mis à jour ou ajouté, les mises à jour sont perdues sans avertissement.

Utilisez les fonctions pour passer de l’enregistrement Move à l’enregistrement sans appliquer de condition. Utilisez les opérations De recherche pour localiser les enregistrements dans un objet recordset de type feuille de réponse dynamique ou de type instantané qui satisfait à une certaine condition. Pour localiser un enregistrement dans un objet recordset de type table, appelez Seek.

Si le jeu d’enregistrements fait référence à un jeu d’enregistrements de type table, le mouvement suit l’index actuel de la table. Vous pouvez définir l’index actuel à l’aide de la propriété Index de l’objet DAO sous-jacent. Si vous ne définissez pas l’index actuel, l’ordre des enregistrements retournés n’est pas défini.

Pour déplacer la position de l’enregistrement actif dans un objet recordset, un nombre spécifique d’enregistrements vers l’avant ou vers l’arrière, appelez Move.

Pour plus d’informations, consultez les rubriques « Move Method » et « MoveFirst, MoveLast, MoveNext, MovePrevious Methods » dans L’aide de DAO.

CDaoRecordset ::MovePrev

Appelez cette fonction membre pour faire de l’enregistrement précédent dans le jeu d’enregistrements l’enregistrement actif.

void MovePrev();

Notes

Il est recommandé d’appeler IsBOF avant de tenter de passer à l’enregistrement précédent. Un appel pour MovePrev lever une valeur si IsBOF elle renvoie une CDaoException valeur différente de zéro, indiquant que vous avez déjà fait défiler l’enregistrement avant le premier enregistrement ou qu’aucun enregistrement n’a été sélectionné par le jeu d’enregistrements.

Attention

L’appel d’une des Move fonctions lève une exception si le jeu d’enregistrements n’a pas d’enregistrements. En général, appelez à la fois IsBOF et IsEOF avant une opération Move pour déterminer si le jeu d’enregistrements contient des enregistrements. Après avoir appelé Open ou Requery, appelez ou IsEOFIsBOF .

Remarque

Si vous appelez l’une des Move fonctions pendant que l’enregistrement actif est mis à jour ou ajouté, les mises à jour sont perdues sans avertissement.

Utilisez les fonctions pour passer de l’enregistrement Move à l’enregistrement sans appliquer de condition. Utilisez les opérations De recherche pour localiser les enregistrements dans un objet recordset de type feuille de réponse dynamique ou de type instantané qui satisfait à une certaine condition. Pour localiser un enregistrement dans un objet recordset de type table, appelez Seek.

Si le jeu d’enregistrements fait référence à un jeu d’enregistrements de type table, le mouvement suit l’index actuel de la table. Vous pouvez définir l’index actuel à l’aide de la propriété Index de l’objet DAO sous-jacent. Si vous ne définissez pas l’index actuel, l’ordre des enregistrements retournés n’est pas défini.

Vous ne pouvez pas appeler la fonction ou MovePrev membre MoveFirst avec un instantané de défilement vers l’avant uniquement.

Pour déplacer la position de l’enregistrement actif dans un objet recordset, un nombre spécifique d’enregistrements vers l’avant ou vers l’arrière, appelez Move.

Pour plus d’informations, consultez les rubriques « Move Method » et « MoveFirst, MoveLast, MoveNext, MovePrevious Methods » dans L’aide de DAO.

CDaoRecordset ::Open

Vous devez appeler cette fonction membre pour récupérer les enregistrements du jeu d’enregistrements.

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 :

  • dbOpenDynaset Jeu d’enregistrements de type feuille de réponse dynamique avec défilement bidirectionnel. Il s’agit de la valeur par défaut.

  • dbOpenTable Jeu d’enregistrements de type table avec défilement bidirectionnel.

  • dbOpenSnapshot Jeu d’enregistrements de type instantané avec défilement bidirectionnel.

lpszSQL
Pointeur de chaîne contenant l’un des éléments suivants :

  • Pointeur NULL.

  • Nom d’un ou plusieurs tabledefs et/ou querydefs (séparés par des virgules).

  • Instruction SQL SELECT (éventuellement avec une clause SQL WHERE ou ORDERBY ).

  • Requête directe.

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

  • dbAppendOnly Vous ne pouvez ajouter que de nouveaux enregistrements (jeu d’enregistrements de type dynaset uniquement). Cette option signifie littéralement que les enregistrements peuvent uniquement être ajoutés. Les classes de base de données ODBC MFC ont une option d’ajout uniquement qui permet aux enregistrements d’être récupérés et ajoutés.

  • dbForwardOnly Le jeu d’enregistrements est un instantané de défilement vers l’avant uniquement.

  • dbSeeChanges Générez une exception si un autre utilisateur modifie les données que vous modifiez.

  • dbDenyWrite D’autres utilisateurs ne peuvent pas modifier ni ajouter d’enregistrements.

  • dbDenyRead Les autres utilisateurs ne peuvent pas afficher les enregistrements (jeu d’enregistrements de type table uniquement).

  • dbReadOnly Vous ne pouvez afficher que les enregistrements ; d’autres utilisateurs peuvent les modifier.

  • dbInconsistent Les mises à jour incohérentes sont autorisées (jeu d’enregistrements de type dynaset uniquement).

  • dbConsistent Seules les mises à jour cohérentes sont autorisées (jeu d’enregistrements de type dynaset uniquement).

Remarque

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

pTableDef
Pointeur vers un objet CDaoTableDef . Cette version est valide uniquement pour les jeux d’enregistrements de type table. Lors de l’utilisation de cette option, le CDaoDatabase pointeur utilisé pour construire l’élément CDaoRecordset n’est pas utilisé ; plutôt, la base de données dans laquelle réside tabledef est utilisée.

pQueryDef
Pointeur vers un objet CDaoQueryDef . Cette version est valide uniquement pour les jeux d’enregistrements de type dynaset et de type instantané. Lorsque vous utilisez cette option, le CDaoDatabase pointeur utilisé pour construire l’élément CDaoRecordset n’est pas utilisé ; plutôt, la base de données dans laquelle réside le querydef est utilisée.

Notes

Avant d’appeler Open, 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 CDaoDatabase objet déjà ouvert.

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

  • Lorsque vous construisez l’objet recordset, passez un pointeur NULL. L’objet recordset appelle GetDefaultDBName pour obtenir le nom de Microsoft Access. Fichier MDB à ouvrir. Le jeu d’enregistrements ouvre ensuite un CDaoDatabase objet et le conserve tant que le jeu d’enregistrements est ouvert. Lorsque vous appelez Close le jeu d’enregistrements, l’objet CDaoDatabase est également fermé.

    Remarque

    Lorsque le jeu d’enregistrements ouvre l’objet CDaoDatabase , il ouvre la source de données avec un accès non cluster.

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

Lorsque vous utilisez la deuxième version de l’emplacement où vous passez un CDaoTableDef objet, les colonnes résultantes sont disponibles pour vous permettre de Open lier via DoFieldExchange et le mécanisme DFX, et/ou de lier dynamiquement via GetFieldValue.

Remarque

Vous ne pouvez appeler Open qu’à l’aide d’un CDaoTableDef objet pour les jeux d’enregistrements de type table.

Lorsque vous utilisez la troisième version de l’endroit où vous passez un CDaoQueryDef objet, cette requête est exécutée et les colonnes obtenues sont disponibles pour vous permettre de Open lier via DoFieldExchange et le mécanisme DFX, et/ou de lier dynamiquement via GetFieldValue.

Remarque

Vous ne pouvez appeler Open qu’à l’aide d’un CDaoQueryDef objet pour les jeux d’enregistrements de type feuille de réponse dynamique et de type instantané.

Pour la première version de Open ce lpszSQL paramètre, les enregistrements sont sélectionnés en fonction des critères indiqués dans le tableau suivant.

Valeur du paramètre lpszSQL. Les enregistrements sélectionnés sont déterminés par Exemple
NULL Chaîne retournée par GetDefaultSQL.
Liste séparée par des virgules d’un ou plusieurs noms tabledefs et/ou querydef. Toutes les colonnes représentées dans le DoFieldExchange. "Customer"
SELECT column-list FROM table-list Colonnes spécifiées à partir des tablesdef(s) et/ou querydef(s) spécifiées. "SELECT CustId, CustName

FROM Customer"

La procédure habituelle consiste à passer null à Open; dans ce cas, Open les appels GetDefaultSQL, une fonction membre substituable générée par ClassWizard lors de la création d’une CDaoRecordsetclasse dérivée. Cette valeur donne le ou les noms tabledef et/ou querydef que vous avez spécifiés dans ClassWizard. Vous pouvez à la place spécifier d’autres informations dans le paramètre lpszSQL .

Quel que soit le passage, Open construit une chaîne SQL finale pour la requête (la chaîne peut avoir des clauses SQL WHERE et ORDERBY ajoutées à la chaîne lpszSQL que vous avez passée), puis exécute la requête. Vous pouvez examiner la chaîne construite en appelant après l’appel GetSQL Open.

Les membres de données de champ de votre classe recordset sont liés aux colonnes des données sélectionnées. Si des enregistrements sont retournés, le premier enregistrement devient l’enregistrement actif.

Si vous souhaitez définir des options pour le jeu d’enregistrements, telles qu’un filtre ou un tri, définissez m_strSort ou m_strFilter après avoir construit l’objet recordset, mais avant d’appeler Open. Si vous souhaitez actualiser les enregistrements dans le jeu d’enregistrements une fois que le jeu d’enregistrements est déjà ouvert, appelez Requery.

Si vous appelez Open un jeu d’enregistrements de type dynaset 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 tabledef représente une table jointe, créez un objet CDaoTableDef et appelez sa fonction membre GetConnect .

Utilisez l’indicateur dbSeeChanges si vous souhaitez intercepter les modifications apportées par un autre utilisateur ou un autre programme sur votre ordinateur lorsque vous modifiez ou supprimez le même enregistrement. Par exemple, si deux utilisateurs commencent à modifier le même enregistrement, le premier utilisateur à appeler la Update fonction membre réussit. Lorsqu’il Update est appelé par le deuxième utilisateur, un CDaoException est levée. De même, si le deuxième utilisateur tente d’appeler Delete pour supprimer l’enregistrement et qu’il a déjà été modifié par le premier utilisateur, un CDaoException événement se produit.

En règle générale, si l’utilisateur obtient cette CDaoException opération lors de la mise à jour, votre code doit actualiser le contenu des champs et récupérer les valeurs nouvellement modifiées. Si l’exception se produit lors de la suppression, votre code peut afficher les nouvelles données d’enregistrement à l’utilisateur et un message indiquant que les données ont récemment changé. À ce stade, votre code peut demander une confirmation que l’utilisateur souhaite toujours supprimer l’enregistrement.

Conseil

Utilisez l’option de défilement vers l’avant uniquement (dbForwardOnly) pour améliorer les performances lorsque votre application effectue un passage unique via un jeu d’enregistrements ouvert à partir d’une source de données ODBC.

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

CDaoRecordset ::Requery

Appelez cette fonction membre pour reconstruire (actualiser) un jeu d’enregistrements.

virtual void Requery();

Notes

Si des enregistrements sont retournés, le premier enregistrement devient l’enregistrement actif.

Pour que le jeu d’enregistrements reflète les ajouts et suppressions que vous ou d’autres utilisateurs effectuez à la source de données, vous devez reconstruire le jeu d’enregistrements en appelant Requery. Si le jeu d’enregistrements est un jeu de données dynamique, il reflète automatiquement les mises à jour que vous ou d’autres utilisateurs apportez à ses enregistrements existants (mais pas aux ajouts). Si le jeu d’enregistrements est un instantané, vous devez appeler Requery pour refléter les modifications par d’autres utilisateurs, ainsi que les ajouts et les suppressions.

Pour une feuille de réponse dynamique ou un instantané, appelez Requery quand vous souhaitez reconstruire le jeu d’enregistrements à l’aide de valeurs de paramètre. Définissez le nouveau filtre ou le tri en définissant m_strFilter et m_strSort avant d’appeler Requery. Définissez de nouveaux paramètres en affectant de nouvelles valeurs aux membres de données de paramètres avant d’appeler Requery.

Si la tentative de reconstruction du jeu d’enregistrements échoue, le jeu d’enregistrements est fermé. Avant d’appeler Requery, vous pouvez déterminer si le jeu d’enregistrements peut être réappliqué en appelant la CanRestart fonction membre. CanRestart ne garantit pas que cela Requery réussira.

Attention

Appelez Requery uniquement une fois que vous avez appelé Open.

Remarque

L’appel Requery modifie les signets DAO.

Vous ne pouvez pas appeler Requery un jeu d’enregistrements de type dynaset ou de type instantané si l’appel CanRestart retourne 0, ni l’utiliser sur un jeu d’enregistrements de type table.

Si la valeur est IsBOF différente de IsEOF zéro après l’appel Requery, la requête n’a pas retourné d’enregistrements et le jeu d’enregistrements ne contient aucune donnée.

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

CDaoRecordset ::Seek

Appelez cette fonction membre pour localiser l’enregistrement dans un objet recordset de type table indexé qui satisfait aux critères spécifiés pour l’index actif et en faire l’enregistrement actif.

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKey1,
    COleVariant* pKey2 = NULL,
    COleVariant* pKey3 = NULL);

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKeyArray,
    WORD nKeys);

Paramètres

lpszComparison
Une des expressions de chaîne suivantes : « < », « <= », « = », « = », « >="ou « > ».

pKey1
Pointeur vers un COleVariant dont la valeur correspond au premier champ de l’index. Obligatoire.

pKey2
Pointeur vers une COleVariant valeur dont la valeur correspond au deuxième champ de l’index, le cas échéant. La valeur par défaut est NULL.

pKey3
Pointeur vers un COleVariant dont la valeur correspond au troisième champ de l’index, le cas échéant. La valeur par défaut est NULL.

pKeyArray
Pointeur vers un tableau de variantes. La taille du tableau correspond au nombre de champs dans l’index.

nKeys
Entier correspondant à la taille du tableau, qui est le nombre de champs dans l’index.

Remarque

on ne spécifie pas de caractères génériques dans les clés. Les caractères génériques ne retournent Seek aucun enregistrement correspondant.

Valeur de retour

Différent de zéro si des enregistrements correspondants sont trouvés, sinon 0.

Notes

Utilisez la deuxième version (tableau) de Seek pour gérer les index de quatre champs ou plus.

Seek active la recherche d’index hautes performances sur les jeux d’enregistrements de type table. Vous devez définir l’index actuel en appelant SetCurrentIndex avant d’appeler Seek. Si l’index identifie un champ ou un champ de clé non unique, Seek localise le premier enregistrement qui répond aux critères. Si vous ne définissez pas d’index, une exception est levée.

Si vous ne créez pas un jeu d’enregistrements UNICODE, les COleVariant objets doivent être déclarés explicitement ANSI. Pour ce faire, utilisez la forme de constructeur COleVariant ::COleVariant( lpszSrc , vtSrc ) de constructeur avec vtSrc défini VT_BSTRT sur (ANSI) ou à l’aide de la COleVariant fonction SetString( lpszSrc , vtSrc ) avec vtSrc défini VT_BSTRTsur .

Lorsque vous appelezSeek, vous passez une ou plusieurs valeurs de clé et un opérateur de comparaison («  », « <<= », « = », « = », « >="ou « > »). Seek recherche les champs de clé spécifiés et localise le premier enregistrement qui répond aux critères spécifiés par lpszComparison et pKey1. Une fois trouvé, Seek retourne différent de zéro et rend cet enregistrement actif. En Seek cas d’échec de recherche d’une correspondance, Seek retourne zéro et l’enregistrement actif n’est pas défini. Lorsque vous utilisez DAO directement, vous devez vérifier explicitement la propriété NoMatch.

Si lpszComparison l’argument est « = », «> = » ou «> », Seek commence au début de l’index. Si lpszComparison est «< » ou «< = », Seek commence à la fin de l’index et recherche vers l’arrière, sauf s’il existe des entrées d’index en double à la fin. Dans ce cas, Seek commence à une entrée arbitraire parmi les entrées d’index dupliquées à la fin de l’index.

Il n’est pas obligé d’être un enregistrement actif lorsque vous utilisez Seek.

Pour localiser un enregistrement dans un jeu d’enregistrements de type feuille de réponse dynamique ou de type instantané qui satisfait à une condition spécifique, utilisez les opérations De recherche. Pour inclure tous les enregistrements, et non seulement ceux qui répondent à une condition spécifique, utilisez les opérations Move pour passer de l’enregistrement à l’enregistrement.

Vous ne pouvez pas appeler Seek une table jointe de n’importe quel type, car les tables jointes doivent être ouvertes en tant qu’ensembles d’enregistrements de type feuille de réponse dynamique ou de type instantané. Toutefois, si vous appelez CDaoDatabase::Open directement pour ouvrir une base de données ISAM installable, vous pouvez appeler Seek des tables dans cette base de données, bien que les performances soient lentes.

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

CDaoRecordset ::SetAbsolutePosition

Définit le numéro d’enregistrement relatif de l’enregistrement actif d’un objet recordset.

void SetAbsolutePosition(long lPosition);

Paramètres

lPosition
Correspond à la position ordinale de l’enregistrement actif dans le jeu d’enregistrements.

Notes

L’appel SetAbsolutePosition vous permet de positionner le pointeur d’enregistrement actif vers un enregistrement spécifique en fonction de sa position ordinale dans un jeu d’enregistrements de type feuille de réponse dynamique ou de type instantané. Vous pouvez également déterminer le numéro d’enregistrement actuel en appelant GetAbsolutePosition.

Remarque

Cette fonction membre est valide uniquement pour les jeux d’enregistrements de type feuille de réponse dynamique et de type instantané.

La valeur de propriété AbsolutePosition de l’objet DAO sous-jacent est basée sur zéro ; un paramètre de 0 fait référence au premier enregistrement dans le jeu d’enregistrements. La définition d’une valeur supérieure au nombre d’enregistrements renseignés entraîne la levée d’une exception par MFC. Vous pouvez déterminer le nombre d’enregistrements renseignés dans le jeu d’enregistrements en appelant la GetRecordCount fonction membre.

Si l’enregistrement actif est supprimé, la valeur de la propriété AbsolutePosition n’est pas définie et MFC lève une exception si elle est référencée. De nouveaux enregistrements sont ajoutés à la fin de la séquence.

Remarque

Cette propriété n’est pas destinée à être utilisée comme numéro d’enregistrement de substitution. Les signets sont toujours la façon recommandée de conserver et de revenir à une position donnée et sont la seule façon de positionner l’enregistrement actif sur tous les types d’objets recordset qui prennent en charge les signets. En particulier, la position d’un enregistrement donné change lorsque les enregistrements précédents sont supprimés. Il n’existe pas non plus d’assurance qu’un enregistrement donné aura la même position absolue si le jeu d’enregistrements est recréé, car l’ordre des enregistrements individuels au sein d’un jeu d’enregistrements n’est pas garanti, sauf s’il est créé avec une instruction SQL à l’aide d’une clause ORDERBY .

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

CDaoRecordset ::SetBookmark

Appelez cette fonction membre pour positionner le jeu d’enregistrements sur l’enregistrement contenant le signet spécifié.

void SetBookmark(COleVariant varBookmark);

Paramètres

varBookmark
Objet COleVariant contenant la valeur de signet d’un enregistrement spécifique.

Notes

Lorsqu’un objet recordset est créé ou ouvert, chacun de ses enregistrements a déjà un signet unique. Vous pouvez récupérer le signet de l’enregistrement actif en appelant GetBookmark et en enregistrant la valeur dans un COleVariant objet. Vous pouvez revenir ultérieurement à cet enregistrement en appelant SetBookmark à l’aide de la valeur de signet enregistrée.

Remarque

L’appel de Requery modifie les signets DAO.

Si vous ne créez pas un jeu d’enregistrements UNICODE, l’objet COleVariant doit être déclaré explicitement ANSI. Pour ce faire, utilisez la forme de constructeur COleVariant ::COleVariant( lpszSrc , vtSrc ) de constructeur avec vtSrc défini VT_BSTRT sur (ANSI) ou à l’aide de la COleVariant fonction SetString( lpszSrc , vtSrc ) avec vtSrc défini VT_BSTRTsur .

Pour plus d’informations, consultez les rubriques « Bookmark Property » et Bookmarkable Property » dans l’aide de DAO.

CDaoRecordset ::SetCacheSize

Appelez cette fonction membre pour définir le nombre d’enregistrements à mettre en cache.

void SetCacheSize(long lSize);

Paramètres

lSize
Spécifie le nombre d’enregistrements. Une valeur classique est 100. Un paramètre de 0 désactive la mise en cache. Le paramètre doit être compris entre 5 et 1 200 enregistrements. Le cache peut utiliser une quantité considérable de mémoire.

Notes

Un cache est un espace dans la mémoire locale qui contient les données les plus récemment récupérées du serveur au cas où les données sont demandées à nouveau pendant l’exécution de l’application. La mise en cache des données améliore les performances d’une application qui récupère des données à partir d’un serveur distant via des objets recordset de type dynaset. Lorsque des données sont demandées, le moteur de base de données Microsoft Jet vérifie d’abord le cache des données demandées au lieu de les récupérer à partir du serveur, ce qui prend plus de temps. Les données qui ne proviennent pas d’une source de données ODBC ne sont pas enregistrées dans le cache.

Toute source de données ODBC, telle qu’une table jointe, peut avoir un cache local. Pour créer le cache, ouvrez un objet recordset à partir de la source de données distante, appelez les SetCacheSize fonctions membres SetCacheStart , puis appelez la FillCache fonction membre ou parcourez les enregistrements à l’aide de l’une des opérations Move. Le paramètre lSize de la SetCacheSize fonction membre peut être basé sur le nombre d’enregistrements que votre application peut utiliser à la fois. Par exemple, si vous utilisez un jeu d’enregistrements comme source des données à afficher à l’écran, vous pouvez passer le SetCacheSize paramètre lSize comme 20 pour afficher 20 enregistrements à la fois.

Pour plus d’informations, consultez la rubrique « CacheSize, CacheStart Properties » dans l’aide de DAO.

CDaoRecordset ::SetCacheStart

Appelez cette fonction membre pour spécifier le signet du premier enregistrement du jeu d’enregistrements à mettre en cache.

void SetCacheStart(COleVariant varBookmark);

Paramètres

varBookmark
COleVariant qui spécifie le signet du premier enregistrement dans le jeu d’enregistrements à mettre en cache.

Notes

Vous pouvez utiliser la valeur de signet de n’importe quel enregistrement pour le paramètre varBookmark de la SetCacheStart fonction membre. Définissez l’enregistrement que vous souhaitez démarrer le cache avec l’enregistrement actif, établissez un signet pour cet enregistrement à l’aide de SetBookmark et transmettez la valeur de signet comme paramètre pour la SetCacheStart fonction membre.

Le moteur de base de données Microsoft Jet demande des enregistrements dans la plage de cache à partir du cache et demande des enregistrements en dehors de la plage de cache du serveur.

Les enregistrements récupérés à partir du cache ne reflètent pas les modifications apportées simultanément aux données sources par d’autres utilisateurs.

Pour forcer une mise à jour de toutes les données mises en cache, passez le paramètre lSize de SetCacheSize 0, appelez SetCacheSize à nouveau avec la taille du cache que vous avez demandé à l’origine, puis appelez la FillCache fonction membre.

Si vous ne créez pas un jeu d’enregistrements UNICODE, l’objet COleVariant doit être déclaré explicitement ANSI. Pour ce faire, utilisez la forme de constructeur COleVariant ::COleVariant( lpszSrc , vtSrc ) de constructeur avec vtSrc défini VT_BSTRT sur (ANSI) ou à l’aide de la COleVariant fonction SetString( lpszSrc , vtSrc ) avec vtSrc défini VT_BSTRTsur .

Pour plus d’informations, consultez la rubrique CacheSize, CacheStart Properties » dans l’aide de DAO.

CDaoRecordset ::SetCurrentIndex

Appelez cette fonction membre pour définir un index sur un jeu d’enregistrements de type table.

void SetCurrentIndex(LPCTSTR lpszIndex);

Paramètres

lpszIndex
Pointeur contenant le nom de l’index à définir.

Notes

Les enregistrements dans les tables de base ne sont pas stockés dans un ordre particulier. La définition d’un index modifie l’ordre des enregistrements retournés par la base de données, mais il n’affecte pas l’ordre dans lequel les enregistrements sont stockés. L’index spécifié doit déjà être défini. Si vous essayez d’utiliser un objet d’index qui n’existe pas ou si l’index n’est pas défini lorsque vous appelez Seek, MFC lève une exception.

Vous pouvez créer un index pour la table en appelant CDaoTableDef ::CreateIndex et en ajoutant le nouvel index à la collection Indexes du tabledef sous-jacent en appelant CDaoTableDef ::Append, puis en rouvrant le jeu d’enregistrements.

Les enregistrements retournés à partir d’un jeu d’enregistrements de type table ne peuvent être classés que par les index définis pour le tabledef sous-jacent. Pour trier les enregistrements dans un autre ordre, vous pouvez ouvrir un jeu d’enregistrements de type feuille de réponse dynamique ou de type instantané à l’aide d’une clause SQL ORDERBY stockée dans CDaoRecordset ::m_strSort.

Pour plus d’informations, consultez la rubrique « Index Object » et la définition « current index » dans DAO Help.

CDaoRecordset ::SetFieldDirty

Appelez cette fonction membre pour marquer un membre de données de champ du jeu d’enregistrements comme modifié ou inchangé.

void SetFieldDirty(
    void* pv,
    BOOL bDirty = TRUE);

Paramètres

Pv
Contient l’adresse d’un membre de données de champ dans le jeu d’enregistrements ou NULL. Si la valeur est NULL, tous les membres de données de champ dans le jeu d’enregistrements sont marqués. (C++ NULL n’est pas identique à Null dans la terminologie de la base de données, ce qui signifie « n’ayant pas de valeur. »)

bDirty
TRUE si le membre de données de champ doit être marqué comme étant « sale » (modifié). Sinon, FALSE si le membre de données de champ doit être marqué comme « propre » (inchangé).

Notes

Le marquage des champs comme inchangés garantit que le champ n’est pas mis à jour.

Le framework marque les membres de données de champ modifiés pour s’assurer qu’ils seront écrits dans l’enregistrement sur la source de données par le mécanisme d’échange de champs d’enregistrement DAO (DFX). La modification de la valeur d’un champ définit généralement le champ sale automatiquement. Vous devrez donc rarement vous appeler SetFieldDirty , mais vous pouvez parfois vous assurer que les colonnes sont explicitement mises à jour ou insérées indépendamment de la valeur du membre de données de champ. Le mécanisme DFX utilise également l’utilisation de PSEUDONULL. Pour plus d’informations, consultez CDaoFieldExchange ::m_nOperation.

Si le mécanisme de double mise en mémoire tampon n’est pas utilisé, la modification de la valeur du champ ne définit pas automatiquement le champ comme étant sale. Dans ce cas, il est nécessaire de définir explicitement le champ comme étant sale. L’indicateur contenu dans m_bCheckCacheForDirtyFields contrôle cette vérification automatique des champs.

Remarque

Appelez cette fonction membre uniquement après avoir appelé Edit ou AddNew.

L’utilisation de NULL pour le premier argument de la fonction applique la fonction à tous les outputColumn champs, et non aux champs param dans CDaoFieldExchange. Par exemple, l’appel

SetFieldDirty(NULL);

définit uniquement outputColumn les champs sur NULL ; Les champs param ne sont pas affectés.

Pour travailler sur un param, vous devez fournir l’adresse réelle de l’analyseur individuel sur lequel vous souhaitez travailler, par exemple :

SetFieldDirty(&m_strParam);

Cela signifie que vous ne pouvez pas définir tous les champs param sur NULL, comme vous le pouvez avec outputColumn les champs.

SetFieldDirty est implémenté par le biais DoFieldExchangede .

CDaoRecordset ::SetFieldNull

Appelez cette fonction membre pour marquer un membre de données de champ du jeu d’enregistrements comme Null (en particulier sans valeur) ou comme non Null.

void SetFieldNull(
    void* pv,
    BOOL bNull = TRUE);

Paramètres

Pv
Contient l’adresse d’un membre de données de champ dans le jeu d’enregistrements ou NULL. Si la valeur est NULL, tous les membres de données de champ dans le jeu d’enregistrements sont marqués. (C++ NULL n’est pas identique à Null dans la terminologie de la base de données, ce qui signifie « n’ayant pas de valeur. »)

bNull
Différent de zéro si le membre de données de champ doit être marqué comme n’ayant aucune valeur (Null). Sinon, 0 si le membre de données de champ doit être marqué comme non Null.

Notes

SetFieldNull est utilisé pour les champs liés dans le DoFieldExchange mécanisme.

Lorsque vous ajoutez un nouvel enregistrement à un jeu d’enregistrements, tous les membres de données de champ sont initialement définis sur une valeur Null et marqués comme « dirty » (modifié). Lorsque vous récupérez un enregistrement à partir d’une source de données, ses colonnes ont déjà des valeurs ou sont Null. S’il n’est pas approprié de créer un champ Null, une exception CDaoException est levée.

Si vous utilisez le mécanisme de mise en mémoire tampon double, par exemple, si vous souhaitez spécifiquement désigner un champ de l’enregistrement actif comme n’ayant pas de valeur, appelez SetFieldNull avec bNull défini sur TRUE pour l’indiquer comme Null. Si un champ a été précédemment marqué Null et que vous souhaitez maintenant lui donner une valeur, définissez sa nouvelle valeur. Vous n’avez pas besoin de supprimer l’indicateur Null avec SetFieldNull. Pour déterminer si le champ est autorisé à être Null, appelez IsFieldNullable.

Si vous n’utilisez pas le mécanisme de mise en mémoire tampon double, la modification de la valeur du champ ne définit pas automatiquement le champ comme étant sale et non Null. Vous devez définir spécifiquement les champs sales et non Null. L’indicateur contenu dans m_bCheckCacheForDirtyFields contrôle cette vérification automatique des champs.

Le mécanisme DFX utilise l’utilisation de PSEUDONULL. Pour plus d’informations, consultez CDaoFieldExchange ::m_nOperation.

Remarque

Appelez cette fonction membre uniquement après avoir appelé Edit ou AddNew.

L’utilisation de NULL pour le premier argument de la fonction applique la fonction uniquement aux champs, et non aux outputColumn champs param dans CDaoFieldExchange. Par exemple, l’appel

SetFieldNull(NULL);

définit uniquement outputColumn les champs sur NULL ; Les champs param ne sont pas affectés.

CDaoRecordset ::SetFieldValue

Appelez cette fonction membre pour définir la valeur d’un champ, soit par position ordinale, soit en modifiant la valeur de la chaîne.

virtual void SetFieldValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

virtual void SetFieldValue(
    int nIndex,
    const COleVariant& varValue);

void SetFieldValue(
    LPCTSTR lpszName,
    LPCTSTR lpszValue);

void SetFieldValue(
    int nIndex,
    LPCTSTR lpszValue);

Paramètres

lpszName
Pointeur vers une chaîne contenant le nom d’un champ.

varValue
Référence à un objet COleVariant contenant la valeur du contenu du champ.

nIndex
Entier qui représente la position ordinale du champ dans la collection Fields du jeu d’enregistrements (de base zéro).

lpszValue
Pointeur vers une chaîne contenant la valeur du contenu du champ.

Notes

Utilisez SetFieldValue et GetFieldValue pour lier dynamiquement des champs au moment de l’exécution plutôt que de lier statiquement des colonnes à l’aide du mécanisme DoFieldExchange .

Si vous ne créez pas un jeu d’enregistrements UNICODE, vous devez utiliser une forme de SetFieldValue ce qui ne contient pas de COleVariant paramètre, ou l’objet COleVariant doit être déclaré explicitement ANSI. Pour ce faire, utilisez la forme de constructeur COleVariant ::COleVariant( lpszSrc , vtSrc ) de constructeur avec vtSrc défini VT_BSTRT sur (ANSI) ou à l’aide de la COleVariant fonction SetString( lpszSrc , vtSrc ) avec vtSrc défini VT_BSTRTsur .

Pour plus d’informations, consultez les rubriques « Objet de champ » et « Value Property » dans l’aide de DAO.

CDaoRecordset ::SetFieldValueNull

Appelez cette fonction membre pour définir le champ sur une valeur Null.

void SetFieldValueNull(int nIndex);
void SetFieldValueNull(LPCTSTR lpszName);

Paramètres

nIndex
Index du champ dans le jeu d’enregistrements, pour rechercher par index de base zéro.

lpszName
Nom du champ dans le jeu d’enregistrements, pour rechercher par nom.

Notes

C++ NULL n’est pas identique à Null, ce qui, dans la terminologie de la base de données, signifie « sans valeur ».

Pour plus d’informations, consultez les rubriques « Objet de champ » et « Value Property » dans l’aide de DAO.

CDaoRecordset ::SetLockingMode

Appelez cette fonction membre pour définir le type de verrouillage du jeu d’enregistrements.

void SetLockingMode(BOOL bPessimistic);

Paramètres

bPessimistic
Indicateur qui indique le type de verrouillage.

Notes

Lorsque le verrouillage pessimiste est en vigueur, la page 2K contenant l’enregistrement que vous modifiez est verrouillée dès que vous appelez la Edit fonction membre. La page est déverrouillée lorsque vous appelez la fonction membre ou Close l’une Update des opérations Move ou Find.

Lorsque le verrouillage optimiste est en vigueur, la page 2K contenant l’enregistrement est verrouillée uniquement lorsque l’enregistrement est mis à jour avec la Update fonction membre.

Si une page est verrouillée, aucun autre utilisateur ne peut modifier les enregistrements sur la même page. Si vous appelez SetLockingMode et transmettez une valeur différente de zéro et qu’un autre utilisateur a déjà verrouillé la page, une exception est levée lorsque vous appelez Edit. D’autres utilisateurs peuvent lire des données à partir de pages verrouillées.

Si vous appelez SetLockingMode avec une valeur zéro et un appel Update ultérieur pendant que la page est verrouillée par un autre utilisateur, une exception se produit. Pour afficher les modifications apportées à votre enregistrement par un autre utilisateur (et perdre vos modifications), appelez la SetBookmark fonction membre avec la valeur de signet de l’enregistrement actif.

Lorsque vous utilisez des sources de données ODBC, le mode de verrouillage est toujours optimiste.

CDaoRecordset ::SetParamValue

Appelez cette fonction membre pour définir la valeur d’un paramètre dans le jeu d’enregistrements au moment de l’exécution.

virtual void SetParamValue(
    int nIndex,
    const COleVariant& varValue);

virtual void SetParamValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

Paramètres

nIndex
Position numérique du paramètre dans la collection Parameters de querydef.

var
Valeur à définir ; voir Remarques.

lpszName
Nom du paramètre dont vous souhaitez définir la valeur.

Notes

Le paramètre doit déjà avoir été établi dans le cadre de la chaîne SQL du jeu d’enregistrements. Vous pouvez accéder au paramètre par nom ou par sa position d’index dans la collection.

Spécifiez la valeur à définir en tant qu’objet COleVariant . Pour plus d’informations sur la définition de la valeur et du type souhaités dans votre COleVariant objet, consultez la classe COleVariant. Si vous ne créez pas un jeu d’enregistrements UNICODE, l’objet COleVariant doit être déclaré explicitement ANSI. Pour ce faire, utilisez la forme de constructeur COleVariant ::COleVariant( lpszSrc , vtSrc ) de constructeur avec vtSrc défini VT_BSTRT sur (ANSI) ou à l’aide de la COleVariant fonction SetString( lpszSrc , vtSrc ) avec vtSrc défini VT_BSTRTsur .

CDaoRecordset ::SetParamValueNull

Appelez cette fonction membre pour définir le paramètre sur une valeur Null.

void SetParamValueNull(int nIndex);
void SetParamValueNull(LPCTSTR lpszName);

Paramètres

nIndex
Index du champ dans le jeu d’enregistrements, pour rechercher par index de base zéro.

lpszName
Nom du champ dans le jeu d’enregistrements, pour rechercher par nom.

Notes

C++ NULL n’est pas identique à Null, ce qui, dans la terminologie de la base de données, signifie « sans valeur ».

CDaoRecordset ::SetPercentPosition

Appelez cette fonction membre pour définir une valeur qui modifie l’emplacement approximatif de l’enregistrement actif dans l’objet recordset en fonction d’un pourcentage des enregistrements dans le jeu d’enregistrements.

void SetPercentPosition(float fPosition);

Paramètres

fPosition
Nombre compris entre 0 et 100.

Notes

Lors de l’utilisation d’un jeu d’enregistrements de type dynaset ou d’instantané, renseignez d’abord le jeu d’enregistrements en passant au dernier enregistrement avant d’appeler SetPercentPosition. Si vous appelez SetPercentPosition avant de remplir entièrement le jeu d’enregistrements, la quantité de déplacement est relative au nombre d’enregistrements accessibles, comme indiqué par la valeur de GetRecordCount. Vous pouvez passer au dernier enregistrement en appelant MoveLast.

Une fois que vous appelez SetPercentPosition, l’enregistrement à la position approximative correspondant à cette valeur devient actif.

Remarque

L’appel SetPercentPosition pour déplacer l’enregistrement actif vers un enregistrement spécifique dans un jeu d’enregistrements n’est pas recommandé. Appelez plutôt la fonction membre SetBookmark .

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

CDaoRecordset ::Update

Appelez cette fonction membre après un appel à la fonction ou Edit à la AddNew fonction membre.

virtual void Update();

Notes

Cet appel est nécessaire pour terminer l’opération ou Edit l’opérationAddNew.

Préparez à la fois AddNew une Edit mémoire tampon de modification dans laquelle les données ajoutées ou modifiées sont placées pour l’enregistrement dans la source de données. Update enregistre les données. Seuls ces champs marqués ou détectés comme modifiés sont mis à jour.

Si la source de données prend en charge les transactions, vous pouvez effectuer l’appel Update (et sa partie correspondante AddNew ou Edit appel) d’une transaction.

Attention

Si vous appelez Update sans appeler l’un ou l’autreAddNew, EditUpdate lève un CDaoException. Si vous appelez AddNew ou Edit, vous devez appeler avant d’appeler Update MoveNext ou fermer le jeu d’enregistrements ou la connexion de la source de données. Sinon, vos modifications sont perdues sans notification.

Lorsque l’objet recordset est pessimistement verrouillé dans un environnement multiutilisateur, l’enregistrement reste verrouillé à partir du moment Edit où il est utilisé jusqu’à la fin de la mise à jour. Si le jeu d’enregistrements est verrouillé de manière optimiste, l’enregistrement est verrouillé et comparé à l’enregistrement pré-modifié juste avant sa mise à jour dans la base de données. Si l’enregistrement a changé depuis que vous avez appelé Edit, l’opération Update échoue et MFC lève une exception. Vous pouvez modifier le mode de verrouillage avec SetLockingMode.

Remarque

Le verrouillage optimiste est toujours utilisé sur les formats de base de données externes, tels que ODBC et ISAM installable.

Pour plus d’informations, consultez les rubriques « AddNew Method », « CancelUpdate Method », « Delete Method », « LastModified Property », « Update Method » et « EditMode Property » dans L’aide de DAO.

Voir aussi

CObject, classe
Graphique hiérarchique
CDaoTableDef, classe
CDaoWorkspace, classe
CDaoDatabase, classe
CDaoQueryDef, classe