ODBC: biblioteka kursorów ODBC
W tym temacie opisano bibliotekę kursorów ODBC i wyjaśniono, jak z niej korzystać. Aby uzyskać więcej informacji, zobacz:
Biblioteka kursorów ODBC to biblioteka biblioteki dynamicznego łącza (DLL), która znajduje się między menedżerem sterowników ODBC a sterownikiem. W kategoriach ODBC sterownik utrzymuje kursor, aby śledzić swoją pozycję w zestawie rekordów. Kursor oznacza położenie w zestawie rekordów, do którego został już przewinięty — bieżący rekord.
Biblioteka kursorów i sterowniki ODBC poziomu 1
Biblioteka kursorów ODBC udostępnia następujące nowe funkcje poziomu 1:
Przewijanie do przodu i do tyłu. Sterowniki poziomu 2 nie wymagają biblioteki kursorów, ponieważ można je już przewijać.
Obsługa migawek. Biblioteka kursorów zarządza buforem zawierającym rekordy migawki. Ten bufor odzwierciedla usunięcia i edycje programu do rekordów, ale nie do dodawania, usuwania lub edycji innych użytkowników. W związku z tym migawka jest aktualna tylko jako bufor biblioteki kursorów. Bufor również nie odzwierciedla własnych dodatków, dopóki nie wywołasz metody
Requery
. Zestawy dynaset nie używają biblioteki kursorów.
Biblioteka kursorów udostępnia migawki (kursory statyczne), nawet jeśli nie są one normalnie obsługiwane przez sterownik. Jeśli sterownik obsługuje już kursory statyczne, nie musisz ładować biblioteki kursorów, aby uzyskać obsługę migawek. Jeśli używasz biblioteki kursorów, możesz użyć tylko migawek i zestawów rekordów tylko do przodu. Jeśli sterownik obsługuje dynamiczne (KEYSET_DRIVEN kursory) i chcesz ich używać, nie możesz użyć biblioteki kursorów. Jeśli chcesz użyć zarówno migawek, jak i dynamicznych, musisz opierać je na dwóch różnych obiektach (dwóch różnych CDatabase
połączeniach), chyba że sterownik obsługuje oba te elementy.
Pozycjonowane aktualizacje i kolumny sygnatury czasowej
Uwaga
Źródła danych ODBC są dostępne za pośrednictwem klas MFC ODBC, zgodnie z opisem w tym temacie lub za pośrednictwem klas MFC Data Access Object (DAO).
Uwaga
Jeśli sterownik ODBC obsługuje funkcję SQLSetPos
, która jest używana przez MFC, jeśli jest dostępna, ten temat nie ma zastosowania do Ciebie.
Większość sterowników poziomu 1 nie obsługuje aktualizacji umieszczonych. Takie sterowniki polegają na bibliotece kursorów, aby emulować możliwości sterowników poziomu 2 w tym zakresie. Biblioteka kursorów emuluje obsługę aktualizacji rozmieszczonych przez wykonanie przeszukanej aktualizacji w polach, które nie są zmieniane.
W niektórych przypadkach zestaw rekordów może zawierać kolumnę znacznika czasu jako jedno z tych niezmieniających się pól. W przypadku używania zestawów rekordów MFC z tabelami zawierającymi kolumny sygnatury czasowej występują dwa problemy.
Pierwszy problem dotyczy migawek z możliwością aktualizacji w tabelach z kolumnami sygnatury czasowej. Jeśli tabela, do której jest powiązana migawka, zawiera kolumnę znacznika czasu, wywołaj Requery
metodę po wywołaniu Edit
metody i Update
. Jeśli nie, może nie być możliwe ponowne edytowanie tego samego rekordu. Po wywołaniu Edit
metody , Update
rekord jest zapisywany w źródle danych, a kolumna znacznika czasu jest aktualizowana. Jeśli nie wywołasz Requery
metody , wartość znacznika czasu rekordu w migawce nie jest już zgodna z odpowiednim znacznikem czasu w źródle danych. Podczas ponownej próby zaktualizowania rekordu źródło danych może nie zezwalać na aktualizację z powodu niezgodności.
Drugi problem dotyczy ograniczeń klasy CTime , gdy jest używany z funkcją RFX_Date
do transferu informacji o godzinie i dacie do lub z tabeli. CTime
Przetwarzanie obiektu nakłada pewne obciążenie w postaci dodatkowego przetwarzania pośredniego podczas transferu danych. Zakres CTime
dat obiektów może również być zbyt ograniczający dla niektórych aplikacji. Nowa wersja RFX_Date
funkcji przyjmuje parametr odBC TIMESTAMP_STRUCT zamiast CTime
obiektu. Aby uzyskać więcej informacji, zobacz RFX_Date
w temacie Makra i globalne w dokumentacji MFC.
Korzystanie z biblioteki kursorów
Podczas nawiązywania połączenia ze źródłem danych — przez wywołanie metody CDatabase::OpenEx lub CDatabase::Open — możesz określić, czy używać biblioteki kursorów dla źródła danych. Jeśli utworzysz migawki w tym źródle danych, określ CDatabase::useCursorLib
opcję w parametrze dwOptions
na OpenEx
lub określ wartość TRUE dla parametru bUseCursorLib na Open
wartość (wartość domyślna to TRUE). Jeśli sterownik ODBC obsługuje dynamiczne zestawy i chcesz otworzyć dynasety w źródle danych, nie używaj biblioteki kursorów (maskuje niektóre funkcje sterownika potrzebne do dynasetów). W takim przypadku nie należy określać CDatabase::useCursorLib
parametru OpenEx
FALSE dla parametru bUseCursorLib w pliku Open
.