Partilhar via


Executar instruções de exclusão e atualização posicionadas

Importante

Esse recurso será removido em uma versão futura do Windows. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. A Microsoft recomenda usar a funcionalidade de cursor do driver.

Depois que um aplicativo busca um bloco de dados com SQLFetchScroll, ele pode atualizar ou excluir os dados no bloco. Para executar uma atualização ou exclusão posicionada, o aplicativo:

  1. Chama SQLSetPos para posicionar o cursor na linha a ser atualizada ou excluída.

  2. Constrói uma instrução de atualização ou exclusão posicionada com a seguinte sintaxe:

    UPDATE table-name

    SET column-identifier = {expression | NULL}

    [, identificador = de coluna {expressão | NULL}]

    WHERE CURRENT OF cursor-name

    DELETE FROM table-name WHERE CURRENT OF cursor-name

    A maneira mais fácil de construir a cláusula SET em uma instrução de atualização posicionada é usar marcadores de parâmetro para cada coluna a ser atualizada e usar SQLBindParameter para associá-los aos buffers de conjunto de linhas da linha a ser atualizada. Nesse caso, o tipo de dados C do parâmetro será o mesmo que o tipo de dados C do buffer do conjunto de linhas.

  3. Atualiza os buffers do conjunto de linhas para a linha atual se ele executar uma instrução de atualização posicionada. Depois de executar com êxito uma instrução de atualização posicionada, a biblioteca de cursores copia os valores de cada coluna na linha atual para seu cache.

    Cuidado

    Se o aplicativo não atualizar corretamente os buffers do conjunto de linhas antes de executar uma instrução de atualização posicionada, os dados no cache ficarão incorretos depois que a instrução for executada.

  4. Executa a instrução de atualização ou exclusão posicionada usando uma instrução diferente da instrução associada ao cursor.

    Cuidado

    A cláusula WHERE construída pela biblioteca de cursores para identificar a linha atual pode falhar ao identificar linhas, identificar uma linha diferente ou identificar mais de uma linha. Para obter mais informações, consulte Construindo instruções pesquisadas.

Todas as instruções de atualização e exclusão posicionadas exigem um nome de cursor. Para especificar o nome do cursor, um aplicativo chama SQLSetCursorName antes que o cursor seja aberto. Para usar o nome do cursor gerado pelo driver, um aplicativo chama SQLGetCursorName depois que o cursor é aberto.

Depois que a biblioteca de cursores executa uma instrução de atualização ou exclusão posicionada, a matriz de status, os buffers de conjunto de linhas e o cache mantidos pela biblioteca de indicadores contêm os valores mostrados na tabela a seguir.

Declaração usada Valor na matriz de status da linha Valores em

buffers de conjunto de linhas
Valores em

buffers de cache
Atualização posicionada SQL_ROW_UPDATED Novos valores[1] Novos valores[1]
Exclusão posicionada SQL_ROW_DELETED Valores antigos Valores antigos

[1] O aplicativo deve atualizar os valores nos buffers do conjunto de linhas antes de executar a instrução de atualização posicionada; Depois de executar a instrução de atualização posicionada, a biblioteca de cursores copia os valores nos buffers do conjunto de linhas para seu cache.