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
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.
Vous pouvez éventuellement modifier le comportement du recordset par défaut. Pour connaître les options disponibles, consultez Définition des options de recordset.
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
deCRecordset
. Les Assistants écrivent du code pour initialiserm_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 connexions (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
Appelez sa fonction membre Close.
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)