Recordset (ODBC)

Cette rubrique s’applique aux classes ODBC MFC.

Un objet CRecordset représente un jeu d’enregistrements sélectionnés dans une source de données. Les enregistrements peuvent provenir :

  • Une table.

  • D’une requête.

  • D’une procédure stockée qui accède à une ou plusieurs tables.

Exemple de recordset basé sur une table : « all customers », qui accède à une table Customer. Un exemple de requête est « toutes les factures pour Joe Smith ». Un exemple d’ensemble d’enregistrements basé sur une procédure stockée (parfois appelée requête prédéfinie) est « tous les comptes délinquents », qui appelle une procédure stockée dans la base de données principale. Un recordset peut joindre deux ou plusieurs tables de la même source de données, mais pas des tables de différentes sources de données.

Remarque

Certains pilotes ODBC prennent en charge des vues de la base de données. Dans ce cas, une vue est une requête créée à l’origine avec l’instruction SQL CREATE VIEW.

Fonctionnalités du jeu d’enregistrements

Tous les objets recordset partagent les fonctionnalités suivantes :

  • Si la source de données n’est pas en lecture seule, vous pouvez spécifier que votre recordset peut être mis à jour, ajouté ou en lecture seule. Si le recordset peut être mis à jour, vous pouvez choisir des méthodes de verrouillage pessimistes ou optimistes, à condition que le pilote fournisse une prise en charge appropriée pour le verrouillage. Si la source de données est en lecture seule, le recordset est en lecture seule.

  • Vous pouvez appeler des fonctions membres pour faire défiler les enregistrements sélectionnés.

  • Vous pouvez filtrer les enregistrements pour contraindre les enregistrements sélectionnés parmi ceux disponibles.

  • Vous pouvez trier les enregistrements par ordre croissant ou décroissant, sur une ou plusieurs colonnes.

  • Vous pouvez paramétrer le recordset pour qualifier la sélection de recordset au moment de l’exécution.

Instantanés et dynasets

Il existe deux types de jeux d’enregistrements principaux : les instantanés et les feuilles de réponse dynamiques. Les deux sont pris en charge par la classe CRecordset. Chacun partage les caractéristiques communes de tous les recordsets, mais chacun étend également les fonctionnalités communes d’une façon qui lui est propre. Les instantanés fournissent une vue statique des données et sont utiles pour les rapports et d’autres situations dans lesquelles vous avez besoin d’une vue des données telles qu’elles étaient à un moment donné. Les feuilles de réponse dynamiques sont utiles quand vous voulez que les mises à jour effectuées par d’autres utilisateurs soient visibles dans le recordset sans avoir à réinterroger ou actualiser le recordset. Les instantanés et les feuilles de réponse dynamiques sont modifiables ou en lecture seule. Pour refléter les enregistrements ajoutés ou supprimés par d’autres utilisateurs, appelez CRecordset::Requery.

CRecordset autorise aussi deux autres types de recordsets : les recordsets dynamiques et les recordsets avant uniquement. Les recordsets dynamiques sont similaires aux feuilles de réponse dynamiques, toutefois, ils reflètent tous les enregistrements ajoutés ou supprimés sans appeler CRecordset::Requery. Pour cette raison, les recordsets dynamiques sont généralement gourmands en temps de traitement sur le SGBD et de nombreux pilotes ODBC ne les prennent pas en charge. En revanche, les recordsets de type avant uniquement fournissent la méthode d’accès aux données la plus efficace pour les recordsets qui n’ont pas besoin de mises à jour ni de défilement arrière. Par exemple, vous pouvez utiliser un recordset de type avant uniquement pour migrer des données d’une source de données vers une autre, où vous devez uniquement déplacer des données vers l’avant. Pour utiliser un recordset de type avant uniquement, vous devez effectuer les deux actions suivantes :

  • Passer l’option CRecordset::forwardOnly comme paramètre nOpenType de la fonction membre Open.

  • Spécifier CRecordset::readOnly dans le paramètre dwOptions de Open.

    Remarque

    Pour plus d’informations sur les exigences du pilote ODBC pour la prise en charge des feuilles de réponse dynamiques, consultez ODBC. Pour la liste des pilotes ODBC inclus dans cette version de Visual C++ et pour des informations sur l’obtention de pilotes supplémentaires, consultez la Liste des pilotes ODBC.

Vos recordsets

Pour chaque table, vue ou procédure stockée distincte à laquelle vous voulez accéder, vous définissez généralement une classe dérivée de CRecordset. (L’exception est une jointure de base de données, dans laquelle un jeu d’enregistrements représente des colonnes à partir de deux ou plusieurs tables.) Lorsque vous dérivez une classe recordset, vous activez le mécanisme RFX (Record Field Exchange) ou le mécanisme d’échange de champs d’enregistrement en bloc (Bulk RFX), qui sont similaires au mécanisme DDX (Dialog Data Exchange). RFX et RFX en bloc simplifient le transfert des données de la source de données vers votre recordset. RFX transfère en plus les données de votre recordset vers la source de données. Pour plus d’informations, consultez Enregistrement Field Exchange (RFX) et Recordset : Extraction d’enregistrements en bloc (ODBC).

Un objet recordset vous donne accès à tous les enregistrements sélectionnés. Vous faites défiler les enregistrements sélectionnés à l’aide de fonctions membres CRecordset, comme MoveNext et MovePrev. En même temps, un objet recordset représente un seul des enregistrements sélectionnés, l’enregistrement actuel. Vous pouvez examiner les champs de l’enregistrement actuel en déclarant des variables membres de la classe recordset qui correspondent aux colonnes de la table ou des enregistrements qui résultent de la requête de base de données. Pour plus d’informations sur les membres de données recordset, consultez Recordset : Architecture (ODBC) .

Les rubriques suivantes décrivent en détail l’utilisation des objets recordset. Les rubriques sont listées dans des catégories fonctionnelles et dans un ordre naturel de navigation pour permettre une lecture séquentielle.

Rubriques sur les mécanismes d’ouverture, de lecture et de fermeture des recordsets

Rubriques sur les mécanismes de modification des recordsets

Rubriques sur les techniques un peu plus avancées

Rubriques sur le fonctionnement des recordsets

Voir aussi

ODBC (Open Database Connectivity)
Consommation ODBC MFC
Transaction (ODBC)