Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W ODBC 2.x wskaźnik do tablicy stanu wiersza był argumentem SQLExtendedFetch. Tablica stanu wiersza została później zaktualizowana przez wywołanie funkcji SQLSetPos. Niektóre sterowniki polegały na tym, że ta tablica nie zmienia się między SQLExtendedFetch a SQLSetPos. W systemie ODBC 3.x wskaźnik do tablicy stanu jest polem deskryptora, dlatego aplikacja może łatwo zmienić ją tak, aby wskazywała inną tablicę. Może to być problem, gdy aplikacja ODBC 3.x współpracuje ze sterownikiem ODBC 2.x , ale wywołuje narzędzie SQLSetStmtAttr w celu ustawienia wskaźnika stanu tablicy i wywołuje funkcję SQLFetchScroll w celu pobrania danych. Menedżer sterowników mapuje go jako sekwencję wywołań do SQLExtendedFetch. W poniższym kodzie, normalnie zostałby zgłoszony błąd, gdy menedżer sterowników mapuje drugie wywołanie SQLSetStmtAttr podczas pracy ze sterownikiem 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);
Błąd zostanie zgłoszony, jeśli nie było możliwości zmiany wskaźnika stanu wiersza w odBC 2.x między wywołaniami sqlExtendedFetch. Zamiast tego Menedżer sterowników wykonuje następujące kroki podczas pracy ze sterownikiem ODBC 2.x :
Ustawia wewnętrzną flagę menedżera sterowników fSetPosError na TRUE.
Gdy aplikacja wywołuje funkcję SQLFetchScroll, menedżer sterowników ustawia wartość fSetPosError na FALSE.
Gdy aplikacja wywołuje metodę SQLSetStmtAttr w celu ustawienia SQL_ATTR_ROW_STATUS_PTR, menedżer sterowników ustawia wartość fSetPosError równąTRUE.
Gdy aplikacja wywołuje funkcję SQLSetPos z wartością fSetPosError równą TRUE, Menedżer sterowników zgłasza SQL_ERROR z parametrem SQLSTATE HY011 (atrybut nie można ustawić teraz), aby wskazać, że aplikacja próbowała wywołać kontrolkę SQLSetPos po zmianie wskaźnika stanu wiersza, ale przed wywołaniem elementu SQLFetchScroll.