Compartilhar via


Cursores de conjunto de chaves

O cursor de conjunto de chaves fornece funcionalidade entre um cursor estático e dinâmico em sua capacidade de detectar alterações. Como um cursor estático, ele nem sempre detecta alterações na associação e na ordem do conjunto de resultados. Como um cursor dinâmico, ele detecta alterações nos valores das linhas no conjunto de resultados.

Os cursores controlados por conjunto de chaves são controlados por um conjunto de identificadores exclusivos (chaves) conhecidos 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 no cursor e armazenada na estação de trabalho do cliente ou no servidor. Quando você acessa cada linha, a chave armazenada é usada para buscar os valores de dados atuais 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 é totalmente preenchido. Depois disso, qualquer adição ou atualização que afete a filiação não fará parte do conjunto de resultados até que o mesmo seja reaberto.

As alterações nos valores de dados (feitas pelo proprietário do conjunto de chaves ou outros processos) são visíveis à medida que o usuário rola pelo conjunto de resultados. As inserções feitas fora do cursor (por outros processos) só serão visíveis se o cursor estiver fechado e reaberto. As inserções feitas de dentro do cursor ficam 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 da 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 como tendo sido excluída e então inserida novamente, portanto, essas linhas também aparecerão como lacunas 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. Os cursores controlados por conjunto de chaves que realizam isso não conseguem detectar suas próprias deleções porque as evidências foram removidas.

Uma atualização para uma coluna de chave funciona como uma exclusão da chave antiga seguida por uma inserção da nova chave. O novo valor de chave não estará 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 de chave ficará visível no final do conjunto de resultados.

Há uma variação em 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 inclusão das linhas no conjunto de resultados e a ordem das linhas são fixadas no momento em que o cursor é aberto, mas as alterações nos valores feitas pelo proprietário do cursor e as alterações confirmadas por outros processos são visíveis. Se uma alteração desclassificar uma linha para associação ou afetar a ordem de uma linha, a linha não desaparecerá ou se moverá, a menos que o cursor seja 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 seu aplicativo não estiver preocupado com atualizações simultâneas, puder lidar programaticamente com chaves incorretas e precisar acessar diretamente determinadas linhas identificadas por chave, o cursor baseado em conjunto de chaves pode funcionar para você. Use o CursorTypeEnum adOpenKeyset para indicar que você deseja usar um cursor de conjunto de chaves no ADO.

Consulte Também

cursores Forward-Only
Cursores Estáticos
cursores dinâmicos