Cursores de conjunto de claves
El cursor del conjunto de claves proporciona funcionalidad intermedia entre un cursor estático y dinámico al detectar cambios. Al igual que un cursor estático, no siempre detecta cambios en la pertenencia y el orden del conjunto de resultados. Al igual que un cursor dinámico, detecta cambios en los valores de las filas del conjunto de resultados.
Los cursores controlados por conjuntos de claves se controlan mediante un conjunto de identificadores únicos (claves) conocidos como conjunto de claves. Las claves se crean a partir de un conjunto de columnas que identifican de forma única las filas del conjunto de resultados. El conjunto de claves es el conjunto de valores de clave de todas las filas devueltas por la instrucción de consulta.
Con cursores controlados por conjuntos de claves, se crea y guarda una clave para cada fila del cursor y se almacena en la estación de trabajo cliente o en el servidor. Al acceder a cada fila, la clave almacenada se usa para capturar los valores de datos actuales del origen de datos. En un cursor controlado por conjuntos de claves, la pertenencia al conjunto de resultados se congela cuando el conjunto de claves está completamente lleno. Después, las adiciones o actualizaciones que afectan a la membresía no forman parte del conjunto de resultados hasta que se vuelva a abrir.
Los cambios en los valores de datos (realizados por el propietario del conjunto de claves u otros procesos) son visibles a medida que el usuario se desplaza por el conjunto de resultados. Las inserciones realizadas fuera del cursor (por otros procesos) solo son visibles si el cursor está cerrado y vuelto a abrir. Las inserciones realizadas desde dentro del cursor están visibles al final del conjunto de resultados.
Cuando un cursor controlado por conjuntos de claves intenta recuperar una fila que se ha eliminado, la fila aparece como un "agujero" en el conjunto de resultados. La clave de la fila existe en el conjunto de claves, pero la fila ya no existe en el conjunto de resultados. Si se actualizan los valores de clave de una fila, la fila se considera que se ha eliminado y, a continuación, se inserta, por lo que estas filas también aparecen como agujeros en el conjunto de resultados. Aunque un cursor controlado por conjuntos de claves siempre puede detectar filas eliminadas por otros procesos, puede quitar opcionalmente las claves de las filas que elimina. Los cursores controlados por conjuntos de claves que hacen esto no pueden detectar sus propias eliminaciones porque se ha quitado la evidencia.
Una actualización de una columna de clave funciona como una eliminación de la clave anterior seguida de una inserción de la nueva clave. El nuevo valor de clave no está visible si la actualización no se realizó a través del cursor. Si la actualización se realizó a través del cursor, el nuevo valor de clave es visible al final del conjunto de resultados.
Hay una variación en los cursores controlados por conjuntos de claves denominados cursores estándar controlados por conjuntos de claves. En un cursor estándar controlado por conjuntos de claves, la pertenencia de filas en el conjunto de resultados y el orden de las filas se fijan en el tiempo de apertura del cursor, pero los cambios realizados por el propietario del cursor y los cambios confirmados realizados por otros procesos son visibles. Si un cambio descalifica una fila para la pertenencia o afecta al orden de una fila, la fila no desaparece ni se mueve a menos que se cierre y vuelva a abrir el cursor. Los datos insertados no aparecen, pero los cambios en los datos existentes aparecen a medida que se capturan las filas.
El cursor controlado por conjuntos de claves es difícil de usar correctamente porque la sensibilidad a los cambios de datos depende de muchas circunstancias diferentes, como se ha descrito anteriormente. Sin embargo, si su aplicación no se ve afectada por las actualizaciones simultáneas, puede controlar mediante programación las claves incorrectas y debe acceder directamente a filas con claves específicas, el cursor controlado por conjuntos de claves podría ser adecuado para usted. Utilice el adOpenKeyset CursorTypeEnum para indicar que desea usar un cursor de conjunto de claves en el ADO.