Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No ODBC 2.x, o apontador para o array de estado da linha era um argumento para SQLExtendedFetch. O array de estado de linhas foi posteriormente atualizado através de uma chamada ao SQLSetPos. Alguns drivers basearam-se no facto de este array não mudar entre SQLExtendedFetch e SQLSetPos. No ODBC 3.x, o ponteiro para o array de estado é um campo descritor e, por isso, a aplicação pode facilmente alterá-lo para apontar para um array diferente. Isto pode ser um problema quando uma aplicação ODBC 3.x está a trabalhar com um driver ODBC 2.x mas está a chamar SQLSetStmtAttr para definir o ponteiro de estado do array e está a chamar SQLFetchScroll para obter dados. O Gestor de Drivers mapeia-o como uma sequência de chamadas para SQLExtendedFetch. No código seguinte, normalmente surgiria um erro quando o Gestor de Drivers mapeia a segunda chamada SQLSetStmtAttr ao trabalhar com um driver ODBC 2.x :
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_STATUS_PTR, rgfRowStatus, 0);
SQLFetchScroll(hstmt, fFetchType, iRow);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_STATUS_PTR, rgfRowStat1, 0);
SQLSetPos(hstmt, iRow, fOption, fLock);
O erro surgiria se não houvesse forma de alterar o ponteiro de estado da linha no ODBC 2.x entre chamadas para SQLExtendedFetch. Em vez disso, o Gestor de Drivers executa os seguintes passos ao trabalhar com um driver ODBC 2.x :
Inicializa uma flag interna do Driver Manager, fSetPosError, para TRUE.
Quando uma aplicação chama SQLFetchScroll, o Gestor de Drivers define fSetPosError como FALSE.
Quando a aplicação chama SQLSetStmtAttr para definir SQL_ATTR_ROW_STATUS_PTR, o Gestor de Drivers define fSetPosError igual a TRUE.
Quando a aplicação chama SQLSetPos, com fSetPosError igual a TRUE, o Gestor de Drivers levanta SQL_ERROR com SQLSTATE HY011 (Atributo não pode ser definido agora) para indicar que a aplicação tentou chamar SQLSetPos após alterar o ponteiro de estado da linha mas antes de chamar SQLFetchScroll.