Recordset : création et fermeture de recordsets (ODBC)

Remarque

L’Assistant Consommateur ODBC MFC n’est pas disponible dans Visual Studio 2019 et ultérieur. Vous pouvez toujours créer un consommateur manuellement.

Cette rubrique s’applique aux classes ODBC MFC.

Pour utiliser un recordset, construisez un objet recordset et appelez sa fonction membre Open pour exécuter la requête du recordset et sélectionner des enregistrements. Quand vous n’avez plus besoin du recordset, fermez et détruisez l’objet.

Cette rubrique explique :

Création d’recordsets au moment de l’exécution

Pour pouvoir créer des objets recordset dans votre programme, vous écrivez généralement des classes recordset propres à l’application. Pour plus d’informations sur cette étape préliminaire, consultez Ajout d’un consommateur ODBC MFC.

Ouvrez un objet de feuille de réponse dynamique ou d’instantané quand vous avez besoin de sélectionner des enregistrements d’une source de données. Le type d’objet à créer dépend de ce que vous devez faire avec les données de votre application et de ce que votre pilote ODBC prend en charge. Pour plus d’informations, consultez Feuille de réponse dynamique et Instantané.

Pour ouvrir un recordset

  1. Construisez un objet de votre classe dérivée CRecordset.

    Vous pouvez construire l’objet sur le tas ou sur le frame de pile d’une fonction.

  2. Vous pouvez éventuellement modifier le comportement du recordset par défaut. Pour connaître les options disponibles, consultez Définition des options de recordset.

  3. Appelez la fonction membre Open de l’objet.

Dans le constructeur, passez un pointeur à un objet CDatabase ou passez NULL pour utiliser un objet de base de données temporaire que le framework construit et ouvre en fonction de la chaîne de connexion retournée par la fonction membre GetDefaultConnect. L’objet CDatabase est peut-être déjà connecté à une source de données.

L’appel à Open utilise SQL pour sélectionner des enregistrements de la source de données. Le premier enregistrement sélectionné (le cas échéant) est l’enregistrement actuel. Les valeurs des champs de cet enregistrement sont stockées dans les membres de données de champ de l’objet recordset. Si tous les enregistrements ont été sélectionnés, les fonctions membres IsBOF et IsEOF retournent toutes les deux 0.

Dans votre appel à Open, vous pouvez :

  • Spécifiez si le recordset est une feuille de réponse dynamique ou un instantané. Par défaut, les recordsets s’ouvrent comme des instantanés. Sinon, vous pouvez spécifier un recordset de type avant uniquement, ce qui permet uniquement le défilement avant, un seul enregistrement à la fois.

    Par défaut, un recordset utilise le type par défaut stocké dans le membre de données m_nDefaultType de CRecordset. Les Assistants écrivent du code pour initialiser m_nDefaultType sur le type de recordset que vous choisissez dans l’Assistant. Au lieu d’accepter cette valeur par défaut, vous pouvez la remplacer par un autre type de recordset.

  • Spécifiez une chaîne pour remplacer l’instruction SQL SELECT par défaut construite par le recordset.

  • Spécifiez si le recordset est en lecture seule ou en ajout uniquement. Les recordsets autorisent une mise à jour complète par défaut, mais vous pouvez limiter la mise à jour à l’ajout de nouveaux enregistrements uniquement ou vous pouvez interdire toutes les mises à jour.

L’exemple suivant montre comment ouvrir un objet d’instantané en lecture seule de la classe CStudentSet, une classe propre à l’application :

// Construct the snapshot object
CStudentSet rsStudent( NULL );
// Set options if desired, then open the recordset
if(!rsStudent.Open(CRecordset::snapshot, NULL, CRecordset::readOnly))
    return FALSE;
// Use the snapshot to operate on its records...

Après avoir appelé Open, utilisez les fonctions membres et les membre de données de l’objet pour utiliser les enregistrements. Dans certains cas, vous pouvez réinterroger ou actualiser le recordset pour introduire les changements qui se sont produits au niveau de la source de données. Pour plus d’informations, consultez Recordset : Réexécuter un recordset (ODBC)

Conseil

La chaîne de connexion que vous utilisez pendant le développement peut ne pas être la même que celle dont vos utilisateurs finaux ont besoin. Pour obtenir des idées sur la généralisation de votre application à cet égard, consultez La source de données : Gestion des Connecter ions (ODBC)

Définition des options de jeu d’enregistrements

Après avoir construit votre objet recordset, mais avant d’appeler Open pour sélectionner des enregistrements, vous pouvez définir des options pour contrôler le comportement du recordset. Pour tous les recordsets, vous pouvez :

  • Spécifier un filtre pour contraindre la sélection d’enregistrement.

  • Spécifier un ordre de tri pour les enregistrements.

  • Spécifier des paramètres afin de pouvoir sélectionner des enregistrements à l’aide des informations fournies ou calculées au moment de l’exécution.

Vous pouvez également définir l’option suivante si les conditions sont remplies :

  • Si le recordset est modifiable et prend en charge les options de verrouillage, spécifiez la méthode de verrouillage utilisée pour les mises à jour.

Remarque

Pour affecter la sélection d’enregistrements, vous devez définir ces options avant d’appeler la fonction membre Open.

Fermeture d’un jeu d’enregistrements

Quand vous n’avez plus besoin de votre recordset, vous devez le supprimer et désallouer sa mémoire.

Pour fermer un recordset

  1. Appelez sa fonction membre Close.

  2. Détruisez l’objet recordset.

    Si vous l’avez déclaré sur le frame de pile d’une fonction, l’objet est détruit automatiquement quand il est hors de portée. Sinon, utilisez l’opérateur delete .

Close libère le handle HSTMT du recordset. Il ne détruit pas l’objet C++.

Voir aussi

Recordset (ODBC)
Recordset : défilement (ODBC)
Recordset : ajout, modification et suppression d’enregistrements (ODBC)