Partager via


Feuille de réponse dynamique

Cette rubrique décrit les feuilles de dialogue et traite de leur disponibilité.

Remarque

Cette rubrique s’applique aux classes ODBC MFC, notamment CRecordset. Pour plus d’informations sur les feuilles de réponse dynamique dans les classes DAO, consultez CDaoRecordset. Avec DAO, vous pouvez ouvrir des jeux d’enregistrements de type dynaset.

Une feuille de réponse dynamique est un jeu d’enregistrements avec des propriétés dynamiques. Pendant sa durée de vie, un objet recordset en mode feuille de réponse dynamique (généralement appelé dynaset) reste synchronisé avec la source de données de la manière suivante. Dans un environnement multiutilisateur, d’autres utilisateurs peuvent modifier ou supprimer des enregistrements qui se trouvent dans votre feuille de réponse dynamique ou ajouter des enregistrements à la table que représente votre feuille de réponse dynamique. Les enregistrements que votre application ajoute ou supprime du jeu d’enregistrements sont reflétées dans votre feuille de réponse dynamique. Les enregistrements que d’autres utilisateurs ajoutent à la table ne seront pas reflétés dans votre feuille de réponse dynamique tant que vous ne regénérez pas le dynaset en appelant sa Requery fonction membre. Lorsque d’autres utilisateurs suppriment des enregistrements, le code MFC ignore les suppressions dans votre jeu d’enregistrements. Les modifications apportées aux enregistrements existants par d’autres utilisateurs sont reflétées dans votre feuille de réponse dynamique dès que vous faites défiler l’enregistrement concerné.

De même, les modifications que vous apportez aux enregistrements d’un feuille de réponse dynamique sont reflétées dans les feuilles dynamiques utilisées par d’autres utilisateurs. Les enregistrements que vous ajoutez ne sont pas reflétés dans les feuilles de réponse dynamiques d’autres utilisateurs tant qu’ils n’ont pas retourné leurs feuilles de réponse dynamiques. Les enregistrements que vous supprimez sont marqués comme « supprimés » dans les jeux d’enregistrements d’autres utilisateurs. Si vous avez plusieurs connexions à la même base de données (plusieurs CDatabase objets), les recordsets associés à ces connexions ont le même état que les recordsets d’autres utilisateurs.

Les feuilles de réponse dynamiques sont les plus précieuses lorsque les données doivent être dynamiques, comme (par exemple) dans un système de réservation de compagnies aériennes.

Remarque

Pour utiliser des feuilles de réponse dynamiques, vous devez disposer d’un pilote ODBC pour votre source de données qui prend en charge les dynasets et la bibliothèque de curseurs ODBC ne doit pas être chargée. Pour plus d’informations, consultez Disponibilité des dynasets.

Pour spécifier qu’un jeu d’enregistrements est une feuille de réponse dynamique, passez CRecordset::dynaset en tant que premier paramètre à la Open fonction membre de votre objet recordset.

Remarque

Pour les feuilles de réponse dynamiques pouvant être mises à jour, votre pilote ODBC doit prendre en charge les instructions de mise à jour positionnées ou la ::SQLSetPos fonction API ODBC. Si les deux sont pris en charge, MFC utilise ::SQLSetPos pour l’efficacité.

Disponibilité de Dynasets

Les classes de base de données MFC prennent en charge les feuilles de réponse dynamiques si les exigences suivantes sont remplies :

  • La DLL de bibliothèque de curseurs ODBC ne doit pas être utilisée pour cette source de données.

    Si la bibliothèque de curseurs est utilisée, elle masque certaines fonctionnalités du pilote ODBC sous-jacent nécessaire à la prise en charge de la feuille de réponse dynamique. Si vous souhaitez utiliser des feuilles de réponse dynamiques (et que votre pilote ODBC dispose des fonctionnalités requises pour les feuilles de réponse dynamiques, comme décrit dans le reste de cette section), vous pouvez empêcher MFC de charger la bibliothèque de curseurs lorsque vous créez un CDatabase objet. Pour plus d’informations, consultez ODBC et la fonction Membre OpenEx ou Open de la classe CDatabase .

    Dans la terminologie ODBC, les feuilles de réponse dynamique et les instantané sont appelées curseurs. Un curseur est un mécanisme utilisé pour suivre sa position dans un jeu d’enregistrements.

  • Le pilote ODBC de votre source de données doit prendre en charge les curseurs pilotés par l’ensemble de clés.

    Les curseurs pilotés par l’ensemble de clés gèrent les données d’une table en obtenant et en stockant un ensemble de clés. Les clés sont utilisées pour obtenir les données actuelles de la table lorsque l’utilisateur fait défiler vers un enregistrement particulier. Pour déterminer si votre pilote fournit cette prise en charge, appelez la ::SQLGetInfo fonction API ODBC avec le paramètre SQL_SCROLL_OPTIONS .

    Si vous essayez d’ouvrir une feuille de réponse dynamique sans prise en charge du jeu de clés, vous obtenez une CDBException valeur de code de retour AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.

  • Le pilote ODBC de votre source de données doit prendre en charge la récupération étendue.

    La récupération étendue est la possibilité de faire défiler vers l’arrière et de transférer les enregistrements résultants de votre requête SQL. Pour déterminer si votre pilote prend en charge cette capacité, appelez la ::SQLGetFunctions fonction API ODBC avec le paramètre SQL_API_SQLEXTENDEDFETCH .

Si vous souhaitez mettre à jour des feuilles dynamiques pouvant être mises à jour (ou des instantané, par exemple), votre pilote ODBC doit également prendre en charge la ::SQLSetPos fonction API ODBC ou les mises à jour positionnées. La ::SQLSetPos fonction permet à MFC de mettre à jour la source de données sans envoyer d’instructions SQL. Si cette prise en charge est disponible, MFC l’utilise en préférence pour effectuer des mises à jour à l’aide de SQL. Pour déterminer si votre pilote prend en charge ::SQLSetPos, appelez ::SQLGetInfo avec le paramètre SQL_POS_OPERATIONS .

Les mises à jour positionnées utilisent la syntaxe SQL (sous la forme WHERE CURRENT OF<cursorname>) pour identifier une ligne particulière dans la table sur la source de données. Pour déterminer si votre pilote prend en charge les mises à jour positionnées, appelez ::SQLGetInfo avec le paramètre SQL_POSITIONED_STATEMENTS .

En règle générale, les feuilles de réponse dynamique MFC (mais pas les jeux d’enregistrements en avant uniquement) nécessitent un pilote ODBC avec une conformité d’API de niveau 2. Si le pilote de votre source de données est conforme à l’ensemble d’API de niveau 1, vous pouvez toujours utiliser des jeux d’enregistrements instantané mis à jour et en lecture seule et en lecture seule et des jeux d’enregistrements en avant uniquement, mais pas des jeux d’enregistrements dynamiques. Toutefois, un pilote de niveau 1 peut prendre en charge les dynasets s’il prend en charge les curseurs étendus de récupération et de jeu de clés. Pour plus d’informations sur les niveaux de conformité ODBC, consultez ODBC.

Remarque

Si vous souhaitez utiliser les instantané et les feuilles dynamiques, vous devez les baser sur deux objets différents (deux connexions différentesCDatabase).

Contrairement aux instantané, qui utilisent le stockage intermédiaire géré par la bibliothèque de curseurs ODBC, les feuilles de réponse dynamique récupèrent un enregistrement directement à partir de la source de données dès que vous faites défiler vers celui-ci. Cela conserve les enregistrements initialement sélectionnés par la feuille de réponse dynamique synchronisée avec la source de données.

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.

Voir aussi

ODBC (Open Database Connectivity)