Partager via


Curseurs de jeu de clés

Le curseur de jeu de clés fournit une fonctionnalité entre un curseur statique et un curseur dynamique grâce à sa capacité à détecter les modifications. Comme un curseur statique, il ne détecte pas toujours les modifications apportées à l’appartenance et à l’ordre du jeu de résultats. Comme un curseur dynamique, il détecte les modifications apportées aux valeurs des lignes dans le jeu de résultats.

Les curseurs de jeux de clés sont gérés par un ensemble d’identificateurs uniques (clés) appelé jeu de clés. Les clés sont créées à partir d'un ensemble de colonnes qui identifient uniquement les lignes de l'ensemble de résultats. Le jeu de clés est l’ensemble des valeurs de clés de toutes les lignes retournées par l’instruction de requête.

Avec les curseurs de jeux de clés, une clé est générée et enregistrée pour chaque ligne du curseur et stockée sur la station de travail cliente ou sur le serveur. Quand vous accédez à chaque ligne, la clé stockée est utilisée pour extraire les valeurs de données actuelles de la source de données. Dans un curseur de jeux de clés, l’appartenance au jeu de résultats est figée quand le jeu de clés est plein. Par la suite, les ajouts ou mises à jour affectant l’appartenance ne font partie du jeu de résultats qu’une fois celui-ci rouvert.

Les modifications apportées aux valeurs de données (par le propriétaire du jeu de clés ou par d’autres processus) sont visibles à mesure que l’utilisateur fait défiler le jeu de résultats. Les insertions effectuées en dehors du curseur (par d’autres processus) sont visibles uniquement si le curseur est fermé puis rouvert. Les insertions effectuées à partir de l’intérieur du curseur sont visibles à la fin du jeu de résultats.

Lorsqu’un curseur de jeu de clés tente de récupérer une ligne qui a été supprimée, la ligne apparaît sous la forme d’un « trou » dans le jeu de résultats. La clé pour la ligne existe dans le jeu de clés, mais la ligne n’existe plus dans le jeu de résultats. Si les valeurs de clés d’une ligne sont mises à jour, la ligne est considérée comme supprimée, puis insérée, de sorte que ces lignes apparaissent également sous forme de trous dans le jeu de résultats. Alors qu’un curseur de jeu de clés peut toujours détecter les lignes supprimées par d’autres processus, il peut éventuellement supprimer les clés des lignes qu’il supprime lui-même. Les curseurs de jeu de clés qui le font ne peuvent pas détecter leurs propres suppressions, car la preuve a été supprimée.

La mise à jour d'une colonne clé équivaut à la suppression d'une ancienne valeur de clé, suivie de l'insertion d'une nouvelle valeur de clé. La nouvelle valeur de clé n’est pas visible si la mise à jour n’a pas été effectuée via le curseur. Si la mise à jour a été effectuée via le curseur, la nouvelle valeur de clé est visible à la fin du jeu de résultats.

Il existe une variante des curseurs de jeu de clés, appelée curseurs standard de jeu de clés. Dans un curseur standard de jeu de clés, l’appartenance des lignes dans le jeu de résultats et l’ordre des lignes sont fixés au moment de l’ouverture du curseur, mais les modifications apportées aux valeurs effectuées par le propriétaire du curseur et les modifications validées apportées par d’autres processus sont visibles. Si une modification disqualifie une ligne pour l’appartenance ou affecte l’ordre d’une ligne, la ligne ne disparaît pas ou ne se déplace pas, sauf si le curseur est fermé et rouvert. Les données insérées ne s’affichent pas, mais les modifications apportées aux données existantes apparaissent lorsque les lignes sont extraites.

Le curseur de jeu de clés est difficile à utiliser correctement, car la sensibilité aux modifications de données dépend de nombreuses circonstances différentes, comme décrit ci-dessus. Toutefois, si votre application n’est pas concernée par les mises à jour simultanées, peut gérer des clés incorrectes par programmation et doit accéder directement à certaines lignes à clés, le curseur de jeu de clés peut vous être utile. Utilisez adOpenKeyset CursorTypeEnum pour indiquer que vous souhaitez utiliser un curseur de jeu de clés dans ADO.

Voir aussi

Curseurs avant uniquement
Curseurs statiques
Curseurs dynamiques