Compartilhar via


Como usar cursores (ODBC)

Para usar cursores

  1. Chame SQLSetStmtAttr para definir os atributos de cursor desejados:

    Defina os atributos SQL_ATTR_CURSOR_TYPE e SQL_ATTR_CONCURRENCY (esta é a opção preferencial).

    Ou

    Defina os atributos SQL_CURSOR_SCROLLABLE e SQL_CURSOR_SENSITIVITY.

  2. Chame SQLSetStmtAttr para definir o tamanho do conjunto de linhas usando o atributo SQL_ATTR_ROW_ARRAY_SIZE.

  3. Outra opção é chamar para definir um nome de cursor se as atualizações posicionadas forem feitas usando a cláusula WHERE CURRENT OF.

  4. Execute a instrução SQL.

  5. Outra opção é chamar SQLGetCursorName para definir o nome de cursor se as atualizações posicionadas forem feitas usando a cláusula WHERE CURRENT OF e um nome de cursor não foi fornecido com SQLSetCursorName na Etapa 3.

  6. Chame SQLNumResultCols para obter o número de colunas (C) no conjunto de linhas.

    Use a associação por coluna.

    - ou -

    Use a associação por linha.

  7. Busque conjuntos de linhas do cursor conforme desejado.

  8. Chame SQLMoreResults para determinar se outro conjunto de resultados está disponível.

    • Se SQL_SUCCESS for retornado, outro conjunto de resultados estará disponível.

    • Se SQL_NO_DATA for retornado, nenhum outro conjunto de resultados estará disponível.

    • Se SQL_SUCCESS_WITH_INFO ou SQL_ERROR for retornado, chame SQLGetDiagRec para determinar se a saída de uma instrução PRINT ou RAISERROR estará disponível.

    Se parâmetros de instrução associados forem usados para parâmetros de saída ou o valor retornado de um procedimento armazenado, use os dados disponíveis agora nos buffers de parâmetro associados.

    Quando são usados parâmetros associados, cada chamada para SQLExecute ou SQLExecDirect terá executado a instrução SQL por S vezes, onde S é o número de elementos na matriz de parâmetros associados. Isso significa que haverá S conjuntos de resultados a ser processados, onde cada conjunto consiste em todos os conjuntos de resultados, parâmetros de saída e códigos de retorno normalmente retornados por uma única execução da instrução SQL.

    Observe que, quando um conjunto de resultados contém linhas computadas, cada linha computada é disponibilizada como um conjunto de resultados separado. Esses conjuntos de resultados computados são intercalados nas linhas normais e dividem as linhas normais em vários conjuntos de resultados.

  9. Outra opção é chamar SQLFreeStmt com SQL_UNBIND para liberar qualquer buffer de coluna associado.

  10. Se outro conjunto de resultados estiver disponível, vá para a Etapa 6.

    Na Etapa 9, chamar SQLMoreResults em um conjunto de resultados parcialmente processado limpa o restante do conjunto de resultados. Outra maneira de limpar um conjunto de resultados parcialmente processado é chamar SQLCloseCursor.

    Você pode controlar o tipo de cursor usado definindo SQL_ATTR_CURSOR_TYPE e SQL_ATTR_CONCURRENCY ou definindo SQL_ATTR_CURSOR_SENSITIVITY e SQL_ATTR_CURSOR_SCROLLABLE. Você não deve misturar os dois métodos de especificação de comportamento de cursor.