Cursores do conjunto de chaves
O cursor de conjunto de chaves fornece funcionalidades entre um cursor dinâmico e um cursor estático em sua capacidade de detectar alterações. Como um cursor estático, ele nem sempre detecta alterações à associação e à ordem do conjunto de resultados. Como um cursor dinâmico, ele detecta alterações aos valores de linhas no conjunto de resultados.
Os cursores controlados por conjuntos de chaves são controlados por um conjunto exclusivo de identificadores (chaves) conhecido como conjunto de chaves. As chaves são criadas a partir de um conjunto de colunas, que identificam exclusivamente as linhas no conjunto de resultados. O conjunto de chaves é o conjunto de valores de chave de todas as linhas retornadas pela instrução de consulta.
Com cursores controlados por conjunto de chaves, uma chave é criada e salva para cada linha do cursor e armazenada na estação de trabalho cliente ou no servidor. Quando você acessa cada linha, a chave armazenada é usada para buscar os valores de dados atual da fonte de dados. Em um cursor controlado por conjunto de chaves, a associação do conjunto de resultados é congelada quando o conjunto de chaves está completamente preenchido. Depois disso, adições ou atualizações que afetem a associação não farão parte do resultado definido até que ele seja reaberto.
Alterações nos valores de dados (feitas por outros processos ou pelo proprietário do conjunto de chaves) são visíveis conforme o usuário rola pelo conjunto de resultados. Inserções feitas fora do cursor (por outros processos) serão visíveis apenas se o cursor for fechado e reaberto. Inserções feitas de dentro do cursor são visíveis no final do conjunto de resultados.
Quando um cursor controlado por conjunto de chaves tenta recuperar uma linha que foi excluída, a linha aparece como um "buraco" no conjunto de resultados. A chave para a linha existe no conjunto de chaves, mas a linha não existe mais no conjunto de resultados. Se os valores de chave em uma linha forem atualizados, a linha será considerada excluída e inserida, ou seja, essas linhas também aparecerão como buracos no conjunto de resultados. Embora um cursor controlado por conjunto de chaves sempre possa detectar linhas excluídas por outros processos, ele pode, opcionalmente, remover as chaves das linhas que ele próprio exclui. Cursores controlados por conjunto de chaves que fazem isso não podem detectar suas próprias exclusões porque as evidências foram removidas.
Uma atualização em uma coluna de chave funciona como uma exclusão da chave antiga, seguida de uma inserção da chave nova. O novo valor de chave não ficará visível se a atualização não tiver sido feita por meio do cursor. Se a atualização foi feita por meio do cursor, o novo valor da chave ficará visível no final do conjunto de resultados.
Há uma variação de cursores controlados por conjunto de chaves chamados cursores padrão controlados por conjunto de chaves. Em um cursor padrão controlado por conjunto de chaves, a associação de linhas no conjunto de resultados e a ordem das linhas são fixadas no tempo de abertura do cursor, mas as alterações nos valores que são feitas pelo proprietário do cursor e as alterações confirmadas feitas por outros processos ficam visíveis. Se uma alteração desclassificar a associação de uma linha ou afetar a ordem de uma linha, a linha não desaparecerá ou se moverá enquanto o cursor não for fechado e reaberto. Os dados inseridos não aparecem, mas as alterações nos dados existentes aparecem à medida que as linhas são buscadas.
O cursor controlado por conjunto de chaves é difícil de usar corretamente porque a sensibilidade às alterações de dados depende de muitas circunstâncias diferentes, conforme descrito acima. No entanto, se o aplicativo não estiver preocupado com atualizações simultâneas, puder lidar programaticamente com chaves incorretas e acessar diretamente determinadas linhas chaveadas, o cursor controlado por conjunto de chaves poderá funcionar para você. Use o adOpenKeyset CursorTypeEnum para indicar que você deseja usar um conjunto de chaves estático no ADO.
Consulte Também
Cursores de somente avanço
Cursores estáticos
Cursores dinâmicos