ODBC : bibliothèque de curseurs ODBC
Cette rubrique décrit la bibliothèque de curseurs ODBC et explique comment l’utiliser. Pour plus d’informations, consultez l’article suivant :
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és. La bibliothèque de curseurs gère une mémoire tampon contenant les enregistrements de l’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, l’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és (curseurs statiques) même s’ils ne sont pas normalement pris en charge 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 la prise en charge des instantanés. Si vous utilisez la bibliothèque de curseurs, vous pouvez utiliser uniquement des 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és et des feuilles dynamiques, vous devez les baser sur deux objets différents (deux connexions différentes CDatabase
), sauf si votre pilote prend en charge les deux.
Mises à jour positionnées et colonnes d’horodatage
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és pouvant être mis à jour sur les tables avec des colonnes d’horodatage. Si la table à laquelle votre instantané est lié 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 Requery
pas, 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és 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 bUseCursorLib ( Open
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
.