img/mfc2.jpg

CRecordset


Opis

Obiekt klasy CRecordset reprezentują zbiór rekordów wybranych z określonego źródła danych. Zbiory rekordów są zwykle stosowane w dwóch formach:


Uwaga:
Jeśli planujemy jako mechanizm dostępu do danych wykorzystać technikę DAO (Data Access Objects) powinniśmy korzystać ze specjalnie do tego celu zdefiniowanej klasy CDaoRecordset.
Klasa CRecordset przeznaczona jest do obsługi źródeł danych opartych o mechanizm ODBC (Open Database Connectivity).

Aby wykorzystać zalety klasy CRecordset należy utworzyć klasę po niej dziedziczącą. Kolejnym krokiem jest powiązanie odpowiednich kolumn z tabel w bazie danych z atrybutami utworzonej klasy. Zadanie to najlepiej wykonać narzędziem ClassWizard, które większość czynności zrobi automatycznie. Mając utworzony i połączony z bazą danych obiekt dziedziczący po CRecordset możliwe są następujące operacje:

Aby użyć obiektu CRecordset zalecane (ale niekonieczne) jest wcześniejsze utworzenie obiektu CDatabase. Utworzenie takiego obiektu zalecane jest w dwóch przypadkach:
Po utworzeniu obiektu CDatabase jego adres przekazujemy w wywołaniu konstruktora obiektu CRecordset. Jeśli nie zdecydujemy się na utworzenie oddzielnego obiektu CDatabase i w konstruktorze podamy NULL, system automatycznie utworzy dla nas odpowiedni obiekt CDatabase.
Następnym krokiem jest fizyczne otwarcie obiektu CRecordset. Wykonuje to metoda Open(). Po jej wykonaniu, jeśli zbiór rekordów nie jest pusty (sprawdza to metoda IsEOF()) domyślnie obiekt ustawiony jest na pierwszym wierszu tabeli. Dostępność operacji zależy od typu obiektu (dynaset, snapshot, updatable, read-only). Aby ponownie przyłączyć obiekt do danych (np. po zmianie filtrów lub kryteriów sortowania) nie trzeba go zamykać. Wystarczy skorzystać z metody Requery().

Dynamiczna wymiana danych Obiekty typu CRecordset obsługują mechanizmy dynamicznej wymiany danych, ograniczone jednak do uaktualniania w jedną stronę. Mechanizm ten nosi nazwę wymiany pól rekordów (ang. record field exchange - RFX). Jeżeli mamy odpowiednio zadeklarowane zmienne lokalne w obiekcie i połączymy je z odpowiednimi polami tabeli, przy każdym przemieszczeniu się do innego wiersza tabeli nastąpi automatyczne uaktualnienie wartości zmiennych

Atrybuty

Atrybuty Opis
m_hstmtUchwyt polecenia ODBC (typu HSTMT).
m_nFieldsZawiera ilość pól danych w rekordzie.
m_nParamsZawiera ilość parametrów rekordu (łączonych dynamicznie z zapytaniem).
m_pDatabaseWskaźnik do powiązanego obiektu CDatabase.
m_strFilterZawiera łańcuch znaków filtrujący zapytanie. Jest to dokładnie klauzula WHERE języka SQL (bez słowa "WHERE").
m_strSortZawiera łańcuch znaków sortujący zapytanie. Jest to dokładnie klauzula ORDER BY języka SQL (bez słów "ORDER BY").

Metody

Konstruowanie

Metody Opis
CRecordsetTworzy obiekt typu CRecordset.
OpenOtwiera zbiór rekordów poprzez połączenie z odpowiednią tabelą lub wykonanie zapytania.
CloseZamyka otwarty zbiór rekordów.

Atrybuty zbioru

Metody Opis
CanAppendSprawdza czy można dodawać nowe rekordy do zbioru (metodą AddNew()).
CanBookmarkSprawdza czy zbiór rekordów obsługuje zakładki (ang. bookmarks).
CanRestartSprawdza, czy możliwe jest stosowanie operacji Requery() na zbiorze rekordów (czyli czy jest odnawialny).
CanScrollSprawdza czy możliwe jest przemieszczanie się po rekordach.
CanTransactSprawdza czy zbiór rekordów obsługuje transakcje.
CanUpdateSprawdza czy zbiór rekordów umożliwia uaktualnienia (dodawanie, modyfikację, usuwanie rekordów).
GetODBCFieldCountZwraca ilość pól w rekordzie.
GetRecordCountZwraca ilość rekordów w zbiorze (wartość jest prawdziwa dopiero po przesunięciu kursora przez wszystkie rekordy).
GetStatusZwraca status zbioru rekordów: numer rekordu aktualnego oraz czy osiągnięte zostało maksimum rekordów w bazie.
GetTableNameZwraca nazwę tabeli, jeśli zbiór operuje na tabeli.
GetSQLZwraca łańcuch języka SQL na podstawie którego utworzony został zbiór rekordów.
IsOpenSprawdza czy zbiór został otwarty - metoda Open().
IsBOFSprawdza czy osiągnięto początek zbioru rekordów. Przydatne przy przeszukiwaniu zbioru w pętli metodą MovePrev().
IsEOFSprawdza czy osiągnięto koniec zbioru rekordów. Przydatne przy przeszukiwaniu zbioru w pętli metodą MoveNext().
IsDeletedSprawdza czy rekord, na którym aktualnie znajduje się kursor jest usunięty.

Operacje na zbiorze

Metody Opis
AddNewRozpoczyna proces dodania nowego rekordu. Zatwierdzenie następuje po wydaniu polecenia Update(). Anulowanie możliwe jest poleceniem CancelUpdate().
CancelUpdateAnuluje operację dodania nowego lub edycji istniejącego rekordu.
DeleteUsuwa bieżący rekord. Po usunięciu należy samodzielnie przemieścić kursor do innego rekordu.
EditRozpoczyna edycję bieżącego rekordu. Zatwierdzenie następuje po wydaniu polecenia Update(). Anulowanie możliwe jest poleceniem CancelUpdate().
UpdateZatwierdza operację dodania nowego rekordu lub jego edycji.

Przemieszczanie się po rekordach

Metody Opis
GetBookmarkTworzy zakładkę na bieżącej pozycji kursora.
MovePrzemieszcza kursor o określoną ilość pozycji w przód lub w tył.
MoveFirstPrzemieszcza kursor do pierwszego rekordu.
MoveLastPrzemieszcza kursor do ostatniego rekordu.
MoveNextPrzemieszcza kursor o 1 rekord w przód.
MovePrevPrzemieszcza kursor o 1 rekord w tył.
SetAbsolutePositionPrzemieszcza kursor do rekordu o podanym numerze.
SetBookmarkPrzemieszcza kursor do zapamiętanej wcześniej zakładki.

Inne operacje

Metody Opis
CancelAnuluje asynchroniczną operację lub proces innego wątku.
FlushResultSet.
GetFieldValueZwraca wartość podanego pola w zbiorze rekordów.
GetODBCFieldInfoZwraca informacje o określonym polu.
GetRowsetSize.
GetRowsFetched.
GetRowStatus.
IsFieldDirtySprawdza czy dane pole zostało zmodyfikowane.
IsFieldNullSprawdza czy w danym polu znajduje się wartość NULL.
IsFieldNullableSprawdza czy dane pole dopuszcza wartość NULL.
RefreshRowsetOdświeża zawartość bieżącego rekordu.
RequeryOdświeża zawartość całego zbioru z uwzględnieniem bieżących parametrów filtrowania i sortowania. Odpowieda zamknięciu i ponownemu otwarciu zbioru, jest jednak znacznie szybsze.
SetFieldDirtyUstawia określone pole jako zmienione.
SetFieldNullUstawia wartość określonego pola na NULL.
SetLockingMode.
SetParamNullUstawia dany parametr na NULL.
SetRowsetCursorPosition.

Metody do pokrycia w klasach potomnych

Metody Opis
Check.
CheckRowsetError.
DoBulkFieldExchange.
DoFieldExchange.
GetDefaultConnectZwraca domyślny łańcuch połączenia ODBC (ang. connection string).
GetDefaultSQLZwraca domyślny łańcuch języka SQL użyty do wyznaczenia zapytania (bez klauzul WHERE i ORDER BY).
OnSetOptions.
SetRowsetSize.


Zobacz także

CDatabase, CRecordView

Hierarchia

img/hr_crecordset.gif