Recordset : signets et positions absolues (ODBC)
Cette rubrique s'applique aux classes ODBC MFC.
Lorsque vous naviguez au sein d'un recordset, il arrive fréquemment que vous ayez besoin de revenir sur un enregistrement donné.Deux méthodes, le signet et la position absolue, permettent de répondre à ce besoin.
Cette rubrique explique :
comment utiliser les signets ;
comment attribuer une position absolue à l'enregistrement courant.
Signets dans ODBC MFC
Un signet identifie un enregistrement de façon unique.Lorsque vous naviguez au sein d'un recordset, vous ne pouvez pas toujours vous fier à la position absolue d'un enregistrement dans la mesure où les enregistrements peuvent être supprimés du recordset.La solution la plus fiable pour conserver la trace de la position d'un enregistrement consiste à utiliser un signet.La classe CRecordset propose des fonctions membres pour :
obtenir le signet de l'enregistrement courant, de telle sorte que vous puissiez le sauvegarder dans une variable (GetBookmark) ;
atteindre rapidement un enregistrement donné en indiquant son signet, préalablement sauvegardé dans une variable (SetBookmark).
L'exemple ci-après illustre comment utiliser les fonctions membres pour marquer l'enregistrement courant et y revenir par la suite.
// rs is a CRecordset or
// CRecordset-derived object
CDBVariant varRecordToReturnTo;
rs.GetBookmark( varRecordToReturnTo );
// More code in which you
// move to other records
rs.SetBookmark( varRecordToReturnTo );
Il n'est pas nécessaire d'extraire le type de données sous-jacent de l'objet CDBVariant, classe.Assignez la valeur à l'aide de GetBookmark et accédez au signet avec SetBookmark.
[!REMARQUE]
Remarque Il se peut, en fonction du pilote ODBC et du type du recordset, que les signets ne soient pas pris en charge.Vous pouvez facilement savoir si les signets sont pris en charge en appelant CRecordset::CanBookmark.Par ailleurs, si les signets sont pris en charge, vous devez choisir explicitement de les implémenter en précisant l'option CRecordset::useBookmarks dans la fonction membre CRecordset::Open.Vous devez également vérifier que les signets persistent après certaines opérations sur les recordsets.Par exemple, si vous effectuez une opération Requery (lancement d'une nouvelle requête) sur un recordset, il se peut que les signets ne soient plus valides.Appelez CDatabase::GetBookmarkPersistence pour vérifier si vous pouvez appeler SetBookmarksans risque.
Positions absolues dans ODBC MFC
Outre les signets, la classe CRecordset permet de définir l'enregistrement courant en indiquant sa position ordinale.Cette méthode est appelée positionnement absolu.
[!REMARQUE]
Le positionnement absolu n'est pas disponible pour les recordsets en avant seulement.Pour plus d'informations sur les recordsets en avant seulement, consultez Recordset (ODBC).
Pour déplacer le pointeur d'enregistrement actif qui utilise la position absolue, appelez CRecordset::SetAbsolutePosition.Lorsque vous passez une valeur à SetAbsolutePosition, l'enregistrement correspondant à cette position ordinale devient l'enregistrement courant.
[!REMARQUE]
La position absolue d'un enregistrement n'est potentiellement pas fiable.Si l'utilisateur supprime des enregistrements du recordset; la position ordinale de tous les enregistrements suivants s'en trouve modifiée.Les signets constituent la méthode recommandée pour déplacer l'enregistrement courant.Pour plus d'informations, consultez Signets dans ODBC MFC.
Pour plus d'informations sur la navigation au sein d'un recordset, consultez Recordset : défilement (ODBC).