Partager via


ODBC : bibliothèque de curseurs ODBC

Cette rubrique décrit la bibliothèque de curseurs ODBC et explique comment l’utiliser. Pour en savoir plus, consultez :

La bibliothèque de curseurs ODBC est une bibliothèque de liens dynamiques (DLL) qui réside entre le Gestionnaire de pilotes ODBC et le pilote. En termes ODBC, un pilote conserve un curseur pour suivre sa position dans le jeu d’enregistrements. Le curseur marque la position dans le jeu d’enregistrements vers lequel vous avez déjà fait défiler l’enregistrement actif.

Bibliothèque de curseurs et pilotes ODBC de niveau 1

La bibliothèque de curseurs ODBC offre aux pilotes de niveau 1 les nouvelles fonctionnalités suivantes :

  • Défilement vers l’avant et l’arrière. Les pilotes de niveau 2 n’ont pas besoin de la bibliothèque de curseurs, car ils sont déjà défilables.

  • Prise en charge des instantané. La bibliothèque de curseurs gère une mémoire tampon contenant les enregistrements du instantané. Cette mémoire tampon reflète les suppressions et les modifications de votre programme dans les enregistrements, mais pas les ajouts, les suppressions ou les modifications d’autres utilisateurs. Par conséquent, le instantané est aussi actif que la mémoire tampon de la bibliothèque de curseurs. La mémoire tampon ne reflète pas non plus vos propres ajouts tant que vous n’avez pas appelé Requery. Les feuilles de réponse dynamique n’utilisent pas la bibliothèque de curseurs.

La bibliothèque de curseurs vous donne des instantané (curseurs statiques) même s’ils ne sont pas pris en charge normalement par votre pilote. Si votre pilote prend déjà en charge les curseurs statiques, vous n’avez pas besoin de charger la bibliothèque de curseurs pour obtenir instantané prise en charge. Si vous utilisez la bibliothèque de curseurs, vous ne pouvez utiliser que des jeux d’enregistrements instantané s et des jeux d’enregistrements en avant uniquement. Si votre pilote prend en charge les feuilles de réponse dynamiques (KEYSET_DRIVEN curseurs) et que vous souhaitez les utiliser, vous ne devez pas utiliser la bibliothèque de curseurs. Si vous souhaitez utiliser à la fois des instantané et des feuilles dynamiques, vous devez les baser sur deux objets différents (deux connexions différentesCDatabase), sauf si votre pilote prend en charge les deux.

Colonnes de Mises à jour et d’horodatage positionnées

Remarque

Les sources de données ODBC sont accessibles via les classes ODBC MFC, comme décrit dans cette rubrique, ou via les classes DAO (Data Access Object) MFC.

Remarque

Si votre pilote ODBC prend en charge SQLSetPos, que MFC utilise si disponible, cette rubrique ne s’applique pas à vous.

La plupart des pilotes de niveau 1 ne prennent pas en charge les mises à jour positionnées. Ces pilotes s’appuient sur la bibliothèque de curseurs pour émuler les fonctionnalités des pilotes de niveau 2 à cet égard. La bibliothèque de curseur émule la prise en charge des mises à jour positionnées en effectuant une mise à jour recherchée sur les champs immuables.

Dans certains cas, un jeu d’enregistrements peut contenir une colonne d’horodatage comme l’un de ces champs immuables. Deux problèmes surviennent lors de l’utilisation des jeux d’enregistrements MFC avec des tables qui contiennent des colonnes d’horodatage.

Le premier problème concerne les instantané pouvant être mis à jour sur les tables avec des colonnes d’horodatage. Si la table à laquelle votre instantané est liée contient une colonne d’horodatage, vous devez appeler Requery après l’appel Edit et Update. Si ce n’est pas le cas, vous ne pourrez peut-être pas modifier à nouveau le même enregistrement. Lorsque vous appelez Edit , puis Update, l’enregistrement est écrit dans la source de données et la colonne timestamp est mise à jour. Si vous n’appelez Requerypas, la valeur d’horodatage de l’enregistrement dans votre instantané ne correspond plus à l’horodatage correspondant sur la source de données. Lorsque vous essayez de mettre à jour à nouveau l’enregistrement, la source de données peut interdire la mise à jour en raison de l’incompatibilité.

Le deuxième problème concerne les limitations de la classe CTime lorsqu’elle est utilisée avec la fonction pour transférer l’heure RFX_Date et les informations de date vers ou à partir d’une table. Le traitement de l’objet CTime impose une surcharge sous la forme d’un traitement intermédiaire supplémentaire pendant le transfert de données. La plage de dates d’objets CTime peut également être trop limitée pour certaines applications. Une nouvelle version de la RFX_Date fonction prend un paramètre de TIMESTAMP_STRUCT ODBC au lieu d’un CTime objet. Pour plus d’informations, consultez RFX_Date Macros et Globals dans la référence MFC.

Utilisation de la bibliothèque de curseurs

Lorsque vous vous connectez à une source de données , en appelant CDatabase ::OpenEx ou CDatabase ::Open , vous pouvez spécifier s’il faut utiliser la bibliothèque de curseurs pour la source de données. Si vous créez des instantané sur cette source de données, spécifiez l’option CDatabase::useCursorLib dans le dwOptions paramètre pour OpenEx ou spécifiez TRUE pour le paramètre Open bUseCursorLib (la valeur par défaut est TRUE). Si votre pilote ODBC prend en charge les dynasets et que vous souhaitez ouvrir des feuilles de réponse dynamiques sur la source de données, n’utilisez pas la bibliothèque de curseurs (il masque certaines fonctionnalités de pilote nécessaires pour les feuilles de réponse dynamique). Dans ce cas, ne spécifiez CDatabase::useCursorLib pas ou OpenEx spécifiez FALSE pour le paramètre bUseCursorLib dans Open.

Voir aussi

Éléments fondamentaux relatifs à ODBC