Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V rozhraní ODBC 2.x byl ukazatel na pole stavu řádku argumentem sqlExtendedFetch. Pole stavu řádku bylo později aktualizováno voláním SQLSetPos. Některé ovladače se spoléhaly na skutečnost, že se toto pole mezi SQLExtendedFetch a SQLSetPos nemění. V rozhraní ODBC 3.x je ukazatel na pole stavu pole popisovačem, a proto ji aplikace může snadno změnit tak, aby ukazoval na jiné pole. To může být problém, když aplikace ODBC 3.x pracuje s ovladačem ODBC 2.x , ale volá SQLSetStmtAttr nastavit ukazatel stavu pole a volá SQLFetchScroll k načtení dat. Správce ovladačů ho mapuje jako posloupnost volání SQLExtendedFetch. V následujícím kódu by obvykle byla vyvolána chyba, když Správce ovladačů mapuje druhé volání SQLSetStmtAttr při práci s ovladačem 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);
Chyba by byla vyvolána, pokud neexistuje způsob, jak změnit ukazatel stavu řádku v odbc 2.x mezi voláními SQLExtendedFetch. Správce ovladačů místo toho provádí při práci s ovladačem ODBC 2.x následující kroky:
Inicializuje interní správce ovladačů příznak fSetPosError na hodnotu TRUE.
Když aplikace volá SQLFetchScroll, Správce ovladačů nastaví fSetPosError na FALSE.
Když aplikace volá SQLSetStmtAttr ke nastavení SQL_ATTR_ROW_STATUS_PTR, Správce ovladačů nastaví fSetPosError rovná TRUE.
Když aplikace volá SQLSetPos, s fSetPosError rovno TRUE, Správce ovladačů vyvolá SQL_ERROR s SQLSTATE HY011 (atribut nelze nastavit nyní), aby indikoval, že aplikace se pokusila volat SQLSetPos po změně ukazatele stavu řádku a před voláním SQLFetchScroll.