Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Esse recurso será removido em uma versão futura do Windows. Evite usar esse recurso em um novo trabalho de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. A Microsoft recomenda usar a funcionalidade de cursor do driver.
Para suportar instruções posicionadas de atualização e exclusão, a biblioteca de cursores constrói uma instrução searched UPDATEDELETE or a partir da instrução posicionada. Para suportar chamadas ao SQLGetData em um bloco de dados, a biblioteca de cursores constrói uma instrução SELECT pesquisada para criar um conjunto de resultados contendo a linha atual de dados. Em cada uma dessas sentenças, a cláusula WHERE enumera os valores armazenados no cache para cada coluna limitada que retorna SQL_PRED_SEARCHABLE ou SQL_PRED_BASIC para o identificador de campo SQL_DESC_SEARCHABLE em SQLColAttribute.
Caution
A cláusula WHERE construída pela biblioteca de cursores para identificar a linha atual pode falhar em identificar nenhuma linha, identificar uma linha diferente ou identificar mais de uma linha.
Se uma instrução de atualização ou exclusão posicionada afeta mais de uma linha, a biblioteca de cursores atualiza o array de status de linha apenas para a linha na qual o cursor está posicionado e retorna SQL_SUCCESS_WITH_INFO e SQLSTATE 01001 (conflito de operação de cursor). Se a instrução não identificar nenhuma linha, a biblioteca de cursores não atualiza o array de status de linhas e retorna SQL_SUCCESS_WITH_INFO e SQLSTATE 01001 (conflito de operação de cursor). Uma aplicação pode chamar o SQLRowCount para determinar o número de linhas que foram atualizadas ou excluídas.
Se a cláusula SELECT usada para posicionar o cursor de uma chamada ao SQLGetData identificar mais de uma linha, o SQLGetData não garante que retorne os dados corretos. Se não identificar nenhuma linha, SQLGetData retorna SQL_NO_DATA.
Se uma aplicação estiver em conformidade com as seguintes diretrizes, a cláusula WHERE construída pela biblioteca de cursores deve identificar unicamente a linha atual, exceto quando isso é impossível, como quando a fonte de dados contém linhas duplicadas.
Associe colunas que identifiquem a linha de forma única. Se as colunas limitadas não identificarem unicamente a linha, a cláusula WHERE construída pela biblioteca de cursores pode identificar mais de uma linha. Em uma instrução posicionada de atualização ou deleção, tal cláusula pode fazer com que mais de uma linha seja atualizada ou excluída. Em uma chamada para SQLGetData, tal cláusula pode fazer com que o driver retorne dados para a linha errada. Vincular todas as colunas de uma chave única garante que cada linha seja identificada de forma única.
Aloque buffers de dados grandes o suficiente para que nenhuma truncação ocorra. O cache da biblioteca de cursores é uma cópia dos valores nos buffers de rowset vinculados ao conjunto de resultados com SQLBindCol. Se os dados forem truncados ao serem colocados nesses buffers, eles também serão truncados no cache. Uma cláusula WHERE construída a partir de valores truncados pode não identificar corretamente a linha subjacente na fonte de dados.
Especifique buffers de comprimento não nulo para dados binários em C. A biblioteca de cursores aloca buffers de comprimento em seu cache apenas se o argumento StrLen_or_IndPtr no SQLBindCol for não nulo. Quando o argumento TargetType é SQL_C_BINARY, a biblioteca de cursores requer o comprimento dos dados binários para construir uma cláusula WHERE a partir dos dados. Se não houver buffer de comprimento para uma coluna SQL_C_BINARY e a aplicação chamar SQLGetData ou tentar executar uma atualização ou exclusão posicionada, a biblioteca de cursores retorna SQL_ERROR e SQLSTATE SL014 (uma solicitação posicionada foi emitida e nem todos os campos de contagem de colunas foram armazenados em buffer).
Especifique buffers de comprimento não nulo para colunas anuláveis. A biblioteca de cursores aloca buffers de comprimento em seu cache apenas se o argumento StrLen_or_IndPtr no SQLBindCol for não nulo. Como SQL_NULL_DATA é armazenado no buffer de comprimento, a biblioteca de cursores assume que qualquer coluna para a qual nenhum buffer de comprimento seja especificado não é anulável. Se nenhuma coluna de comprimento for especificada para uma coluna anulável, a biblioteca de cursores constrói uma cláusula WHERE que usa o valor de dados da coluna. Essa cláusula não identificará corretamente a linha.