ODBC: Knihovna kurzorů rozhraní ODBC
Toto téma popisuje knihovnu kurzorů ODBC a vysvětluje, jak ji používat. Další informace naleznete v tématu:
Knihovna kurzorů ODBC je dynamická knihovna (DLL), která se nachází mezi správcem ovladačů ODBC a ovladačem. Pokud jde o rozhraní ODBC, ovladač udržuje kurzor pro sledování své pozice v sadě záznamů. Kurzor označí pozici v sadě záznamů, na kterou jste se už posouli – aktuální záznam.
Knihovna kurzorů a ovladače ODBC úrovně 1
Knihovna kurzorů ODBC poskytuje ovladače úrovně 1 následující nové funkce:
Dopředu a dozadu se posunete. Ovladače úrovně 2 nepotřebují knihovnu kurzorů, protože se už dají posunout.
Podpora snímků Knihovna kurzorů spravuje vyrovnávací paměť obsahující záznamy snímku. Tato vyrovnávací paměť odráží odstranění a úpravy programu v záznamech, ale ne přidávání, odstraňování nebo úprav jiných uživatelů. Snímek je proto pouze aktuální jako vyrovnávací paměť knihovny kurzorů. Vyrovnávací paměť také neodráží vaše vlastní dodatky, dokud nezavoláte
Requery
. Dynamické sady nepoužívají knihovnu kurzorů.
Knihovna kurzorů poskytuje snímky (statické kurzory), i když je ovladač normálně nepodporuje. Pokud ovladač již podporuje statické kurzory, není nutné načíst knihovnu kurzorů, abyste získali podporu snímků. Pokud používáte knihovnu kurzorů, můžete použít jenom snímky a sady záznamů jen pro předávání. Pokud ovladač podporuje dynamické sady (KEYSET_DRIVEN kurzory) a chcete je použít, nesmíte použít knihovnu kurzorů. Pokud chcete použít snímky i dynamické sady, musíte je založit na dvou různých objektech (dvě různá CDatabase
připojení), pokud ovladač nepodporuje obojí.
Poziční aktualizace a sloupce časového razítka
Poznámka:
Zdroje dat ODBC jsou přístupné prostřednictvím tříd MFC ODBC, jak je popsáno v tomto tématu, nebo prostřednictvím tříd ROZHRANÍ DAO (Data Access Object).
Poznámka:
Pokud ovladač ODBC podporuje SQLSetPos
, který mfc používá, pokud je k dispozici, toto téma se na vás nevztahuje.
Většina ovladačů úrovně 1 nepodporuje umístěné aktualizace. Tyto ovladače spoléhají na knihovnu kurzorů k emulaci schopností ovladačů úrovně 2 v tomto ohledu. Knihovna kurzorů emuluje podporu umístěných aktualizací provedením prohledáné aktualizace v nezměněných polích.
V některých případech může sada záznamů obsahovat sloupec časového razítka jako jedno z těchto neměnných polí. Při používání sad záznamů MFC s tabulkami, které obsahují sloupce časového razítka, vznikají dva problémy.
Prvním problémem jsou aktualizovatelné snímky tabulek se sloupci časového razítka. Pokud tabulka, na kterou je snímek svázaný, obsahuje sloupec časového razítka, měli byste zavolat Requery
po volání Edit
a Update
. Pokud ne, možná nebudete moct stejný záznam znovu upravit. Při volání a následném Update
volání Edit
se záznam zapíše do zdroje dat a sloupec časového razítka se aktualizuje. Pokud nezavoláte Requery
, hodnota časového razítka záznamu ve snímku už neodpovídá odpovídajícímu časovému razítku ve zdroji dat. Když se pokusíte záznam aktualizovat znovu, zdroj dat může aktualizaci z důvodu neshody zakázat.
Druhý problém se týká omezení třídy CTime při použití s RFX_Date
funkcí k přenosu informací o čase a datu do nebo z tabulky. Zpracování objektu CTime
vyžaduje určité režijní náklady ve formě dodatečného zprostředkujícího zpracování během přenosu dat. Rozsah dat CTime
objektů může být také příliš omezený pro některé aplikace. Nová verze RFX_Date
funkce přebírá namísto objektu parametr CTime
ODBC TIMESTAMP_STRUCT. Další informace naleznete v makrech RFX_Date
a globálních objektech v referenční dokumentaci MFC.
Použití knihovny kurzorů
Když se připojíte ke zdroji dat – zavoláním CDatabase::OpenEx nebo CDatabase::Open – můžete určit, jestli se má pro zdroj dat použít knihovna kurzorů. Pokud budete vytvářet snímky v daném zdroji dat, zadejte CDatabase::useCursorLib
v parametru dwOptions
OpenEx
možnost nebo zadejte hodnotu TRUE pro parametr bUseCursorLib ( Open
výchozí hodnota je PRAVDA). Pokud ovladač ODBC podporuje dynamické sady a chcete otevřít dynamické sady ve zdroji dat, nepoužívejte knihovnu kurzorů (maskuje některé funkce ovladače potřebné pro dynasety). V takovém případě nezadávejte CDatabase::useCursorLib
OpenEx
hodnotu NEPRAVDA pro parametr bUseCursorLib v Open
.