Klasa CRecordset
Reprezentuje zestaw rekordów wybranych ze źródła danych.
Składnia
class CRecordset : public CObject
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CRecordset::CRecordset |
CRecordset Tworzy obiekt. Klasa pochodna musi podać konstruktor, który wywołuje ten. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CRecordset::AddNew |
Przygotowuje się do dodawania nowego rekordu. Wywołaj metodę Update , aby ukończyć dodawanie. |
CRecordset::CanAppend |
Zwraca wartość niezerową, jeśli nowe rekordy można dodać do zestawu rekordów za pośrednictwem funkcji składowej AddNew . |
CRecordset::CanBookmark |
Zwraca wartość niezerową, jeśli zestaw rekordów obsługuje zakładki. |
CRecordset::Cancel |
Anuluje operację asynchroniczną lub proces z drugiego wątku. |
CRecordset::CancelUpdate |
Anuluje wszystkie oczekujące aktualizacje z powodu operacji AddNew lub Edit . |
CRecordset::CanRestart |
Zwraca wartość nonzero, jeśli Requery można wywołać polecenie , aby ponownie uruchomić zapytanie zestawu rekordów. |
CRecordset::CanScroll |
Zwraca wartość inną niżzerowa, jeśli można przewijać rekordy. |
CRecordset::CanTransact |
Zwraca wartość niezerowa, jeśli źródło danych obsługuje transakcje. |
CRecordset::CanUpdate |
Zwraca wartość inną niżzerowa, jeśli można zaktualizować zestaw rekordów (można dodawać, aktualizować lub usuwać rekordy). |
CRecordset::CheckRowsetError |
Wywoływana w celu obsługi błędów generowanych podczas pobierania rekordów. |
CRecordset::Close |
Zamyka zestaw rekordów i skojarzony z nim odBC HSTMT . |
CRecordset::Delete |
Usuwa bieżący rekord z zestawu rekordów. Musisz jawnie przewinąć do innego rekordu po usunięciu. |
CRecordset::DoBulkFieldExchange |
Wywoływane w celu wymiany zbiorczych wierszy danych ze źródła danych do zestawu rekordów. Implementuje wymianę pól rekordów zbiorczych (Bulk RFX). |
CRecordset::DoFieldExchange |
Wywoływana w celu wymiany danych (w obu kierunkach) między elementami członkowskimi danych pola zestawu rekordów a odpowiednim rekordem w źródle danych. Implementuje wymianę pól rekordów (RFX). |
CRecordset::Edit |
Przygotowuje się do zmian w bieżącym rekordzie. Wywołaj metodę Update , aby ukończyć edycję. |
CRecordset::FlushResultSet |
Zwraca wartość niezerową, jeśli podczas używania wstępnie zdefiniowanego zapytania zostanie pobrany inny zestaw wyników. |
CRecordset::GetBookmark |
Przypisuje wartość zakładki rekordu do obiektu parametru. |
CRecordset::GetDefaultConnect |
Wywołana w celu uzyskania domyślnej parametry połączenia. |
CRecordset::GetDefaultSQL |
Wywoływana w celu pobrania domyślnego ciągu SQL do wykonania. |
CRecordset::GetFieldValue |
Zwraca wartość pola w zestawie rekordów. |
CRecordset::GetODBCFieldCount |
Zwraca liczbę pól w zestawie rekordów. |
CRecordset::GetODBCFieldInfo |
Zwraca określone rodzaje informacji o polach w zestawie rekordów. |
CRecordset::GetRecordCount |
Zwraca liczbę rekordów w zestawie rekordów. |
CRecordset::GetRowsetSize |
Zwraca liczbę rekordów, które mają zostać pobrane podczas pojedynczego pobierania. |
CRecordset::GetRowsFetched |
Zwraca rzeczywistą liczbę wierszy pobranych podczas pobierania. |
CRecordset::GetRowStatus |
Zwraca stan wiersza po pobraniu. |
CRecordset::GetSQL |
Pobiera ciąg SQL używany do wybierania rekordów dla zestawu rekordów. |
CRecordset::GetStatus |
Pobiera stan zestawu rekordów: indeks bieżącego rekordu i czy została uzyskana ostateczna liczba rekordów. |
CRecordset::GetTableName |
Pobiera nazwę tabeli, na której jest oparty zestaw rekordów. |
CRecordset::IsBOF |
Zwraca wartość nonzero, jeśli zestaw rekordów został umieszczony przed pierwszym rekordem. Brak bieżącego rekordu. |
CRecordset::IsDeleted |
Zwraca wartość niezerową, jeśli zestaw rekordów jest umieszczony na usuniętym rekordzie. |
CRecordset::IsEOF |
Zwraca wartość nonzero, jeśli zestaw rekordów został umieszczony po ostatnim rekordzie. Brak bieżącego rekordu. |
CRecordset::IsFieldDirty |
Zwraca wartość niezera, jeśli określone pole w bieżącym rekordzie zostało zmienione. |
CRecordset::IsFieldNull |
Zwraca wartość nonzero, jeśli określone pole w bieżącym rekordzie ma wartość null (nie ma wartości). |
CRecordset::IsFieldNullable |
Zwraca wartość nonzero, jeśli określone pole w bieżącym rekordzie można ustawić na wartość null (bez wartości). |
CRecordset::IsOpen |
Zwraca wartość niezerowa, jeśli Open została wywołana wcześniej. |
CRecordset::Move |
Ustawia zestaw rekordów na określoną liczbę rekordów z bieżącego rekordu w obu kierunkach. |
CRecordset::MoveFirst |
Umieszcza bieżący rekord na pierwszym rekordzie w zestawie rekordów. Najpierw przetestuj IsBOF . |
CRecordset::MoveLast |
Umieszcza bieżący rekord w ostatnim rekordzie lub w ostatnim zestawie wierszy. Najpierw przetestuj IsEOF . |
CRecordset::MoveNext |
Umieszcza bieżący rekord w następnym rekordzie lub w następnym zestawie wierszy. Najpierw przetestuj IsEOF . |
CRecordset::MovePrev |
Umieszcza bieżący rekord w poprzednim rekordzie lub w poprzednim zestawie wierszy. Najpierw przetestuj IsBOF . |
CRecordset::OnSetOptions |
Wywoływana w celu ustawienia opcji (używanych do wyboru) dla określonej instrukcji ODBC. |
CRecordset::OnSetUpdateOptions |
Wywoływana w celu ustawienia opcji (używanych podczas aktualizacji) dla określonej instrukcji ODBC. |
CRecordset::Open |
Otwiera zestaw rekordów, pobierając tabelę lub wykonując zapytanie reprezentowane przez zestaw rekordów. |
CRecordset::RefreshRowset |
Odświeża dane i stan określonych wierszy. |
CRecordset::Requery |
Ponownie uruchamia zapytanie zestawu rekordów, aby odświeżyć wybrane rekordy. |
CRecordset::SetAbsolutePosition |
Umieszcza zestaw rekordów w rekordzie odpowiadający określonej liczbie rekordów. |
CRecordset::SetBookmark |
Umieszcza zestaw rekordów w rekordzie określonym przez zakładkę. |
CRecordset::SetFieldDirty |
Oznacza określone pole w bieżącym rekordzie zgodnie ze zmianą. |
CRecordset::SetFieldNull |
Ustawia wartość określonego pola w bieżącym rekordzie na wartość null (bez wartości). |
CRecordset::SetLockingMode |
Ustawia tryb blokowania na "optymistyczne" blokowanie (ustawienie domyślne) lub "pesymistyczne" blokowanie. Określa sposób blokowania rekordów dla aktualizacji. |
CRecordset::SetParamNull |
Ustawia określony parametr na null (bez wartości). |
CRecordset::SetRowsetCursorPosition |
Umieszcza kursor w określonym wierszu w zestawie wierszy. |
CRecordset::SetRowsetSize |
Określa liczbę rekordów, które mają zostać pobrane podczas pobierania. |
CRecordset::Update |
Wykonuje operację AddNew lub Edit , zapisując nowe lub edytowane dane w źródle danych. |
Elementy członkowskie danych publicznych
Nazwa/nazwisko | opis |
---|---|
CRecordset::m_hstmt |
Zawiera uchwyt instrukcji ODBC dla zestawu rekordów. Wpisz HSTMT . |
CRecordset::m_nFields |
Zawiera liczbę elementów członkowskich danych pól w zestawie rekordów. Wpisz UINT . |
CRecordset::m_nParams |
Zawiera liczbę składowych danych parametrów w zestawie rekordów. Wpisz UINT . |
CRecordset::m_pDatabase |
Zawiera wskaźnik do CDatabase obiektu, za pomocą którego zestaw rekordów jest połączony ze źródłem danych. |
CRecordset::m_strFilter |
Zawiera element CString określający klauzulę Structured Query Language (SQL). WHERE Służy jako filtr do wybierania tylko tych rekordów spełniających określone kryteria. |
CRecordset::m_strSort |
Zawiera element CString określający klauzulę SQL ORDER BY . Służy do kontrolowania sposobu sortowania rekordów. |
Uwagi
Obiekty nazywane "zestawami rekordów" CRecordset
są zwykle używane w dwóch formach: dynamicznych i migawek. Zestaw dynamiczny pozostaje synchronizowany z aktualizacjami danych wykonanymi przez innych użytkowników. Migawka to statyczny widok danych. Każdy formularz reprezentuje zestaw rekordów ustalonych w momencie otwarcia zestawu rekordów. Podczas przewijania do rekordu w dynamicznym zestawie odzwierciedla zmiany wprowadzone w rekordzie przez innych użytkowników lub inne zestawy rekordów w aplikacji.
Uwaga
Jeśli pracujesz z klasami Data Access Objects (DAO), a nie z klasami Open Database Connectivity (ODBC), użyj klasy CDaoRecordset
. Aby uzyskać więcej informacji, zobacz Omówienie: Programowanie bazy danych.
Aby pracować z dowolnego rodzaju zestawem rekordów, zazwyczaj tworzy się klasę zestawu rekordów specyficzną dla aplikacji z klasy CRecordset
. Zestawy rekordów wybierają rekordy ze źródła danych, a następnie:
Przewiń rekordy.
Zaktualizuj rekordy i określ tryb blokowania.
Przefiltruj zestaw rekordów, aby ograniczyć, które rekordy są wybierane z tych dostępnych w źródle danych.
Sortuj zestaw rekordów.
Sparametryzuj zestaw rekordów, aby dostosować jego wybór za pomocą informacji, które nie są znane do czasu wykonywania.
Aby użyć klasy, otwórz bazę danych i skonstruuj obiekt zestawu rekordów, przekazując konstruktorowi wskaźnik do CDatabase
obiektu. Następnie wywołaj funkcję składową zestawu Open
rekordów, gdzie można określić, czy obiekt jest dynamicznym zestawem, czy migawką. Wywołanie metody Open
wybiera dane ze źródła danych. Po otwarciu obiektu zestawu rekordów użyj jego funkcji składowych i składowych danych, aby przewijać rekordy i wykonywać na nich operacje. Dostępne operacje zależą od tego, czy obiekt jest dynamicznym zestawem, czy migawką, czy jest aktualizowalny, czy tylko do odczytu (zależy to od możliwości źródła danych Open Database Connectivity (ODBC) i czy zaimplementowano pobieranie wierszy zbiorczych. Aby odświeżyć rekordy, które mogły zostać zmienione lub dodane od wywołania Open
, wywołaj funkcję składową obiektu Requery
. Wywołaj funkcję składową obiektu Close
i zniszcz obiekt po jego zakończeniu.
W klasie pochodnej CRecordset
wymiana pól rekordów (RFX) lub wymiana pól rekordów zbiorczych (Bulk RFX) służy do odczytywania i aktualizowania pól rekordów.
Aby uzyskać więcej informacji na temat zestawów rekordów i wymiany pól rekordów, zobacz artykuły Omówienie: programowanie bazy danych, zestaw rekordów (ODBC), zestaw rekordów: pobieranie rekordów zbiorczo (ODBC) i Wymiana pól rekordów (RFX). Aby skoncentrować się na dynamicznych zestawach i migawkach, zobacz artykuły Dynaset i Snapshot.
Hierarchia dziedziczenia
CRecordset
Wymagania
Nagłówek: afxdb.h
CRecordset::AddNew
Przygotowuje się do dodawania nowego rekordu do tabeli.
virtual void AddNew();
Uwagi
Aby wyświetlić nowo dodany rekord, należy wywołać Requery
funkcję składową. Początkowo pola rekordu mają wartość Null. (W terminologii bazy danych wartość Null oznacza "brak wartości" i nie jest taka sama jak wartość NULL w języku C++). Aby ukończyć operację, należy wywołać funkcję składową Update
. Update
zapisuje zmiany w źródle danych.
Uwaga
Jeśli zaimplementowano pobieranie wierszy zbiorczych, nie można wywołać metody AddNew
. Spowoduje to niepowodzenie asercji. Mimo że klasa CRecordset
nie udostępnia mechanizmu aktualizowania zbiorczych wierszy danych, można napisać własne funkcje przy użyciu funkcji SQLSetPos
interfejsu API ODBC . Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
AddNew
Przygotowuje nowy, pusty rekord przy użyciu elementów członkowskich danych pola zestawu rekordów. Po wywołaniu AddNew
metody ustaw żądane wartości w elementach członkowskich danych pola zestawu rekordów. (Nie musisz wywoływać elementu Edytuj funkcję składową w tym celu; użyj Edit
tylko dla istniejących rekordów). Po wywołaniu Update
metody zmieniono wartości w elementach członkowskich danych pól są zapisywane w źródle danych.
Uwaga
Jeśli przewiniesz nowy rekord przed wywołaniem Update
metody , nowy rekord zostanie utracony i nie zostanie wyświetlone żadne ostrzeżenie.
Jeśli źródło danych obsługuje transakcje, możesz wykonać wywołanie AddNew
części transakcji. Aby uzyskać więcej informacji na temat transakcji, zobacz klasa CDatabase
. Przed wywołaniem metody wywołaj metodę CDatabase::BeginTrans
AddNew
.
Uwaga
W przypadku zestawów dynamicznych nowe rekordy są dodawane do zestawu rekordów jako ostatni rekord. Dodane rekordy nie są dodawane do migawek; Należy wywołać metodę Requery
, aby odświeżyć zestaw rekordów.
Wywołanie AddNew
zestawu rekordów, którego Open
funkcja składowa nie została wywołana, jest niedozwolone. Element CDBException
jest zgłaszany, jeśli wywołasz AddNew
zestaw rekordów, do którego nie można dołączyć. Można określić, czy zestaw rekordów jest aktualizowalny, wywołując polecenie CanAppend
.
Aby uzyskać więcej informacji, zobacz następujące artykuły: Zestaw rekordów: Jak zestawy rekordów aktualizują rekordy (ODBC), zestaw rekordów: dodawanie, aktualizowanie i usuwanie rekordów (ODBC) i transakcji (ODBC).
Przykład
zobacz Transakcja: wykonywanie transakcji w zestawie rekordów (ODBC).
CRecordset::CanAppend
Określa, czy wcześniej otwarty zestaw rekordów umożliwia dodawanie nowych rekordów.
BOOL CanAppend() const;
Wartość zwracana
Niezerowe, jeśli zestaw rekordów zezwala na dodawanie nowych rekordów; w przeciwnym razie 0. CanAppend
Program zwróci wartość 0, jeśli zestaw rekordów został otwarty jako tylko do odczytu.
CRecordset::CanBookmark
Określa, czy zestaw rekordów umożliwia oznaczanie rekordów przy użyciu zakładek.
BOOL CanBookmark() const;
Wartość zwracana
Nonzero, jeśli zestaw rekordów obsługuje zakładki; w przeciwnym razie 0.
Uwagi
Ta funkcja jest niezależna od CRecordset::useBookmarks
opcji w dwOptions
parametrze funkcji składowej Open
. CanBookmark
wskazuje, czy dany sterownik ODBC i typ kursora obsługują zakładki. CRecordset::useBookmarks
wskazuje, czy zakładki będą dostępne, pod warunkiem, że są one obsługiwane.
Uwaga
Zakładki nie są obsługiwane w zestawach rekordów tylko do przekazywania.
Aby uzyskać więcej informacji na temat nawigacji zakładek i zestawów rekordów, zobacz artykuły Zestaw rekordów: zakładki i pozycje bezwzględne (ODBC) i Zestaw rekordów: Przewijanie (ODBC).
CRecordset::Cancel
Żąda, aby źródło danych anulowało w toku operację asynchroniczną lub proces z drugiego wątku.
void Cancel();
Uwagi
Klasy MFC ODBC nie używają już przetwarzania asynchronicznego; aby wykonać operację asynchroniczną, należy bezpośrednio wywołać funkcję SQLSetConnectOption
interfejsu API ODBC . Aby uzyskać więcej informacji, zobacz "Wykonywanie funkcji asynchronicznie" w przewodniku programisty zestawu SDK ODBC.
CRecordset::CancelUpdate
Anuluje wszystkie oczekujące aktualizacje spowodowane przez operację Edit
lub AddNew
przed Update
wywołaniami.
void CancelUpdate();
Uwagi
Uwaga
Ta funkcja składowa nie ma zastosowania w zestawach rekordów korzystających z pobierania zbiorczego wierszy, ponieważ takie zestawy rekordów nie mogą wywoływać Edit
elementów , AddNew
ani Update
. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Jeśli włączono automatyczne sprawdzanie pól zanieczyszczonych, CancelUpdate
przywróci zmienne składowe do wartości, które miały wcześniej Edit
lub AddNew
zostały wywołane. W przeciwnym razie wszelkie zmiany wartości pozostaną. Domyślnie automatyczne sprawdzanie pól jest włączone po otwarciu zestawu rekordów. Aby go wyłączyć, należy określić CRecordset::noDirtyFieldCheck
parametr w parametrze dwOptions
funkcji Open member.
Aby uzyskać więcej informacji na temat aktualizowania danych, zobacz Zestaw rekordów: dodawanie, aktualizowanie i usuwanie rekordów (ODBC).
CRecordset::CanRestart
Określa, czy zestaw rekordów umożliwia ponowne uruchomienie zapytania (w celu odświeżenia rekordów) przez wywołanie funkcji składowej Requery
.
BOOL CanRestart() const;
Wartość zwracana
Bez zera, jeśli ponowne zapytanie jest dozwolone; w przeciwnym razie 0.
CRecordset::CanScroll
Określa, czy zestaw rekordów zezwala na przewijanie.
BOOL CanScroll() const;
Wartość zwracana
Niezerowe, jeśli zestaw rekordów zezwala na przewijanie; w przeciwnym razie 0.
Uwagi
Aby uzyskać więcej informacji na temat przewijania, zobacz Zestaw rekordów: przewijanie (ODBC).
CRecordset::CanTransact
Określa, czy zestaw rekordów zezwala na transakcje.
BOOL CanTransact() const;
Wartość zwracana
Nonzero, jeśli zestaw rekordów zezwala na transakcje; w przeciwnym razie 0.
Uwagi
Aby uzyskać więcej informacji, zobacz Transaction (ODBC).
CRecordset::CanUpdate
Określa, czy można zaktualizować zestaw rekordów.
BOOL CanUpdate() const;
Wartość zwracana
Nonzero, jeśli można zaktualizować zestaw rekordów; w przeciwnym razie 0.
Uwagi
Zestaw rekordów może być tylko do odczytu, jeśli bazowe źródło danych jest tylko do odczytu lub jeśli określono CRecordset::readOnly
w parametrze dwOptions
podczas otwierania zestawu rekordów.
CRecordset::CheckRowsetError
Wywoływana w celu obsługi błędów generowanych podczas pobierania rekordów.
virtual void CheckRowsetError(RETCODE nRetCode);
Parametry
nRetCode
Kod zwrotny funkcji interfejsu API ODBC. Aby uzyskać szczegółowe informacje, zobacz Uwagi.
Uwagi
Ta funkcja wirtualnego elementu członkowskiego obsługuje błędy występujące podczas pobierania rekordów i jest przydatna podczas zbiorczego pobierania wierszy. Warto rozważyć zastąpienie CheckRowsetError
w celu zaimplementowania własnej obsługi błędów.
CheckRowsetError
jest wywoływana automatycznie w operacji nawigacji kursora, takiej jak Open
, Requery
lub dowolna Move
operacja. Przekazano jej wartość zwracaną przez funkcję SQLExtendedFetch
interfejsu API ODBC . W poniższej tabeli wymieniono możliwe wartości parametru nRetCode
.
nRetCode | opis |
---|---|
SQL_SUCCESS |
Funkcja została ukończona pomyślnie; żadne dodatkowe informacje nie są dostępne. |
SQL_SUCCESS_WITH_INFO |
Funkcja została ukończona pomyślnie, prawdopodobnie z błędem niekrytycznym. Dodatkowe informacje można uzyskać przez wywołanie metody SQLError . |
SQL_NO_DATA_FOUND |
Wszystkie wiersze z zestawu wyników zostały pobrane. |
SQL_ERROR |
Funkcja nie powiodła się. Dodatkowe informacje można uzyskać przez wywołanie metody SQLError . |
SQL_INVALID_HANDLE |
Funkcja nie powiodła się z powodu nieprawidłowego dojścia środowiska, uchwytu połączenia lub dojścia instrukcji. Oznacza to błąd programowania. Żadne dodatkowe informacje nie są dostępne w witrynie SQLError . |
SQL_STILL_EXECUTING |
Funkcja, która została uruchomiona asynchronicznie, nadal jest wykonywana. Domyślnie MFC nigdy nie przekaże tej wartości do CheckRowsetError ; Wywołanie MFC będzie kontynuowane SQLExtendedFetch , dopóki nie zwróci już wartości SQL_STILL_EXECUTING . |
Aby uzyskać więcej informacji o SQLError
systemie , zobacz Zestaw Windows SDK. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
CRecordset::Close
Zamyka zestaw rekordów.
virtual void Close();
Uwagi
OdBC HSTMT
i cała pamięć przydzielona dla zestawu rekordów zostaną cofnięto przydział. Zwykle po wywołaniu Close
metody program usuwa obiekt zestawu rekordów C++, jeśli został przydzielony za pomocą polecenia new
.
Możesz ponownie zadzwonić Open
po wywołaniu metody Close
. Umożliwia to ponowne użycie obiektu zestawu rekordów. Alternatywą jest wywołanie metody Requery
.
Przykład
// Construct a snapshot object
CCustomer rsCustSet(NULL);
if (!rsCustSet.Open())
return;
// Use the snapshot ...
// Close the snapshot
rsCustSet.Close();
// Destructor is called when the function exits
CRecordset::CRecordset
CRecordset
Tworzy obiekt.
CRecordset(CDatabase* pDatabase = NULL);
Parametry
pDatabase
Zawiera wskaźnik do CDatabase
obiektu lub wartości NULL
. Jeśli nie NULL
, a CDatabase
funkcja składowa obiektu Open
nie została wywołana, aby połączyć ją ze źródłem danych, zestaw rekordów próbuje go otworzyć podczas jego własnego Open
wywołania. W przypadku przekazania NULL
CDatabase
obiektu jest konstruowany i połączony przy użyciu informacji o źródle danych określonych podczas uzyskiwania klasy zestawu rekordów z klasą ClassWizard.
Uwagi
Możesz użyć CRecordset
bezpośrednio lub utworzyć klasę specyficzną dla aplikacji z klasy CRecordset
. Klasy ClassWizard można użyć do tworzenia klas zestawów rekordów.
Uwaga
Klasa pochodna musi dostarczyć własny konstruktor. W konstruktorze klasy pochodnej wywołaj konstruktor CRecordset::CRecordset
, przekazując do niego odpowiednie parametry.
Przekaż NULL
do konstruktora zestawu rekordów, aby automatycznie CDatabase
utworzyć obiekt i nawiązać połączenie. Jest to przydatny skrót, który nie wymaga konstruowania i łączenia CDatabase
obiektu przed konstruowaniem zestawu rekordów.
Przykład
Aby uzyskać więcej informacji, zobacz Zestaw rekordów: deklarowanie klasy dla tabeli (ODBC).
CRecordset::Delete
Usuwa bieżący rekord.
virtual void Delete();
Uwagi
Po pomyślnym usunięciu składowe danych pola zestawu rekordów są ustawione na wartość Null i należy jawnie wywołać jedną z Move
funkcji w celu usunięcia usuniętego rekordu. Po wyłączeniu usuniętego rekordu nie można do niego powrócić. Jeśli źródło danych obsługuje transakcje, możesz wykonać Delete
wywołanie części transakcji. Aby uzyskać więcej informacji, zobacz Transaction (ODBC).
Uwaga
Jeśli zaimplementowano pobieranie wierszy zbiorczych, nie można wywołać metody Delete
. Spowoduje to niepowodzenie asercji. Mimo że klasa CRecordset
nie udostępnia mechanizmu aktualizowania zbiorczych wierszy danych, można napisać własne funkcje przy użyciu funkcji SQLSetPos
interfejsu API ODBC . Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Uwaga
Zestaw rekordów musi być aktualizowalny i podczas wywoływania Delete
zestawu rekordów musi istnieć prawidłowy rekord bieżący. W przeciwnym razie wystąpi błąd. Jeśli na przykład usuniesz rekord, ale nie przewijasz go do nowego rekordu przed ponownym wywołaniemDelete
, zgłasza wyjątek CDBExceptionDelete
.
W przeciwieństwie do metody i Edit
wywołanie Delete
metody nie następuje wywołanie metody Update
.AddNew
Jeśli wywołanie Delete
nie powiedzie się, składowe danych pola pozostaną niezmienione.
Przykład
W tym przykładzie pokazano zestaw rekordów utworzony na ramce funkcji. W przykładzie przyjęto założenie, że istnieje m_dbCust
zmienna składowa typu CDatabase
, która jest już połączona ze źródłem danych.
// Create a derived CRecordset object
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();
if (rsCustSet.IsEOF() || !rsCustSet.CanUpdate() ||
!rsCustSet.CanTransact())
{
return;
}
m_dbCust.BeginTrans();
// Perhaps scroll to a new record...
// Delete the current record
rsCustSet.Delete();
// Finished commands for this transaction
if (IDYES == AfxMessageBox(_T("Commit transaction?"), MB_YESNO))
m_dbCust.CommitTrans();
else // User changed mind
m_dbCust.Rollback();
CRecordset::DoBulkFieldExchange
Wywoływane w celu wymiany zbiorczych wierszy danych ze źródła danych do zestawu rekordów. Implementuje wymianę pól rekordów zbiorczych (Bulk RFX).
virtual void DoBulkFieldExchange(CFieldExchange* pFX);
Parametry
pFX
Wskaźnik do CFieldExchange
obiektu. Struktura skonfiguruje już ten obiekt, aby określić kontekst operacji wymiany pól.
Uwagi
Po zaimplementowaniu zbiorczego pobierania wierszy struktura wywołuje tę funkcję składową, aby automatycznie przesyłać dane ze źródła danych do obiektu zestawu rekordów. DoBulkFieldExchange
Wiąże również elementy członkowskie danych parametrów, jeśli istnieją, z symbolami zastępczymi parametrów w ciągu instrukcji SQL dla zaznaczenia zestawu rekordów.
Jeśli pobieranie wierszy zbiorczych nie jest zaimplementowane, struktura wywołuje metodę DoFieldExchange
. Aby zaimplementować pobieranie wierszy zbiorczych, należy określić CRecordset::useMultiRowFetch
opcję parametru dwOptions w funkcji składowej Open
.
Uwaga
DoBulkFieldExchange
jest dostępny tylko wtedy, gdy używasz klasy pochodnej z CRecordset
klasy . Jeśli obiekt zestawu rekordów został utworzony bezpośrednio z CRecordset
usługi , należy wywołać GetFieldValue
funkcję składową, aby pobrać dane.
Wymiana pól rekordów zbiorczych (Bulk RFX) jest podobna do wymiany pól rekordów (RFX). Dane są automatycznie przesyłane ze źródła danych do obiektu zestawu rekordów. Nie można jednak wywołać AddNew
metody , Edit
, Delete
ani Update
przenieść zmian z powrotem do źródła danych. Klasa CRecordset
obecnie nie udostępnia mechanizmu aktualizowania zbiorczych wierszy danych, ale można napisać własne funkcje przy użyciu funkcji SQLSetPos
interfejsu API ODBC .
KlasaWizard nie obsługuje wymiany pól rekordów zbiorczych; dlatego należy ręcznie przesłonić DoBulkFieldExchange
, zapisując wywołania funkcji Bulk RFX. Aby uzyskać więcej informacji na temat tych funkcji, zobacz Funkcje wymiany pól rekordów.
Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC). Aby uzyskać powiązane informacje, zobacz Rekord Field Exchange (RFX).
CRecordset::DoFieldExchange
Wywoływana w celu wymiany danych (w obu kierunkach) między elementami członkowskimi danych pola zestawu rekordów a odpowiednim rekordem w źródle danych. Implementuje wymianę pól rekordów (RFX).
virtual void DoFieldExchange(CFieldExchange* pFX);
Parametry
pFX
Wskaźnik do CFieldExchange
obiektu. Struktura skonfiguruje już ten obiekt, aby określić kontekst operacji wymiany pól.
Uwagi
Gdy pobieranie wierszy zbiorczych nie jest implementowane, platforma wywołuje tę funkcję składową, aby automatycznie wymieniać dane między elementami członkowskimi danych pól obiektu zestawu rekordów i odpowiednimi kolumnami bieżącego rekordu w źródle danych. DoFieldExchange
Wiąże również elementy członkowskie danych parametrów, jeśli istnieją, z symbolami zastępczymi parametrów w ciągu instrukcji SQL dla zaznaczenia zestawu rekordów.
Jeśli pobieranie wierszy zbiorczych jest implementowane, struktura wywołuje metodę DoBulkFieldExchange
. Aby zaimplementować pobieranie wierszy zbiorczych, należy określić CRecordset::useMultiRowFetch
opcję parametru dwOptions
w funkcji składowej Open
.
Uwaga
DoFieldExchange
jest dostępny tylko wtedy, gdy używasz klasy pochodnej z CRecordset
klasy . Jeśli obiekt zestawu rekordów został utworzony bezpośrednio z CRecordset
programu , musisz wywołać funkcję składową GetFieldValue , aby pobrać dane.
Wymiana danych pól, nazywanych wymianą pól rekordów (RFX), działa w obu kierunkach: od elementów członkowskich danych pola obiektu zestawu rekordów do pól rekordu w źródle danych oraz z rekordu w źródle danych do obiektu zestawu rekordów.
Jedyną akcją, którą zwykle należy wykonać, aby zaimplementować DoFieldExchange
klasę pochodnego zestawu rekordów, jest utworzenie klasy za pomocą klasy ClassWizard i określenie nazw i typów danych składowych danych pola. Możesz również dodać kod do zapisu klasy ClassWizard, aby określić składowe danych parametrów lub obsługiwać wszystkie kolumny, które są powiązane dynamicznie. Aby uzyskać więcej informacji, zobacz Zestaw rekordów: dynamiczne wiązanie kolumn danych (ODBC).
Po zadeklarowaniu klasy pochodnego zestawu rekordów za pomocą klasy ClassWizard kreator zapisuje przesłonięcia DoFieldExchange
, co przypomina następujący przykład:
void CCustomer::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
// Macros such as RFX_Text() and RFX_Int() are dependent on the
// type of the member variable, not the type of the field in the database.
// ODBC will try to automatically convert the column value to the requested type
RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);
RFX_Text(pFX, _T("[ContactFirstName]"), m_ContactFirstName);
RFX_Text(pFX, _T("[PostalCode]"), m_PostalCode);
RFX_Text(pFX, _T("[L_Name]"), m_L_Name);
RFX_Long(pFX, _T("[BillingID]"), m_BillingID);
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("Param"), m_strParam);
}
Aby uzyskać więcej informacji na temat funkcji RFX, zobacz Funkcje wymiany pól rekordów.
Aby uzyskać więcej przykładów i szczegółowych informacji na temat DoFieldExchange
programu , zobacz Wymiana pól rekordów: Jak działa RFX. Aby uzyskać ogólne informacje o systemie RFX, zobacz Wymiana pól rekordów.
CRecordset::Edit
Umożliwia zmianę bieżącego rekordu.
virtual void Edit();
Uwagi
Po wywołaniu Edit
metody można zmienić składowe danych pól, bezpośrednio resetując ich wartości. Operacja jest wykonywana po wywołaniu funkcji składowej Update
w celu zapisania zmian w źródle danych.
Uwaga
Jeśli zaimplementowano pobieranie wierszy zbiorczych, nie można wywołać metody Edit
. Spowoduje to niepowodzenie asercji. Mimo że klasa CRecordset
nie udostępnia mechanizmu aktualizowania zbiorczych wierszy danych, można napisać własne funkcje przy użyciu funkcji SQLSetPos
interfejsu API ODBC . Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Edit
zapisuje wartości elementów członkowskich danych zestawu rekordów. Jeśli wywołasz Edit
metodę , wprowadź zmiany, a następnie wywołaj Edit
ponownie wartości rekordu zostaną przywrócone do wartości, które były przed pierwszym Edit
wywołaniem.
W niektórych przypadkach możesz zaktualizować kolumnę, zmieniając ją na wartość Null (bez danych). W tym celu wywołaj metodę SetFieldNull
z parametrem TRUE, aby oznaczyć pole Null. Spowoduje to również zaktualizowanie kolumny. Jeśli chcesz, aby pole zostało zapisane w źródle danych, mimo że jego wartość nie została zmieniona, wywołaj metodę SetFieldDirty
z parametrem TRUE. Działa to nawet wtedy, gdy pole ma wartość Null.
Jeśli źródło danych obsługuje transakcje, możesz wykonać Edit
wywołanie części transakcji. Wywołaj połączenie CDatabase::BeginTrans
przed wywołaniem Edit
i po otwarciu zestawu rekordów. Ponadto wywołanie CDatabase::CommitTrans
nie jest zastępowane wywołaniem wywołania Update
w celu ukończenia Edit
operacji. Aby uzyskać więcej informacji na temat transakcji, zobacz klasa CDatabase
.
W zależności od bieżącego trybu blokowania aktualizowany rekord może być zablokowany Edit
do momentu wywołania Update
lub przewinięcia do innego rekordu Edit
lub może być zablokowany tylko podczas wywołania. Możesz zmienić tryb blokowania za pomocą SetLockingMode
polecenia .
Poprzednia wartość bieżącego rekordu zostanie przywrócona, jeśli przewiniesz do nowego rekordu przed wywołaniem metody Update
. Element CDBException
jest zgłaszany, jeśli wywołasz Edit
zestaw rekordów, którego nie można zaktualizować lub jeśli nie ma bieżącego rekordu.
Aby uzyskać więcej informacji, zobacz artykuły Transaction (ODBC) i Recordset: Locking Records (ODBC).
Przykład
// To edit a record, first set up the edit buffer
rsCustSet.Edit();
// Then edit field data members for the record
rsCustSet.m_BillingID = 2795;
rsCustSet.m_ContactFirstName = _T("Jones Mfg");
// Finally, complete the operation
if (!rsCustSet.Update())
{
// Handle the failure to update
AfxMessageBox(_T("Couldn't update record!"));
}
CRecordset::FlushResultSet
Pobiera następny zestaw wyników wstępnie zdefiniowanego zapytania (procedura składowana), jeśli istnieje wiele zestawów wyników.
BOOL FlushResultSet();
Wartość zwracana
Nonzero, jeśli ma zostać pobranych więcej zestawów wyników; w przeciwnym razie 0.
Uwagi
Wywołaj metodę FlushResultSet
tylko wtedy, gdy skończysz z kursorem w bieżącym zestawie wyników. Po pobraniu następnego zestawu wyników przez wywołanie FlushResultSet
metody kursor nie jest prawidłowy w tym zestawie wyników. Po wywołaniu funkcji składowej należy wywołać FlushResultSet
MoveNext
funkcję .
Jeśli wstępnie zdefiniowane zapytanie używa parametru wyjściowego lub parametrów wejściowych/wyjściowych, należy wywołać FlushResultSet
metodę , dopóki nie zwróci FALSE
wartości (wartość 0), aby uzyskać te wartości parametrów.
FlushResultSet
wywołuje funkcję SQLMoreResults
interfejsu API ODBC . Jeśli SQLMoreResults
zwraca SQL_ERROR
wartość lub SQL_INVALID_HANDLE
, FlushResultSet
zostanie zgłoszony wyjątek. Aby uzyskać więcej informacji o SQLMoreResults
systemie , zobacz Zestaw Windows SDK.
Procedura składowana musi zawierać pola powiązane, jeśli chcesz wywołać metodę FlushResultSet
.
Przykład
Poniższy kod zakłada, że COutParamRecordset
jest obiektem pochodnym opartym CRecordset
na wstępnie zdefiniowanym zapytaniu z parametrem wejściowym i parametrem wyjściowym oraz z wieloma zestawami wyników. Zwróć uwagę na strukturę DoFieldExchange
przesłonięcia.
// DoFieldExchange override
//
// Only necessary to handle parameter bindings.
// Don't use CRecordset-derived class with bound
// fields unless all result sets have same schema
// OR there is conditional binding code.
void CCourses::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Long(pFX, _T("Param1"), m_nCountParam);
// The "Param1" name here is a dummy name
// that is never used
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("Param2"), m_strNameParam);
// The "Param2" name here is a dummy name
// that is never used
}
// Assume db is an already open CDatabase object
CCourses rs(&m_dbCust);
rs.m_strNameParam = _T("History");
// Get the first result set
// NOTE: SQL Server requires forwardOnly cursor
// type for multiple rowset returning stored
// procedures
rs.Open(CRecordset::forwardOnly,
_T("{? = CALL GetCourses( ? )}"),
CRecordset::readOnly);
// Loop through all the data in the first result set
while (!rs.IsEOF())
{
CString strFieldValue;
for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
{
rs.GetFieldValue(nIndex, strFieldValue);
// TO DO: Use field value string.
}
rs.MoveNext();
}
// Retrieve other result sets...
while (rs.FlushResultSet())
{
// must call MoveNext because cursor is invalid
rs.MoveNext();
while (!rs.IsEOF())
{
CString strFieldValue;
for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
{
rs.GetFieldValue(nIndex, strFieldValue);
// TO DO: Use field value string.
}
rs.MoveNext();
}
}
// All result sets have been flushed. Cannot
// use the cursor, but the output parameter,
// m_nCountParam, has now been written.
// Note that m_nCountParam is not valid until
// CRecordset::FlushResultSet has returned FALSE,
// indicating no more result sets will be returned.
// TO DO: Use m_nCountParam
// Cleanup
rs.Close();
CRecordset::GetBookmark
Uzyskuje wartość zakładki dla bieżącego rekordu.
void GetBookmark(CDBVariant& varBookmark);
Parametry
varBookmark
Odwołanie do CDBVariant
obiektu reprezentującego zakładkę w bieżącym rekordzie.
Uwagi
Aby określić, czy zakładki są obsługiwane w zestawie rekordów, wywołaj metodę CanBookmark
. Aby udostępnić zakładki, jeśli są obsługiwane, należy ustawić CRecordset::useBookmarks
opcję w parametrze dwOptions
funkcji składowej Open
.
Uwaga
Jeśli zakładki są nieobsługiwane lub niedostępne, wywołanie GetBookmark
spowoduje zgłoszenie wyjątku. Zakładki nie są obsługiwane w zestawach rekordów tylko do przekazywania.
GetBookmark
przypisuje wartość zakładki dla bieżącego rekordu do CDBVariant
obiektu. Aby powrócić do tego rekordu w dowolnym momencie po przeniesieniu do innego rekordu, wywołaj metodę SetBookmark
z odpowiednim CDBVariant
obiektem.
Uwaga
Po niektórych operacjach zestawu rekordów zakładki mogą nie być już prawidłowe. Jeśli na przykład wywołasz metodę GetBookmark
Requery
, może nie być możliwe powrót do rekordu za pomocą polecenia SetBookmark
. ZadzwońCDatabase::GetBookmarkPersistence
, aby sprawdzić, czy możesz bezpiecznie zadzwonić.SetBookmark
Aby uzyskać więcej informacji na temat nawigacji zakładek i zestawów rekordów, zobacz artykuły Zestaw rekordów: zakładki i pozycje bezwzględne (ODBC) i Zestaw rekordów: Przewijanie (ODBC).
CRecordset::GetDefaultConnect
Wywołana w celu uzyskania domyślnej parametry połączenia.
virtual CString GetDefaultConnect();
Wartość zwracana
Obiekt CString
zawierający parametry połączenia domyślną.
Uwagi
Struktura wywołuje tę funkcję składową, aby uzyskać domyślną parametry połączenia dla źródła danych, na którym jest oparty zestaw rekordów. ClassWizard
implementuje tę funkcję, identyfikując to samo źródło danych używane w programie w ClassWizard
celu uzyskania informacji o tabelach i kolumnach. Prawdopodobnie wygodnie będzie polegać na tym domyślnym połączeniu podczas tworzenia aplikacji. Jednak domyślne połączenie może nie być odpowiednie dla użytkowników aplikacji. Jeśli tak jest, należy ponownie zaimplementować tę funkcję, odrzucając ClassWizard
wersję .s. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz Źródło danych (ODBC).
CRecordset::GetDefaultSQL
Wywoływana w celu pobrania domyślnego ciągu SQL do wykonania.
virtual CString GetDefaultSQL();
Wartość zwracana
Element CString
zawierający domyślną instrukcję SQL.
Uwagi
Struktura wywołuje tę funkcję składową, aby uzyskać domyślną instrukcję SQL, na której jest oparty zestaw rekordów. Może to być nazwa tabeli lub instrukcja SQL SELECT
.
Pośrednio zdefiniuj domyślną instrukcję SQL, deklarując klasę zestawu rekordów za ClassWizard
pomocą polecenia i ClassWizard
wykonując to zadanie.
Jeśli potrzebujesz ciągu instrukcji SQL do własnego użycia, wywołaj metodę GetSQL
, która zwraca instrukcję SQL używaną do wybierania rekordów zestawu rekordów podczas otwierania. Domyślny ciąg SQL można edytować w zastąpieniu GetDefaultSQL
klasy . Można na przykład określić wywołanie wstępnie zdefiniowanego zapytania przy użyciu instrukcji CALL
. (Należy jednak pamiętać, że jeśli edytujesz GetDefaultSQL
element , należy również zmodyfikować m_nFields
, aby dopasować liczbę kolumn w źródle danych).
Aby uzyskać więcej informacji, zobacz Zestaw rekordów: deklarowanie klasy dla tabeli (ODBC).
Uwaga
Nazwa tabeli będzie pusta, jeśli platforma nie może zidentyfikować nazwy tabeli, jeśli podano wiele nazw tabel lub jeśli CALL
nie można zinterpretować instrukcji. W przypadku używania CALL
instrukcji nie wstaw biały znak między nawiasem klamrowym a CALL
słowem kluczowym ani przed nawiasem klamrowym SELECT
ani przed SELECT
słowem kluczowym w instrukcji .
CRecordset::GetFieldValue
Pobiera dane pól w bieżącym rekordzie.
void GetFieldValue(
LPCTSTR lpszName,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE);
void GetFieldValue(
LPCTSTR lpszName,
CStringA& strValue
);
void GetFieldValue(
LPCTSTR lpszName,
CStringW& strValue
);
void GetFieldValue(
short nIndex,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE);
void GetFieldValue(
short nIndex,
CStringA& strValue);
void GetFieldValue(
short nIndex,
CStringW& strValue);
Parametry
lpszName
Nazwa pola.
varValue
Odwołanie do CDBVariant
obiektu, który będzie przechowywać wartość pola.
nFieldType
Typ danych ODBC C pola. Używając wartości domyślnej , DEFAULT_FIELD_TYPE
wymusza GetFieldValue
określenie typu danych C z typu danych SQL na podstawie poniższej tabeli. W przeciwnym razie można określić typ danych bezpośrednio lub wybrać zgodny typ danych; na przykład można przechowywać dowolny typ danych w pliku SQL_C_CHAR
.
Typ danych języka C | Typ danych SQL |
---|---|
SQL_C_BIT |
SQL_BIT |
SQL_C_UTINYINT |
SQL_TINYINT |
SQL_C_SSHORT |
SQL_SMALLINT |
SQL_C_SLONG |
SQL_INTEGER |
SQL_C_FLOAT |
SQL_REAL |
SQL_C_DOUBLE |
SQL_FLOATSQL_DOUBLE |
SQL_C_TIMESTAMP |
SQL_DATESQL_TIMESQL_TIMESTAMP |
SQL_C_CHAR |
SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR |
SQL_C_BINARY |
SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY |
Aby uzyskać więcej informacji na temat typów danych ODBC, zobacz tematy "Typy danych SQL" i "Typy danych C" w dodatku D zestawu Windows SDK.
nIndex
Indeks na podstawie zera pola.
strValue
Odwołanie do CString
obiektu, który będzie przechowywać wartość pola przekonwertowaną na tekst, niezależnie od typu danych pola.
Uwagi
Możesz wyszukać pole według nazwy lub indeksu. Wartość pola można przechowywać w CDBVariant
obiekcie lub CString
obiekcie.
Jeśli zaimplementowano pobieranie wierszy zbiorczych, bieżący rekord jest zawsze umieszczony na pierwszym rekordzie w zestawie wierszy. Aby użyć GetFieldValue
rekordu w danym zestawie wierszy, należy najpierw wywołać SetRowsetCursorPosition
funkcję składową, aby przenieść kursor do żądanego wiersza w tym zestawie wierszy. Następnie wywołaj GetFieldValue
ten wiersz. Aby zaimplementować pobieranie wierszy zbiorczych, należy określić CRecordset::useMultiRowFetch
opcję parametru dwOptions
w funkcji składowej Open
.
Możesz użyć GetFieldValue
polecenia , aby dynamicznie pobierać pola w czasie wykonywania, a nie statycznie wiązać je w czasie projektowania. Jeśli na przykład zadeklarowano obiekt zestawu rekordów bezpośrednio z CRecordset
programu , musisz użyć GetFieldValue
polecenia , aby pobrać dane pola; wymiana pól rekordów (RFX) lub wymiana pól rekordów zbiorczych (Bulk RFX), nie jest zaimplementowana.
Uwaga
Jeśli zadeklarujesz obiekt zestawu rekordów bez wyprowadzania z CRecordset
elementu , nie masz załadowanej biblioteki kursorów ODBC. Biblioteka kursorów wymaga, aby zestaw rekordów miał co najmniej jedną powiązaną kolumnę; jednak w przypadku bezpośredniego użycia CRecordset
żadna z kolumn nie jest powiązana. Funkcje CDatabase::OpenEx
składowe i CDatabase::Open
określają, czy biblioteka kursorów zostanie załadowana.
GetFieldValue
wywołuje funkcję SQLGetData
interfejsu API ODBC . Jeśli sterownik zwraca wartość SQL_NO_TOTAL dla rzeczywistej długości wartości pola, GetFieldValue
zgłasza wyjątek. Aby uzyskać więcej informacji o SQLGetData
systemie , zobacz Zestaw Windows SDK.
Przykład
Poniższy przykładowy kod ilustruje wywołania GetFieldValue
obiektu zestawu rekordów zadeklarowanego bezpośrednio z CRecordset
klasy .
// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);
// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));
// Create a CDBVariant object to
// store field data
CDBVariant varValue;
// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{
for (short index = 0; index < nFields; index++)
{
rs.GetFieldValue(index, varValue);
// do something with varValue
}
rs.MoveNext();
}
rs.Close();
db.Close();
Uwaga
W przeciwieństwie do klasy CDaoRecordset
DAO , CRecordset
nie ma funkcji składowej SetFieldValue
. Jeśli utworzysz obiekt bezpośrednio z CRecordset
usługi , będzie on skutecznie tylko do odczytu.
Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
CRecordset::GetODBCFieldCount
Pobiera łączną liczbę pól w obiekcie zestawu rekordów.
short GetODBCFieldCount() const;
Wartość zwracana
Liczba pól w zestawie rekordów.
Uwagi
Aby uzyskać więcej informacji na temat tworzenia zestawów rekordów, zobacz Zestaw rekordów: tworzenie i zamykanie zestawów rekordów (ODBC).
CRecordset::GetODBCFieldInfo
Uzyskuje informacje o polach w zestawie rekordów.
void GetODBCFieldInfo(
LPCTSTR lpszName,
CODBCFieldInfo& fieldinfo);
void GetODBCFieldInfo(
short nIndex,
CODBCFieldInfo& fieldinfo);
Parametry
lpszName
Nazwa pola.
fieldinfo
Odwołanie do CODBCFieldInfo
struktury.
nIndex
Indeks na podstawie zera pola.
Uwagi
Jedna wersja funkcji umożliwia wyszukanie pola według nazwy. Druga wersja umożliwia wyszukanie pola według indeksu.
Aby uzyskać opis zwracanych informacji, zobacz CODBCFieldInfo
strukturę.
Aby uzyskać więcej informacji na temat tworzenia zestawów rekordów, zobacz Zestaw rekordów: tworzenie i zamykanie zestawów rekordów (ODBC).
CRecordset::GetRecordCount
Określa rozmiar zestawu rekordów.
long GetRecordCount() const;
Wartość zwracana
Liczba rekordów w zestawie rekordów; 0, jeśli zestaw rekordów nie zawiera żadnych rekordów; lub -1, jeśli nie można określić liczby rekordów.
Uwagi
Uwaga
Liczba rekordów jest utrzymywana jako "wysoki znak wody", rekord o najwyższym numerze, który jest jeszcze postrzegany, gdy użytkownik przechodzi przez rekordy. Całkowita liczba rekordów jest znana tylko po tym, jak użytkownik przeniósł się poza ostatni rekord. Ze względu na wydajność liczba nie jest aktualizowana podczas wywoływania metody MoveLast
. Aby liczyć rekordy samodzielnie, należy wywołać MoveNext
wielokrotnie, dopóki IsEOF
nie zwróci wartości nonzero. Dodanie rekordu za pomocą metody CRecordset:AddNew
i Update
zwiększenie liczby; usunięcie rekordu za pomocą metody CRecordset::Delete
zmniejsza liczbę.
CRecordset::GetRowsetSize
Uzyskuje bieżące ustawienie liczby wierszy, które mają zostać pobrane podczas danego pobierania.
DWORD GetRowsetSize() const;
Wartość zwracana
Liczba wierszy do pobrania podczas danego pobierania.
Uwagi
Jeśli używasz zbiorczego pobierania wierszy, domyślny rozmiar zestawu wierszy po otwarciu zestawu rekordów wynosi 25; w przeciwnym razie jest to 1.
Aby zaimplementować pobieranie wierszy zbiorczych, należy określić CRecordset::useMultiRowFetch
opcję w parametrze dwOptions
funkcji składowej Open
. Aby zmienić ustawienie rozmiaru zestawu wierszy, wywołaj metodę SetRowsetSize
.
Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
CRecordset::GetRowsFetched
Określa, ile rekordów zostało pobranych po pobraniu.
DWORD GetRowsFetched() const;
Wartość zwracana
Liczba wierszy pobranych ze źródła danych po danym pobraniu.
Uwagi
Jest to przydatne podczas implementowania pobierania wierszy zbiorczych. Rozmiar zestawu wierszy zwykle wskazuje, ile wierszy zostanie pobranych z pobierania. Jednak łączna liczba wierszy w zestawie rekordów wpływa również na liczbę wierszy, które zostaną pobrane w zestawie wierszy. Jeśli na przykład zestaw rekordów ma 10 rekordów z ustawieniem rozmiaru zestawu wierszy o rozmiarze czterech, pętla przez wywołanie MoveNext
zestawu rekordów spowoduje, że końcowy zestaw wierszy ma tylko dwa rekordy.
Aby zaimplementować pobieranie wierszy zbiorczych, należy określić CRecordset::useMultiRowFetch
opcję w parametrze dwOptions funkcji składowej Open
. Aby określić rozmiar zestawu wierszy, wywołaj metodę SetRowsetSize.
Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Przykład
CMultiCustomer rs(&m_dbCust);
// Set the rowset size
rs.SetRowsetSize(5);
// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);
// loop through the recordset by rowsets
while (!rs.IsEOF())
{
for (int rowCount = 0; rowCount < (int)rs.GetRowsFetched(); rowCount++)
{
// do something
}
rs.MoveNext();
}
rs.Close();
CRecordset::GetRowStatus
Uzyskuje stan wiersza w bieżącym zestawie wierszy.
WORD GetRowStatus(WORD wRow) const;
Parametry
wRow
Pozycja jednego wiersza w bieżącym zestawie wierszy. Ta wartość może zawierać zakres od 1 do rozmiaru zestawu wierszy.
Wartość zwracana
Wartość stanu wiersza. Aby uzyskać szczegółowe informacje, zobacz Uwagi.
Uwagi
GetRowStatus
Zwraca wartość, która wskazuje dowolną zmianę stanu na wiersz od czasu ostatniego pobrania ze źródła danych lub że nie został pobrany żaden wiersz odpowiadający wRow
mu. W poniższej tabeli wymieniono możliwe wartości zwracane.
Wartość stanu | opis |
---|---|
SQL_ROW_SUCCESS |
Wiersz jest niezmieniony. |
SQL_ROW_UPDATED |
Wiersz został zaktualizowany. |
SQL_ROW_DELETED |
Wiersz został usunięty. |
SQL_ROW_ADDED |
Wiersz został dodany. |
SQL_ROW_ERROR |
Wiersz jest niemożliwy do pobrania z powodu błędu. |
SQL_ROW_NOROW |
Żaden wiersz nie odpowiada .wRow |
Aby uzyskać więcej informacji, zobacz funkcję SQLExtendedFetch
interfejsu API ODBC w zestawie Windows SDK.
CRecordset::GetStatus
Określa indeks bieżącego rekordu w zestawie rekordów i określa, czy ostatni rekord został zaobserwowany.
void GetStatus(CRecordsetStatus& rStatus) const;
Parametry
rStatus
Odwołanie do CRecordsetStatus
obiektu. Aby uzyskać więcej informacji, zobacz Uwagi.
Uwagi
CRecordset
próbuje śledzić indeks, ale w pewnych okolicznościach może to nie być możliwe. Zobacz GetRecordCount
, aby zapoznać się z wyjaśnieniem.
Struktura CRecordsetStatus
ma następującą formę:
struct CRecordsetStatus
{
long m_lCurrentRecord;
BOOL m_bRecordCountFinal;
};
Obaj CRecordsetStatus
członkowie mają następujące znaczenie:
m_lCurrentRecord
Zawiera zerowy indeks bieżącego rekordu w zestawie rekordów, jeśli jest znany. Jeśli nie można określić indeksu, ten element członkowski zawieraAFX_CURRENT_RECORD_UNDEFINED
wartość (-2). JeśliIsBOF
ma wartość TRUE (pusty zestaw rekordów lub spróbuj przewinąć przed pierwszym rekordem),m_lCurrentRecord
zostanie ustawiona wartośćAFX_CURRENT_RECORD_BOF
(-1). Jeśli na pierwszym rekordzie jest ustawiona wartość 0, drugi rekord 1 itd.m_bRecordCountFinal
Nonzero, jeśli została określona łączna liczba rekordów w zestawie rekordów. Ogólnie rzecz biorąc, należy to osiągnąć, zaczynając od początku zestawu rekordów i wywołującMoveNext
, dopókiIsEOF
nie zwraca wartości nonzero. Jeśli ten element członkowski ma wartość zero, liczba rekordów zwracana przezGetRecordCount
wartość , jeśli nie jest równa -1, jest tylko liczbą "wysokich limitów" rekordów.
CRecordset::GetSQL
Wywołaj tę funkcję składową, aby uzyskać instrukcję SQL, która została użyta do wybrania rekordów zestawu rekordów podczas jego otwierania.
const CString& GetSQL() const;
Wartość zwracana
Odwołanie const
do elementu CString
zawierającego instrukcję SQL.
Uwagi
Zazwyczaj będzie to instrukcja SQL SELECT
. Ciąg zwracany przez GetSQL
element jest tylko do odczytu.
Ciąg zwracany przez GetSQL
element jest zwykle inny niż dowolny ciąg, który mógł zostać przekazany do zestawu rekordów w parametrze lpszSQL
do funkcji składowej Open
. Jest to spowodowane tym, że zestaw rekordów tworzy pełną instrukcję SQL opartą na tym, co przekazano do Open
elementu , określonego za pomocą ClassWizard
polecenia , co mogło zostać określone w m_strFilter
elementach członkowskich danych i m_strSort
oraz wszystkich określonych parametrów. Aby uzyskać szczegółowe informacje o tym, jak zestaw rekordów tworzy tę instrukcję SQL, zobacz Zestaw rekordów: Jak zestawy rekordów wybierają rekordy (ODBC).
Uwaga
Wywołaj tę funkcję składową dopiero po wywołaniu metody Open
.
CRecordset::GetTableName
Pobiera nazwę tabeli SQL, na której jest oparte zapytanie zestawu rekordów.
const CString& GetTableName() const;
Wartość zwracana
Odwołanie const
do elementu CString
zawierającego nazwę tabeli, jeśli zestaw rekordów jest oparty na tabeli; w przeciwnym razie pusty ciąg.
Uwagi
GetTableName
jest prawidłowy tylko wtedy, gdy zestaw rekordów jest oparty na tabeli, a nie sprzężeniu wielu tabel lub wstępnie zdefiniowanego zapytania (procedura składowana). Nazwa jest tylko do odczytu.
Uwaga
Wywołaj tę funkcję składową dopiero po wywołaniu metody Open
.
CRecordset::IsBOF
Zwraca wartość nonzero, jeśli zestaw rekordów został umieszczony przed pierwszym rekordem. Brak bieżącego rekordu.
BOOL IsBOF() const;
Wartość zwracana
Nonzero, jeśli zestaw rekordów nie zawiera żadnych rekordów lub jeśli przewijane do tyłu przed pierwszym rekordem; w przeciwnym razie 0.
Uwagi
Wywołaj tę funkcję składową przed przewinięciem z rekordu do rekordu, aby dowiedzieć się, czy przed pierwszym rekordem zestawu rekordów. Można również użyć IsBOF
polecenia oraz IsEOF
określić, czy zestaw rekordów zawiera jakiekolwiek rekordy, czy też jest pusty. Natychmiast po wywołaniu Open
metody , jeśli zestaw rekordów nie zawiera żadnych rekordów, IsBOF
zwraca wartość nonzero. Po otwarciu zestawu rekordów, który ma co najmniej jeden rekord, pierwszy rekord jest bieżącym rekordem i IsBOF
zwraca wartość 0.
Jeśli pierwszy rekord jest bieżącym rekordem i wywołasz MovePrev
metodę , IsBOF
zwróci wartość nonzero. Jeśli IsBOF
zwraca wartość niezerową i wywołujesz MovePrev
metodę , wystąpi błąd. Jeśli IsBOF
zwraca wartość niezerową, bieżący rekord jest niezdefiniowany, a każda akcja, która wymaga bieżącego rekordu, spowoduje błąd.
Przykład
W tym przykładzie użyto IsBOF
instrukcji i IsEOF
w celu wykrycia limitów zestawu rekordów podczas przewijania kodu przez zestaw rekordów w obu kierunkach.
// Open a recordset; first record is current
// Open a recordset; first record is current
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();
if(rsCustSet.IsBOF())
return;
// The recordset is empty
// Scroll to the end of the recordset, past
// the last record, so no record is current
while (!rsCustSet.IsEOF())
rsCustSet.MoveNext();
// Move to the last record
rsCustSet.MoveLast();
// Scroll to beginning of the recordset, before
// the first record, so no record is current
while(!rsCustSet.IsBOF())
rsCustSet.MovePrev();
// First record is current again
rsCustSet.MoveFirst();
CRecordset::IsDeleted
Określa, czy bieżący rekord został usunięty.
BOOL IsDeleted() const;
Wartość zwracana
Niezerowe, jeśli zestaw rekordów jest umieszczony na usuniętym rekordzie; w przeciwnym razie 0.
Uwagi
Jeśli przewiniesz rekord i IsDeleted
zwrócisz TRUE
wartość (niezerową), musisz przewinąć do innego rekordu, zanim będzie można wykonać inne operacje zestawu rekordów.
Wynik IsDeleted
zależy od wielu czynników, takich jak typ zestawu rekordów, czy zestaw rekordów jest aktualizowalny, czy określono CRecordset::skipDeletedRecords
opcję podczas otwierania zestawu rekordów, czy pakiety sterowników usunięte rekordy i czy istnieje wielu użytkowników.
Aby uzyskać więcej informacji na temat CRecordset::skipDeletedRecords
pakowania sterowników i ich pakowania, zobacz funkcję Otwórz składową.
Uwaga
Jeśli zaimplementowano pobieranie wierszy zbiorczych, nie należy wywoływać metody IsDeleted
. Zamiast tego wywołaj funkcję składową GetRowStatus . Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
CRecordset::IsEOF
Zwraca wartość nonzero, jeśli zestaw rekordów został umieszczony po ostatnim rekordzie. Brak bieżącego rekordu.
BOOL IsEOF() const;
Wartość zwracana
Niezerowe, jeśli zestaw rekordów nie zawiera żadnych rekordów lub jeśli przewinął się poza ostatni rekord; w przeciwnym razie 0.
Uwagi
Wywołaj tę funkcję składową, przewijając rekord do rekordu, aby dowiedzieć się, czy ostatni rekord zestawu rekordów przekroczył. Można również użyć IsEOF
polecenia , aby określić, czy zestaw rekordów zawiera jakiekolwiek rekordy, czy też jest pusty. Natychmiast po wywołaniu Open
metody , jeśli zestaw rekordów nie zawiera żadnych rekordów, IsEOF
zwraca wartość nonzero. Po otwarciu zestawu rekordów, który ma co najmniej jeden rekord, pierwszy rekord jest bieżącym rekordem i IsEOF
zwraca wartość 0.
Jeśli ostatni rekord jest bieżącym rekordem podczas wywoływania MoveNext
metody , IsEOF
zwróci wartość nonzero. Jeśli IsEOF
zwraca wartość niezerową i wywołujesz MoveNext
metodę , wystąpi błąd. Jeśli IsEOF
zwraca wartość niezerową, bieżący rekord jest niezdefiniowany, a każda akcja, która wymaga bieżącego rekordu, spowoduje błąd.
Przykład
Zobacz przykład dla elementu IsBOF
.
CRecordset::IsFieldDirty
Określa, czy określony element członkowski danych pola został zmieniony od czasu Edit
lub AddNew
został wywołany.
BOOL IsFieldDirty(void* pv);
Parametry
pv
Wskaźnik do elementu członkowskiego danych pola, którego stan chcesz sprawdzić lub NULL
określić, czy któreś z pól są zanieczyszczone.
Wartość zwracana
Niezero, jeśli określony element członkowski danych pola zmienił się od wywołania AddNew
lub Edit
; w przeciwnym razie 0.
Uwagi
Dane we wszystkich zanieczyszczonych elementach członkowskich danych pola zostaną przesłane do rekordu w źródle danych, gdy bieżący rekord zostanie zaktualizowany przez wywołanie Update
funkcji CRecordset
elementu członkowskiego (po wywołaniu metody Edit
lub AddNew
).
Uwaga
Ta funkcja składowa nie ma zastosowania w zestawach rekordów korzystających z zbiorczego pobierania wierszy. Jeśli zaimplementowano pobieranie wierszy zbiorczych, IsFieldDirty
zawsze zwraca wartość FALSE i spowoduje niepowodzenie asercji. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Wywołanie IsFieldDirty
spowoduje zresetowanie efektów poprzednich wywołań do SetFieldDirty , ponieważ stan brudnego pola jest ponownie szacowany. AddNew
W przypadku, gdy bieżąca wartość pola różni się od wartości pseudo null, stan pola jest ustawiony jako zanieczyszczony. Edit
W przypadku, gdy wartość pola różni się od wartości buforowanej, stan pola jest ustawiony jako zanieczyszczony.
IsFieldDirty
jest implementowany za pomocą programu DoFieldExchange
.
Aby uzyskać więcej informacji na temat zanieczyszczonej flagi, zobacz Zestaw rekordów: Jak zestawy rekordów wybierają rekordy (ODBC).
CRecordset::IsFieldNull
Zwraca wartość nonzero, jeśli określone pole w bieżącym rekordzie ma wartość Null (nie ma wartości).
BOOL IsFieldNull(void* pv);
Parametry
pv
Wskaźnik do elementu członkowskiego danych pola, którego stan chcesz sprawdzić, lub NULL
określić, czy którekolwiek z pól ma wartość Null.
Wartość zwracana
Niezerowe, jeśli określony element członkowski danych pola jest oflagowany jako null; w przeciwnym razie 0.
Uwagi
Wywołaj tę funkcję składową, aby określić, czy określony element członkowski danych pola zestawu rekordów został oflagowany jako null. (W terminologii bazy danych wartość Null oznacza "brak wartości" i nie jest taka sama jak NULL
w języku C++). Jeśli element członkowski danych pola jest oznaczony jako Null, jest interpretowany jako kolumna bieżącego rekordu, dla którego nie ma wartości.
Uwaga
Ta funkcja składowa nie ma zastosowania w zestawach rekordów korzystających z zbiorczego pobierania wierszy. Jeśli zaimplementowano pobieranie wierszy zbiorczych, IsFieldNull
zawsze zostanie zwrócona FALSE
i spowoduje niepowodzenie asercji. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
IsFieldNull
jest implementowany za pomocą programu DoFieldExchange
.
CRecordset::IsFieldNullable
Zwraca wartość nonzero, jeśli określone pole w bieżącym rekordzie można ustawić na wartość Null (bez wartości).
BOOL IsFieldNullable(void* pv);
Parametry
pv
Wskaźnik do elementu członkowskiego danych pola, którego stan chcesz sprawdzić, lub NULL
określić, czy którekolwiek z pól można ustawić na wartość Null.
Uwagi
Wywołaj tę funkcję składową, aby określić, czy określony element członkowski danych pola jest "dopuszczalny do wartości null" (można ustawić wartość null; Język C++ NULL
nie jest taki sam jak null, co w terminologii bazy danych oznacza "brak wartości").
Uwaga
Jeśli zaimplementowano pobieranie wierszy zbiorczych, nie można wywołać metody IsFieldNullable
. Zamiast tego wywołaj funkcję składową GetODBCFieldInfo
, aby określić, czy można ustawić pole na wartość Null. Zawsze można wywołać metodę GetODBCFieldInfo
, niezależnie od tego, czy zaimplementowano pobieranie wierszy zbiorczych. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Pole, które nie może mieć wartości Null, musi mieć wartość . Jeśli spróbujesz ustawić takie pole na wartość Null podczas dodawania lub aktualizowania rekordu, źródło danych odrzuca dodanie lub aktualizację i Update
zgłosi wyjątek. Wyjątek występuje podczas wywoływania Update
metody , a nie podczas wywoływania metody SetFieldNull
.
Użycie NULL
polecenia dla pierwszego argumentu funkcji spowoduje zastosowanie funkcji tylko do outputColumn
pól, a nie param
pól. Na przykład wywołanie
SetFieldNull(NULL);
spowoduje ustawienie tylko outputColumn
pól na NULL
; param
pola nie będą miały wpływu.
Aby pracować nad param
polami, musisz podać rzeczywisty adres osoby param
, nad którą chcesz pracować, na przykład:
SetFieldNull(&m_strParam);
Oznacza to, że nie można ustawić wszystkich param
pól na NULL
, tak jak w przypadku outputColumn
pól.
IsFieldNullable
jest implementowany za pośrednictwem programu DoFieldExchange.
CRecordset::IsOpen
Określa, czy zestaw rekordów jest już otwarty.
BOOL IsOpen() const;
Wartość zwracana
Niezero, jeśli wcześniej wywoływano funkcję obiektu Open
zestawu rekordów lub Requery
składową, a zestaw rekordów nie został zamknięty; w przeciwnym razie 0.
CRecordset::m_hstmt
Zawiera uchwyt do struktury danych instrukcji ODBC typu HSTMT
, skojarzony z zestawem rekordów.
Uwagi
Każde zapytanie do źródła danych ODBC jest skojarzone z elementem HSTMT
.
Uwaga
Nie należy używać m_hstmt
przed Open
wywołaniami.
Zwykle nie trzeba uzyskiwać bezpośredniego dostępu do obiektu HSTMT
, ale może być potrzebny do bezpośredniego wykonywania instrukcji SQL. Funkcja ExecuteSQL
składowa klasy CDatabase
udostępnia przykład użycia klasy m_hstmt
.
CRecordset::m_nFields
Zawiera liczbę składowych danych pól w klasie zestawu rekordów; oznacza to, że liczba kolumn wybranych przez zestaw rekordów ze źródła danych.
Uwagi
Konstruktor klasy zestawu rekordów musi zainicjować m_nFields
poprawną liczbę. Jeśli pobieranie wierszy zbiorczych nie zostało zaimplementowane, ClassWizard
zapisuje tę inicjację podczas jej używania do deklarowania klasy zestawu rekordów. Możesz również napisać go ręcznie.
Struktura używa tej liczby do zarządzania interakcją między elementami członkowskimi danych pól i odpowiednimi kolumnami bieżącego rekordu w źródle danych.
Uwaga
Ta liczba musi odpowiadać liczbie "kolumn wyjściowych" zarejestrowanych w DoFieldExchange
parametrze lub DoBulkFieldExchange
po wywołaniu parametru CFieldExchange::outputColumn
SetFieldType
.
Kolumny można powiązać dynamicznie, jak wyjaśniono w artykule "Zestaw rekordów: dynamiczne wiązanie kolumn danych". W tym celu należy zwiększyć liczbę, m_nFields
aby odzwierciedlać liczbę wywołań funkcji RFX lub Bulk RFX w DoFieldExchange
funkcji lub DoBulkFieldExchange
składowej dla kolumn powiązanych dynamicznie.
Aby uzyskać więcej informacji, zobacz artykuły Zestaw rekordów: dynamiczne wiązanie kolumn danych (ODBC) i zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Przykład
zobacz Wymiana pól rekordów: korzystanie z narzędzia RFX.
CRecordset::m_nParams
Zawiera liczbę składowych danych parametrów w klasie zestawu rekordów; oznacza to, że liczba parametrów przekazywanych z zapytaniem zestawu rekordów.
Uwagi
Jeśli klasa zestawu rekordów ma jakiekolwiek składowe danych parametrów, konstruktor klasy musi zainicjować m_nParams
poprawną liczbę. Wartość domyślna m_nParams
to 0. Jeśli dodasz składowe danych parametrów (które należy wykonać ręcznie), musisz również ręcznie dodać inicjację w konstruktorze klasy, aby odzwierciedlić liczbę parametrów (które muszą być co najmniej tak duże, jak liczba symboli zastępczych "" w ciągu m_strFilter
lub m_strSort
).
Platforma używa tej liczby, gdy sparametryzuje zapytanie zestawu rekordów.
Uwaga
Ta liczba musi odpowiadać liczbie parametrów zarejestrowanych w DoFieldExchange
metodzie lub DoBulkFieldExchange
po wywołaniu metody SetFieldType
z wartością parametru CFieldExchange::inputParam
, , CFieldExchange::param
CFieldExchange::outputParam
lub CFieldExchange::inoutParam
.
Przykład
Zobacz artykuły Zestaw rekordów: parametryzacja zestawu rekordów (ODBC) i wymiana pól rekordów: przy użyciu narzędzia RFX.
CRecordset::m_pDatabase
Zawiera wskaźnik do CDatabase
obiektu, za pomocą którego zestaw rekordów jest połączony ze źródłem danych.
Uwagi
Ta zmienna jest ustawiana na dwa sposoby. Zazwyczaj wskaźnik jest przekazywany do już połączonego CDatabase
obiektu podczas konstruowania obiektu zestawu rekordów. Jeśli zamiast tego przejdziesz NULL
, CRecordset
utworzysz CDatabase
obiekt i połączysz go. W obu przypadkach CRecordset
wskaźnik jest przechowywany w tej zmiennej.
Zwykle nie trzeba bezpośrednio używać wskaźnika przechowywanego w pliku m_pDatabase
. Jeśli jednak napiszesz własne rozszerzenia do CRecordset
, może być konieczne użycie wskaźnika. Na przykład może być potrzebny wskaźnik, jeśli zgłosisz własne CDBException
s. Może też być konieczne wykonanie czegoś przy użyciu tego samego CDatabase
obiektu, takiego jak uruchamianie transakcji, ustawianie limitów czasu lub wywoływanie ExecuteSQL
funkcji składowej klasy CDatabase
w celu bezpośredniego wykonywania instrukcji SQL.
CRecordset::m_strFilter
Po skonstruowaniu obiektu zestawu rekordów, ale przed wywołaniem jego Open
funkcji składowej użyj tego elementu członkowskiego danych do przechowywania zawierającej CString
klauzulę SQL WHERE
.
Uwagi
Zestaw rekordów używa tego ciągu do ograniczenia (lub filtrowania) rekordów wybranych podczas Open
wywołania lub Requery
. Jest to przydatne w przypadku wybierania podzestawu rekordów, takich jak "wszyscy sprzedawcy z siedzibą w Kalifornii" ("state = CA"). Składnia SQL ODBC dla klauzuli WHERE
to
WHERE search-condition
Nie dołączaj słowa kluczowego WHERE
do ciągu. Struktura go dostarcza.
Możesz również sparametryzować ciąg filtru, umieszczając w nim symbole zastępcze "", deklarując element członkowski danych parametrów w klasie dla każdego symbolu zastępczego i przekazując parametry do zestawu rekordów w czasie wykonywania. Dzięki temu można utworzyć filtr w czasie wykonywania. Aby uzyskać więcej informacji, zobacz Zestaw rekordów: parametryzacja zestawu rekordów (ODBC).
Aby uzyskać więcej informacji na temat klauzul SQL WHERE
, zobacz SQL. Aby uzyskać więcej informacji na temat wybierania i filtrowania rekordów, zobacz Zestaw rekordów: filtrowanie rekordów (ODBC).
Przykład
CCustomer rsCustSet(&m_dbCust);
// Set the filter
rsCustSet.m_strFilter = _T("L_Name = 'Flanders'");
// Run the filtered query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));
CRecordset::m_strSort
Po skonstruowaniu obiektu zestawu rekordów, ale przed wywołaniem jego Open
funkcji składowej użyj tego elementu członkowskiego danych do przechowywania zawierającej CString
klauzulę SQL ORDER BY
.
Uwagi
Zestaw rekordów używa tego ciągu do sortowania rekordów wybranych podczas Open
wywołania lub Requery
. Tej funkcji można użyć do sortowania zestawu rekordów w co najmniej jednej kolumnie. Składnia SQL ODBC dla klauzuli ORDER BY
to
ORDER BY sort-specification [, sort-specification]...
gdzie specyfikacja sortowania jest liczbą całkowitą lub nazwą kolumny. Można również określić kolejność rosnącą lub malejącą (kolejność jest domyślnie rosnąca), dołączając ciąg "ASC" lub "DESC" do listy kolumn w ciągu sortowania. Wybrane rekordy są sortowane najpierw według pierwszej kolumny na liście, a następnie przez drugą itd. Możesz na przykład zamówić zestaw rekordów "Klienci" według nazwiska, a następnie imię. Liczba kolumn, które można wyświetlić, zależy od źródła danych. Aby uzyskać więcej informacji, zobacz Zestaw SDK systemu Windows.
Nie dołączaj słowa kluczowego ORDER BY
do ciągu. Struktura go dostarcza.
Aby uzyskać więcej informacji na temat klauzul SQL, zobacz SQL. Aby uzyskać więcej informacji na temat sortowania rekordów, zobacz Zestaw rekordów: sortowanie rekordów (ODBC).
Przykład
CCustomer rsCustSet(&m_dbCust);
// Set the sort string
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");
// Run the sorted query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));
CRecordset::Move
Przenosi bieżący wskaźnik rekordu w zestawie rekordów, do przodu lub do tyłu.
virtual void Move(
long nRows,
WORD wFetchType = SQL_FETCH_RELATIVE);
Parametry
nRows
Liczba wierszy do przejścia do przodu lub do tyłu. Wartości dodatnie przechodzą do przodu, w kierunku końca zestawu rekordów. Wartości ujemne przesuwają się do tyłu, w kierunku początku.
wFetchType
Określa zestaw wierszy, który Move
zostanie pobrany. Aby uzyskać szczegółowe informacje, zobacz Uwagi.
Uwagi
Jeśli przekażesz wartość 0 dla nRows
parametru , Move
odświeży bieżący rekord. Move
Spowoduje to zakończenie dowolnego bieżącego AddNew
Edit
lub trybu i przywrócenie wartości bieżącego rekordu przed AddNew
lub Edit
wywołania.
Uwaga
Podczas przechodzenia przez zestaw rekordów nie można pominąć usuniętych rekordów. Aby uzyskać więcej informacji, zobacz CRecordset::IsDeleted
. Po otwarciu elementu CRecordset
z zestawem skipDeletedRecords
opcji potwierdza, Move
czy nRows
parametr ma wartość 0. To zachowanie uniemożliwia odświeżanie wierszy usuniętych przez inne aplikacje klienckie przy użyciu tych samych danych. dwOption
Zobacz parametr w pliku , Open
aby uzyskać opis elementu skipDeletedRecords
.
Move
zmienia położenie zestawu rekordów według zestawów wierszy. Na podstawie wartości nRows
i wFetchType
pobiera odpowiedni zestaw wierszy, Move
a następnie tworzy pierwszy rekord w tym zestawie wierszy dla bieżącego rekordu. Jeśli pobieranie wierszy zbiorczych nie zostało zaimplementowane, rozmiar zestawu wierszy jest zawsze 1. Podczas pobierania zestawu wierszy bezpośrednio wywołuje CheckRowsetError
funkcję składową, Move
aby obsłużyć wszelkie błędy wynikające z pobierania.
W zależności od przekazanych Move
wartości jest odpowiednikiem innych CRecordset
funkcji składowych. W szczególności wartość wFetchType
może wskazywać funkcję składową, która jest bardziej intuicyjna i często preferowaną metodą przenoszenia bieżącego rekordu.
W poniższej tabeli wymieniono możliwe wartości dla wFetchType
zestawu wierszy, które Move
będą pobierane na wFetchType
podstawie elementów i i nRows
oraz dowolnej równoważnej funkcji składowej odpowiadającej wFetchType
funkcji .
wFetchType | Pobrany zestaw wierszy | Równoważna funkcja składowa |
---|---|---|
SQL_FETCH_RELATIVE (wartość domyślna) |
Zestaw wierszy rozpoczynający nRows wiersze z pierwszego wiersza w bieżącym zestawie wierszy. |
|
SQL_FETCH_NEXT |
Następny zestaw wierszy; nRows jest ignorowany. |
MoveNext |
SQL_FETCH_PRIOR |
Poprzedni zestaw wierszy; nRows jest ignorowany. |
MovePrev |
SQL_FETCH_FIRST |
Pierwszy zestaw wierszy w zestawie rekordów; nRows jest ignorowany. |
MoveFirst |
SQL_FETCH_LAST |
Ostatni kompletny zestaw wierszy w zestawie rekordów; nRows jest ignorowany. |
MoveLast |
SQL_FETCH_ABSOLUTE |
Jeśli nRows > wartość 0, zestaw wierszy rozpoczyna wiersze od nRows początku zestawu rekordów. Jeśli nRows < wartość 0, zestaw wierszy rozpoczyna wiersze nRows z końca zestawu rekordów. Jeśli nRows = 0, zwracany jest warunek początkowy pliku (BOF). |
SetAbsolutePosition |
SQL_FETCH_BOOKMARK |
Zestaw wierszy rozpoczynający się od wiersza, którego wartość zakładki odpowiada .nRows |
SetBookmark |
Uwaga
W przypadku zestawów rekordów Move
tylko do przesyłania dalej parametr jest prawidłowy tylko z wartością SQL_FETCH_NEXT
dla wFetchType
elementu .
Uwaga
Wywołanie Move
zgłasza wyjątek, jeśli zestaw rekordów nie ma żadnych rekordów. Aby określić, czy zestaw rekordów ma jakiekolwiek rekordy, wywołaj metodę IsBOF
i IsEOF
.
Uwaga
Jeśli przewiniesz obok początku lub końca zestawu rekordów (IsBOF
lub IsEOF
zwracasz wartość niezerową), wywołanie Move
funkcji może zgłosić wartość CDBException
. Jeśli na przykład zwraca IsEOF
wartość niezerową i IsBOF
nie, zostanie zgłoszony wyjątek, MoveNext
ale MovePrev
nie.
Uwaga
Jeśli wywołasz Move
funkcję podczas aktualizowania lub dodawania bieżącego rekordu, aktualizacje zostaną utracone bez ostrzeżenia.
Aby uzyskać więcej informacji na temat nawigacji zestawu rekordów, zobacz artykuły Zestaw rekordów: przewijanie (ODBC) i zestaw rekordów: zakładki i pozycje bezwzględne (ODBC). Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC). Aby uzyskać powiązane informacje, zobacz funkcję SQLExtendedFetch
interfejsu API ODBC w zestawie Windows SDK.
Przykład
// rs is a CRecordset or a CRecordset-derived object
// Change the rowset size to 5
rs.SetRowsetSize(5);
// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);
// Move to the first record in the recordset
rs.MoveFirst();
// Move to the sixth record
rs.Move(5);
// Other equivalent ways to move to the sixth record:
rs.Move(6, SQL_FETCH_ABSOLUTE);
rs.SetAbsolutePosition(6);
// In this case, the sixth record is the first record in the next rowset,
// so the following are also equivalent:
rs.MoveFirst();
rs.Move(1, SQL_FETCH_NEXT);
rs.MoveFirst();
rs.MoveNext();
CRecordset::MoveFirst
Tworzy pierwszy rekord w pierwszym zestawie wierszy dla bieżącego rekordu.
void MoveFirst();
Uwagi
Niezależnie od tego, czy pobieranie wierszy zbiorczych zostało zaimplementowane, zawsze będzie to pierwszy rekord w zestawie rekordów.
Nie musisz wywoływać MoveFirst
bezpośrednio po otwarciu zestawu rekordów. W tym czasie pierwszy rekord (jeśli istnieje) jest automatycznie bieżącym rekordem.
Uwaga
Ta funkcja składowa nie jest prawidłowa dla zestawów rekordów tylko do przekazywania.
Uwaga
Podczas przechodzenia przez zestaw rekordów nie można pominąć usuniętych rekordów. Aby uzyskać szczegółowe informacje, zobacz funkcję składową IsDeleted
.
Uwaga
Wywołanie dowolnej funkcji Move
zgłasza wyjątek, jeśli zestaw rekordów nie ma żadnych rekordów. Aby określić, czy zestaw rekordów ma jakiekolwiek rekordy, wywołaj metodę IsBOF
i IsEOF
.
Uwaga
Jeśli wywołasz dowolną z Move
funkcji podczas aktualizowania lub dodawania bieżącego rekordu, aktualizacje zostaną utracone bez ostrzeżenia.
Aby uzyskać więcej informacji na temat nawigacji zestawu rekordów, zobacz artykuły Zestaw rekordów: przewijanie (ODBC) i zestaw rekordów: zakładki i pozycje bezwzględne (ODBC). Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Przykład
Zobacz przykład dla elementu IsBOF
.
CRecordset::MoveLast
Tworzy pierwszy rekord w ostatnim pełnym zestawie wierszy bieżącego rekordu.
void MoveLast();
Uwagi
Jeśli pobieranie wierszy zbiorczych nie zostało zaimplementowane, zestaw rekordów ma rozmiar zestawu wierszy 1, więc MoveLast
przechodzi do ostatniego rekordu w zestawie rekordów.
Uwaga
Ta funkcja składowa nie jest prawidłowa dla zestawów rekordów tylko do przekazywania.
Uwaga
Podczas przechodzenia przez zestaw rekordów nie można pominąć usuniętych rekordów. Aby uzyskać szczegółowe informacje, zobacz funkcję składową IsDeleted
.
Uwaga
Wywołanie dowolnej funkcji Move
zgłasza wyjątek, jeśli zestaw rekordów nie ma żadnych rekordów. Aby określić, czy zestaw rekordów ma jakiekolwiek rekordy, wywołaj metodę IsBOF
i IsEOF
.
Uwaga
Jeśli wywołasz dowolną z Move
funkcji podczas aktualizowania lub dodawania bieżącego rekordu, aktualizacje zostaną utracone bez ostrzeżenia.
Aby uzyskać więcej informacji na temat nawigacji zestawu rekordów, zobacz artykuły Zestaw rekordów: przewijanie (ODBC) i zestaw rekordów: zakładki i pozycje bezwzględne (ODBC). Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Przykład
Zobacz przykład dla elementu IsBOF
.
CRecordset::MoveNext
Tworzy pierwszy rekord w następnym zestawie wierszy bieżącego rekordu.
void MoveNext();
Uwagi
Jeśli pobieranie wierszy zbiorczych nie zostało zaimplementowane, zestaw rekordów ma rozmiar zestawu wierszy 1, więc MoveNext
przechodzi do następnego rekordu.
Uwaga
Podczas przechodzenia przez zestaw rekordów nie można pominąć usuniętych rekordów. Aby uzyskać szczegółowe informacje, zobacz funkcję składową IsDeleted
.
Uwaga
Wywołanie dowolnej funkcji Move
zgłasza wyjątek, jeśli zestaw rekordów nie ma żadnych rekordów. Aby określić, czy zestaw rekordów ma jakiekolwiek rekordy, wywołaj metodę IsBOF
i IsEOF
.
Uwaga
Zaleca się również wywołanie metody IsEOF
przed wywołaniem metody MoveNext
. Jeśli na przykład przewiniesz koniec zestawu rekordów, IsEOF
zwróci wartość niezerową. Kolejne wywołanie MoveNext
zgłosi wyjątek.
Uwaga
Jeśli wywołasz dowolną z Move
funkcji podczas aktualizowania lub dodawania bieżącego rekordu, aktualizacje zostaną utracone bez ostrzeżenia.
Aby uzyskać więcej informacji na temat nawigacji zestawu rekordów, zobacz artykuły Zestaw rekordów: przewijanie (ODBC) i zestaw rekordów: zakładki i pozycje bezwzględne (ODBC). Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Przykład
Zobacz przykład dla elementu IsBOF
.
CRecordset::MovePrev
Tworzy pierwszy rekord w poprzednim zestawie wierszy dla bieżącego rekordu.
void MovePrev();
Uwagi
Jeśli pobieranie wierszy zbiorczych nie zostało zaimplementowane, zestaw rekordów ma rozmiar zestawu wierszy 1, więc MovePrev
przechodzi do poprzedniego rekordu.
Uwaga
Ta funkcja składowa nie jest prawidłowa dla zestawów rekordów tylko do przekazywania.
Uwaga
Podczas przechodzenia przez zestaw rekordów nie można pominąć usuniętych rekordów. Aby uzyskać szczegółowe informacje, zobacz funkcję składową IsDeleted
.
Uwaga
Wywołanie dowolnej funkcji Move
zgłasza wyjątek, jeśli zestaw rekordów nie ma żadnych rekordów. Aby określić, czy zestaw rekordów ma jakiekolwiek rekordy, wywołaj metodę IsBOF
i IsEOF
.
Uwaga
Zaleca się również wywołanie metody IsBOF
przed wywołaniem metody MovePrev
. Jeśli na przykład przewiniesz przed początkiem zestawu rekordów, IsBOF
zwróci wartość niezerową; kolejne wywołanie MovePrev
metody zgłosi wyjątek.
Uwaga
Jeśli wywołasz dowolną z Move
funkcji podczas aktualizowania lub dodawania bieżącego rekordu, aktualizacje zostaną utracone bez ostrzeżenia.
Aby uzyskać więcej informacji na temat nawigacji zestawu rekordów, zobacz artykuły Zestaw rekordów: przewijanie (ODBC) i zestaw rekordów: zakładki i pozycje bezwzględne (ODBC). Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Przykład
Zobacz przykład dla elementu IsBOF
.
CRecordset::OnSetOptions
Wywoływana w celu ustawienia opcji (używanych do wyboru) dla określonej instrukcji ODBC.
virtual void OnSetOptions(HSTMT hstmt);
Parametry
hstmt
Instrukcja HSTMT
ODBC, której opcje mają być ustawione.
Uwagi
Wywołaj metodę OnSetOptions
, aby ustawić opcje (używane w zaznaczeniu) dla określonej instrukcji ODBC. Struktura wywołuje tę funkcję składową, aby ustawić początkowe opcje zestawu rekordów. OnSetOptions
określa obsługę źródła danych dla kursorów przewijanych oraz współbieżności kursora i ustawia odpowiednio opcje zestawu rekordów. (Natomiast OnSetOptions
jest używany do operacji wyboru, OnSetUpdateOptions
jest używany na potrzeby operacji aktualizacji).
Zastąpij OnSetOptions
, aby ustawić opcje specyficzne dla sterownika lub źródła danych. Jeśli na przykład źródło danych obsługuje otwieranie w celu uzyskania wyłącznego dostępu, możesz przesłonić OnSetOptions
tę możliwość.
Aby uzyskać więcej informacji na temat kursorów, zobacz ODBC.
CRecordset::OnSetUpdateOptions
Wywoływana w celu ustawienia opcji (używanych podczas aktualizacji) dla określonej instrukcji ODBC.
virtual void OnSetUpdateOptions(HSTMT hstmt);
Parametry
hstmt
Instrukcja HSTMT
ODBC, której opcje mają być ustawione.
Uwagi
Wywołaj metodę OnSetUpdateOptions
, aby ustawić opcje (używane podczas aktualizacji) dla określonej instrukcji ODBC. Struktura wywołuje tę funkcję składową po utworzeniu elementu HSTMT
w celu zaktualizowania rekordów w zestawie rekordów. (Natomiast OnSetOptions
służy do operacji wyboru, OnSetUpdateOptions
służy do operacji aktualizacji). OnSetUpdateOptions
Określa obsługę kursorów z możliwością przewijania źródła danych oraz współbieżność kursora i ustawia odpowiednio opcje zestawu rekordów.
Zastąp OnSetUpdateOptions
, aby ustawić opcje instrukcji ODBC przed zastosowaniem tej instrukcji w celu uzyskania dostępu do bazy danych.
Aby uzyskać więcej informacji na temat kursorów, zobacz ODBC.
CRecordset::Open
Otwiera zestaw rekordów, pobierając tabelę lub wykonując zapytanie reprezentowane przez zestaw rekordów.
virtual BOOL Open(
UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
LPCTSTR lpszSQL = NULL,
DWORD dwOptions = none);
Parametry
nOpenType
Zaakceptuj wartość domyślną , AFX_DB_USE_DEFAULT_TYPE
lub użyj jednej z następujących wartości z elementu enum OpenType
:
CRecordset::dynaset
Zestaw rekordów z dwukierunkowym przewijaniem. Otwarcie zestawu rekordów określa członkostwo i kolejność rekordów, ale zmiany wprowadzone przez innych użytkowników do wartości danych są widoczne po operacji pobierania. Zestawy dynaset są również nazywane zestawami rekordów opartymi na kluczach.CRecordset::snapshot
Statyczny zestaw rekordów z dwukierunkowym przewijaniem. Otwarcie zestawu rekordów określa członkostwo i kolejność rekordów. Pobieranie rekordu określa wartości danych. Zmiany wprowadzone przez innych użytkowników nie są widoczne, dopóki zestaw rekordów nie zostanie zamknięty, a następnie ponownie otwarty.CRecordset::dynamic
Zestaw rekordów z dwukierunkowym przewijaniem. Zmiany wprowadzone przez innych użytkowników w ramach członkostwa, kolejności i wartości danych są widoczne po operacji pobierania. Wiele sterowników ODBC nie obsługuje tego typu zestawu rekordów.CRecordset::forwardOnly
Zestaw rekordów tylko do odczytu z przewijaniem do przodu.W przypadku
CRecordset
parametru wartość domyślna toCRecordset::snapshot
. Mechanizm wartości domyślnej umożliwia kreatorom języka Visual C++ interakcję zarówno z ODBCCRecordset
, jak i DAOCDaoRecordset
, które mają różne wartości domyślne.
Aby uzyskać więcej informacji na temat tych typów zestawów rekordów, zobacz Zestaw rekordów (ODBC). Aby uzyskać powiązane informacje, zobacz "Using Block and Scrollable Cursors" (Używanie kursorów blokowych i przewijanych) w zestawie Windows SDK.
Uwaga
Jeśli żądany typ nie jest obsługiwany, platforma zgłasza wyjątek.
lpszSQL
Wskaźnik ciągu zawierający jeden z następujących elementów:
Wskaźnik
NULL
.Nazwa tabeli.
Instrukcja SQL
SELECT
(opcjonalnie z językiem SQLWHERE
lubORDER BY
klauzulą).Instrukcja
CALL
określająca nazwę wstępnie zdefiniowanego zapytania (procedura składowana). Należy zachować ostrożność, aby nie wstawiać białych znaków między nawiasemCALL
klamrowym a słowem kluczowym.
Aby uzyskać więcej informacji na temat tego ciągu, zobacz tabelę i dyskusję na temat roli KlasyWizard w sekcji Uwagi .
Uwaga
Kolejność kolumn w zestawie wyników musi być zgodna z kolejnością wywołań funkcji RFX lub Bulk RFX w DoFieldExchange
zastąpieniu funkcji or DoBulkFieldExchange
.
dwOptions
Maska bitów, która może określać kombinację wartości wymienionych poniżej. Niektóre z nich wykluczają się wzajemnie. Domyślna wartość to none
.
CRecordset::none
Brak ustawionych opcji. Ta wartość parametru wyklucza się wzajemnie ze wszystkimi innymi wartościami. Domyślnie zestaw rekordów można aktualizować za pomocąEdit
polecenia lubDelete
i umożliwia dołączanie nowych rekordów za pomocą poleceniaAddNew
. Możliwość aktualizowania zależy od źródła danych inOpenType
określonej opcji. Optymalizacja pod kątem dodawania zbiorczego nie jest dostępna. Pobieranie wierszy zbiorczych nie zostanie zaimplementowane. Usunięte rekordy nie zostaną pominięte podczas nawigacji zestawu rekordów. Zakładki nie są dostępne. Zaimplementowano automatyczne sprawdzanie brudnych pól.CRecordset::appendOnly
Nie zezwalajEdit
aniDelete
na zestaw rekordów. ZezwalajAddNew
tylko. Ta opcja wyklucza się wzajemnie z opcjąCRecordset::readOnly
.CRecordset::readOnly
Otwórz zestaw rekordów jako tylko do odczytu. Ta opcja wyklucza się wzajemnie z opcjąCRecordset::appendOnly
.CRecordset::optimizeBulkAdd
Użyj przygotowanej instrukcji SQL, aby zoptymalizować dodawanie wielu rekordów jednocześnie. Dotyczy tylko wtedy, gdy nie używasz funkcjiSQLSetPos
interfejsu API ODBC w celu zaktualizowania zestawu rekordów. Pierwsza aktualizacja określa, które pola są oznaczone jako zanieczyszczone. Ta opcja wyklucza się wzajemnie z opcjąCRecordset::useMultiRowFetch
.CRecordset::useMultiRowFetch
Zaimplementuj pobieranie wierszy zbiorczych, aby umożliwić pobieranie wielu wierszy w ramach jednej operacji pobierania. Jest to zaawansowana funkcja zaprojektowana w celu poprawy wydajności; jednak wymiana pól rekordów zbiorczych nie jest obsługiwana przez programClassWizard
. Ta opcja wyklucza się wzajemnie z opcjąCRecordset::optimizeBulkAdd
. Jeśli określiszCRecordset::useMultiRowFetch
wartość , opcjaCRecordset::noDirtyFieldCheck
zostanie włączona automatycznie (podwójne buforowanie nie będzie dostępne); w zestawach rekordów tylko do przodu opcjaCRecordset::useExtendedFetch
zostanie włączona automatycznie. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).CRecordset::skipDeletedRecords
Pomiń wszystkie usunięte rekordy podczas przechodzenia przez zestaw rekordów. Spowoduje to spowolnienie wydajności niektórych względnych pobrań. Ta opcja nie jest prawidłowa w zestawach rekordów tylko do przekazywania. W przypadku wywołaniaMove
parametru nRows ustawionego na wartość 0 iCRecordset::skipDeletedRecords
zestawuMove
opcji zostanie asercyjna.CRecordset::skipDeletedRecords
jest podobny do pakowania sterownika, co oznacza, że usunięte wiersze są usuwane z zestawu rekordów. Jeśli jednak rekordy pakietów sterowników zostaną pominięte tylko te rekordy, które usuniesz; nie pomija rekordów usuniętych przez innych użytkowników, gdy zestaw rekordów jest otwarty.CRecordset::skipDeletedRecords
spowoduje pominięcie wierszy usuniętych przez innych użytkowników.CRecordset::useBookmarks
Może używać zakładek w zestawie rekordów, jeśli są obsługiwane. Zakładki spowalniają pobieranie danych, ale zwiększają wydajność nawigacji danych. Nieprawidłowe w zestawach rekordów tylko do przekazywania. Aby uzyskać więcej informacji, zobacz Zestaw rekordów: zakładki i pozycje bezwzględne (ODBC).CRecordset::noDirtyFieldCheck
Wyłącz automatyczne sprawdzanie brudnych pól (podwójne buforowanie). Poprawi to wydajność; należy jednak ręcznie oznaczyć pola jako zanieczyszczone przez wywołanie funkcji składowychSetFieldDirty
iSetFieldNull
. Podwójne buforowanie w klasieCRecordset
jest podobne do podwójnego buforowania w klasieCDaoRecordset
. Jednak w systemieCRecordset
nie można włączyć podwójnego buforowania w poszczególnych polach. Można je włączyć dla wszystkich pól lub wyłączyć dla wszystkich pól. Jeśli określisz opcjęCRecordset::useMultiRowFetch
,CRecordset::noDirtyFieldCheck
zostanie ona włączona automatycznie, aleSetFieldDirty
SetFieldNull
nie można jej używać w zestawach rekordów, które implementują pobieranie wierszy zbiorczych.CRecordset::executeDirect
Nie używaj przygotowanej instrukcji SQL. Aby uzyskać lepszą wydajność, określ tę opcję, jeśliRequery
funkcja składowa nigdy nie zostanie wywołana.CRecordset::useExtendedFetch
ZaimplementujSQLExtendedFetch
SQLFetch
zamiast . Jest to przeznaczone do implementowania zbiorczego pobierania wierszy na zestawach rekordów tylko do przekazywania. Jeśli określisz opcjęCRecordset::useMultiRowFetch
w zestawie rekordów tylko do przodu,CRecordset::useExtendedFetch
zostanie on włączony automatycznie.CRecordset::userAllocMultiRowBuffers
Użytkownik przydzieli magazynu dla danych. Użyj tej opcji z opcjąCRecordset::useMultiRowFetch
, jeśli chcesz przydzielić własny magazyn. W przeciwnym razie platforma automatycznie przydzieli niezbędny magazyn. Aby uzyskać więcej informacji, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC). OkreślanieCRecordset::userAllocMultiRowBuffers
bez określaniaCRecordset::useMultiRowFetch
wyników w asercji, która zakończyła się niepowodzeniem.
Wartość zwracana
Niezero, jeśli CRecordset
obiekt został pomyślnie otwarty; w przeciwnym razie wartość 0 , jeśli CDatabase::Open
zostanie wywołana, zwraca wartość 0.
Uwagi
Należy wywołać tę funkcję składową, aby uruchomić zapytanie zdefiniowane przez zestaw rekordów. Przed wywołaniem Open
metody należy skonstruować obiekt zestawu rekordów.
Połączenie tego zestawu rekordów ze źródłem danych zależy od sposobu konstruowania zestawu rekordów przed wywołaniem metody Open
. Jeśli przekażesz obiekt do konstruktora CDatabase
zestawu rekordów, który nie został połączony ze źródłem danych, ta funkcja składowa używa GetDefaultConnect
metody do próby otwarcia obiektu bazy danych. Jeśli przekażesz wartość NULL do konstruktora zestawu rekordów, konstruktor skonstruuje CDatabase
obiekt i Open
spróbuje połączyć obiekt bazy danych. Aby uzyskać szczegółowe informacje na temat zamykania zestawu rekordów i połączenia w tych różnych okolicznościach, zobacz Close
.
Uwaga
Dostęp do źródła danych za pośrednictwem CRecordset
obiektu jest zawsze udostępniany. CDaoRecordset
W przeciwieństwie do klasy nie można użyć CRecordset
obiektu do otwierania źródła danych z wyłącznym dostępem.
Podczas wywoływania Open
zapytania zwykle instrukcja SQL SELECT
wybiera rekordy na podstawie kryteriów przedstawionych w poniższej tabeli.
Wartość parametru lpszSQL |
Wybrane rekordy są określane przez | Przykład |
---|---|---|
NULL |
Ciąg zwrócony przez GetDefaultSQL . |
|
Nazwa tabeli SQL | Wszystkie kolumny tabeli na DoFieldExchange liście lub DoBulkFieldExchange . |
"Customer" |
Nazwa wstępnie zdefiniowanego zapytania (procedura składowana) | Kolumny, które zapytanie ma być zwracane. | "{call OverDueAccts}" |
SELECT lista-kolumn-lista-tabeli FROM |
Określone kolumny z określonych tabel. | "SELECT CustId, CustName FROM Customer" |
Uwaga
Nie wstaw dodatkowego odstępu w ciągu SQL. Jeśli na przykład wstawisz biały znak między nawiasem klamrowym a CALL
słowem kluczowym, MFC błędnie zinterpretuje ciąg SQL jako nazwę tabeli i włączy go do SELECT
instrukcji, co spowoduje zgłoszenie wyjątku. Podobnie, jeśli wstępnie zdefiniowane zapytanie używa parametru wyjściowego, nie wstaw biały znak między nawiasem klamrowym a symbolem "". Na koniec nie można wstawić białych znaków przed nawiasem klamrowym CALL
w instrukcji lub przed SELECT
słowem kluczowym w SELECT
instrukcji .
Zwykła procedura polega na przekazaniu NULL
metody . W tym przypadku Open
wywołuje metodę Open
GetDefaultSQL. Jeśli używasz klasy pochodnej CRecordset
, GetDefaultSQL
podaj nazwy tabel określone w pliku ClassWizard
. Zamiast tego można określić inne informacje w parametrze lpszSQL
.
Niezależnie od tego, co przekazujesz, Open
tworzy końcowy ciąg SQL dla zapytania (ciąg może zawierać ciąg SQL WHERE
i ORDER BY
klauzule dołączone do przekazanego lpszSQL
ciągu), a następnie wykonuje zapytanie. Możesz zbadać skonstruowany ciąg, wywołując wywołanie GetSQL
metody po wywołaniu metody Open
. Aby uzyskać więcej informacji o tym, jak zestaw rekordów konstruuje instrukcję SQL i wybiera rekordy, zobacz Zestaw rekordów: Jak zestawy rekordów wybierają rekordy (ODBC).
Składowe danych pola klasy zestawu rekordów są powiązane z kolumnami wybranych danych. Jeśli zostaną zwrócone jakiekolwiek rekordy, pierwszy rekord stanie się bieżącym rekordem.
Jeśli chcesz ustawić opcje zestawu rekordów, takie jak filtr lub sortowanie, określ je po utworzeniu obiektu zestawu rekordów, ale przed wywołaniem metody Open
. Jeśli chcesz odświeżyć rekordy w zestawie rekordów po otwarciu zestawu rekordów, wywołaj metodę Requery
.
Aby uzyskać więcej informacji, w tym więcej przykładów, zobacz Zestaw rekordów (ODBC), Zestaw rekordów: Jak zestawy rekordów wybierają rekordy (ODBC) i Zestaw rekordów: Tworzenie i zamykanie zestawów rekordów (ODBC).
Przykład
W poniższych przykładach kodu pokazano różne formy wywołania Open
.
// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived
// objects
// Open rs using the default SQL statement, implement bookmarks, and turn
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks |
CRecordset::noDirtyFieldCheck);
// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));
// Accept all defaults
rsDefault.Open();
CRecordset::RefreshRowset
Aktualizuje dane i stan wiersza w bieżącym zestawie wierszy.
void RefreshRowset(
WORD wRow,
WORD wLockType = SQL_LOCK_NO_CHANGE);
Parametry
wRow
Pozycja jednego wiersza w bieżącym zestawie wierszy. Ta wartość może wahać się od zera do rozmiaru zestawu wierszy.
wLockType
Wartość wskazująca, jak zablokować wiersz po odświeżeniu. Aby uzyskać szczegółowe informacje, zobacz Uwagi.
Uwagi
Jeśli przekażesz wartość zero dla wRow
, każdy wiersz w zestawie wierszy zostanie odświeżony.
Aby użyć RefreshRowset
elementu , musisz zaimplementować pobieranie wierszy zbiorczych przez określenie CRecordset::useMulitRowFetch
opcji w funkcji składowej Open
.
RefreshRowset
wywołuje funkcję SQLSetPos
interfejsu API ODBC . Parametr wLockType
określa stan blokady wiersza po SQLSetPos
wykonaniu. W poniższej tabeli opisano możliwe wartości dla elementu wLockType
.
wLockType | opis |
---|---|
SQL_LOCK_NO_CHANGE (wartość domyślna) |
Sterownik lub źródło danych gwarantuje, że wiersz jest w tym samym stanie zablokowanym lub odblokowanym, co wcześniej RefreshRowset został wywołany. |
SQL_LOCK_EXCLUSIVE |
Sterownik lub źródło danych blokuje wiersz wyłącznie. Nie wszystkie źródła danych obsługują ten typ blokady. |
SQL_LOCK_UNLOCK |
Sterownik lub źródło danych odblokowuje wiersz. Nie wszystkie źródła danych obsługują ten typ blokady. |
Aby uzyskać więcej informacji o SQLSetPos
systemie , zobacz Zestaw Windows SDK. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
CRecordset::Requery
Ponownie kompiluje (odświeża) zestaw rekordów.
virtual BOOL Requery();
Wartość zwracana
Niezerowe, jeśli zestaw rekordów został pomyślnie przebudowany; w przeciwnym razie 0.
Uwagi
Jeśli zostaną zwrócone jakiekolwiek rekordy, pierwszy rekord stanie się bieżącym rekordem.
Aby zestaw rekordów odzwierciedlał dodane i usunięte przez Ciebie lub innych użytkowników w źródle danych, należy ponownie skompilować zestaw rekordów, wywołując metodę Requery
. Jeśli zestaw rekordów jest zestawem dynamicznym, automatycznie odzwierciedla aktualizacje, które użytkownik lub inni użytkownicy tworzą dla istniejących rekordów (ale nie dodaje). Jeśli zestaw rekordów jest migawką, należy wywołać metodę Requery
, aby odzwierciedlić edycje przez innych użytkowników i dodatki i usunięcia.
W przypadku zestawu dynamicznych lub migawki wywołaj Requery
element w dowolnym momencie, w którym chcesz ponownie skompilować zestaw rekordów przy użyciu nowego filtru lub sortowania albo nowych wartości parametrów. Ustaw nową właściwość filtru lub sortowania, przypisując nowe wartości do m_strFilter
metody i m_strSort
przed wywołaniem metody Requery
. Ustaw nowe parametry, przypisując nowe wartości do składowych danych parametrów przed wywołaniem metody Requery
. Jeśli ciągi filtru i sortowania są niezmienione, możesz ponownie użyć zapytania, co zwiększa wydajność.
Jeśli próba ponownego skompilowania zestawu rekordów zakończy się niepowodzeniem, zestaw rekordów zostanie zamknięty. Przed wywołaniem Requery
metody można określić, czy zestaw rekordów może zostać ponownie zapytany przez wywołanie funkcji składowej CanRestart
. CanRestart
nie gwarantuje, że Requery
to powiedzie się.
Uwaga
Wywołaj połączenie Requery
dopiero po wywołaniu metody Open
.
Przykład
W tym przykładzie ponownie kompiluje zestaw rekordów, aby zastosować inną kolejność sortowania.
CCustomer rsCustSet(&m_dbCust);
// Open the recordset
rsCustSet.Open();
// Use the recordset ...
// Set the sort order and Requery the recordset
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");
if (!rsCustSet.CanRestart())
return; // Unable to requery
if (!rsCustSet.Requery())
// Requery failed, so take action
AfxMessageBox(_T("Requery failed!"));
CRecordset::SetAbsolutePosition
Umieszcza zestaw rekordów w rekordzie odpowiadający określonej liczbie rekordów.
void SetAbsolutePosition(long nRows);
Parametry
nRows
Jednokierunkowa pozycja porządkowa dla bieżącego rekordu w zestawie rekordów.
Uwagi
SetAbsolutePosition
przenosi bieżący wskaźnik rekordu na podstawie tej pozycji porządkowej.
Uwaga
Ta funkcja składowa nie jest prawidłowa w zestawach rekordów tylko do przekazywania.
W przypadku zestawów rekordów ODBC ustawienie pozycji bezwzględnej 1 odnosi się do pierwszego rekordu w zestawie rekordów; ustawienie 0 odnosi się do pozycji początku pliku (BOF).
Możesz również przekazać wartości ujemne do SetAbsolutePosition
. W takim przypadku pozycja zestawu rekordów jest obliczana z końca zestawu rekordów. Na przykład SetAbsolutePosition( -1 )
przenosi bieżący wskaźnik rekordu do ostatniego rekordu w zestawie rekordów.
Uwaga
Pozycja bezwzględna nie jest przeznaczona do użycia jako liczba rekordów zastępczych. Zakładki są nadal zalecanym sposobem przechowywania i powrotu do danej pozycji, ponieważ pozycja rekordu zmienia się po usunięciu poprzednich rekordów. Ponadto nie można mieć pewności, że dany rekord będzie miał taką samą pozycję bezwzględną, jeśli zestaw rekordów zostanie ponownie utworzony, ponieważ kolejność poszczególnych rekordów w zestawie rekordów nie jest gwarantowana, chyba że zostanie utworzona za pomocą instrukcji SQL przy użyciu ORDER BY
klauzuli .
Aby uzyskać więcej informacji na temat nawigacji zestawu rekordów i zakładek, zobacz artykuły Zestaw rekordów: Przewijanie (ODBC) i Zestaw rekordów: Zakładki i Pozycje bezwzględne (ODBC).
CRecordset::SetBookmark
Umieszcza zestaw rekordów w rekordzie zawierającym określoną zakładkę.
void SetBookmark(const CDBVariant& varBookmark);
Parametry
varBookmark
Odwołanie do CDBVariant
obiektu zawierającego wartość zakładki dla określonego rekordu.
Uwagi
Aby określić, czy zakładki są obsługiwane w zestawie rekordów, wywołaj metodę CanBookmark
. Aby udostępnić zakładki, jeśli są obsługiwane, należy ustawić CRecordset::useBookmarks
opcję w parametrze dwOptions
funkcji składowej Open
.
Uwaga
Jeśli zakładki są nieobsługiwane lub niedostępne, wywołanie SetBookmark
spowoduje zgłoszenie wyjątku. Zakładki nie są obsługiwane w zestawach rekordów tylko do przekazywania.
Aby najpierw pobrać zakładkę dla bieżącego rekordu, wywołaj metodę GetBookmark
CDBVariant
, która zapisuje wartość zakładki w obiekcie. Później możesz wrócić do tego rekordu, wywołując SetBookmark
metodę przy użyciu zapisanej wartości zakładki.
Uwaga
Po wykonaniu niektórych operacji zestawu rekordów należy sprawdzić trwałość zakładki przed wywołaniem metody SetBookmark
. Jeśli na przykład pobierzesz zakładkę za pomocą GetBookmark
polecenia , a następnie wywołasz Requery
polecenie , zakładka może nie być już prawidłowa. ZadzwońCDatabase::GetBookmarkPersistence
, aby sprawdzić, czy możesz bezpiecznie zadzwonić.SetBookmark
Aby uzyskać więcej informacji na temat nawigacji zakładek i zestawów rekordów, zobacz artykuły Zestaw rekordów: zakładki i pozycje bezwzględne (ODBC) i Zestaw rekordów: Przewijanie (ODBC).
CRecordset::SetFieldDirty
Flaguje element członkowski danych pola zestawu rekordów jako zmieniony lub bez zmian.
void SetFieldDirty(void* pv, BOOL bDirty = TRUE);
Parametry
pv
Zawiera adres elementu członkowskiego danych pola w zestawie rekordów lub NULL
. Jeśli NULL
wszystkie elementy członkowskie danych pól w zestawie rekordów są oflagowane. (Język C++ NULL
nie jest taki sam jak null w terminologii bazy danych, co oznacza "brak wartości").
bDirty
TRUE
jeśli element członkowski danych pola ma być oflagowany jako "brudny" (zmieniony). W przeciwnym razie FALSE
, jeśli element członkowski danych pola ma być oflagowany jako "czysty" (bez zmian).
Uwagi
Oznaczanie pól bez zmian gwarantuje, że pole nie zostanie zaktualizowane i spowoduje zmniejszenie ruchu SQL.
Uwaga
Ta funkcja składowa nie ma zastosowania w zestawach rekordów korzystających z zbiorczego pobierania wierszy. Jeśli zaimplementowano pobieranie wierszy zbiorczych, SetFieldDirty
wyniknie niepowodzenie asercji. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Struktura oznacza zmienione składowe danych pól, aby upewnić się, że zostaną zapisane w rekordzie w źródle danych przez mechanizm wymiany pól rekordów (RFX). Zmiana wartości pola zwykle powoduje automatyczne ustawienie pola zanieczyszczonego, dlatego rzadko trzeba wywołać SetFieldDirty
siebie, ale czasami warto upewnić się, że kolumny zostaną jawnie zaktualizowane lub wstawione niezależnie od tego, jaka wartość znajduje się w elemencie danych pola.
Użycie NULL
polecenia dla pierwszego argumentu funkcji spowoduje zastosowanie funkcji tylko do outputColumn
pól, a nie param
pól. Na przykład wywołanie
SetFieldNull(NULL);
spowoduje ustawienie tylko outputColumn
pól na NULL
; param
pola nie będą miały wpływu.
Aby pracować nad param
polami, musisz podać rzeczywisty adres osoby param
, nad którą chcesz pracować, na przykład:
SetFieldNull(&m_strParam);
Oznacza to, że nie można ustawić wszystkich param
pól na NULL
, tak jak w przypadku outputColumn
pól.
CRecordset::SetFieldNull
Flaguje element członkowski danych pola zestawu rekordów jako null (w szczególności bez wartości) lub jako wartość inną niż null.
void SetFieldNull(void* pv, BOOL bNull = TRUE);
Parametry
pv
Zawiera adres elementu członkowskiego danych pola w zestawie rekordów lub NULL
. Jeśli NULL
wszystkie elementy członkowskie danych pól w zestawie rekordów są oflagowane. (Język C++ NULL
nie jest taki sam jak null w terminologii bazy danych, co oznacza "brak wartości").
bNull
Niezerowe, jeśli element członkowski danych pola ma być oflagowany jako bez wartości (Null). W przeciwnym razie 0, jeśli element członkowski danych pola ma być oflagowany jako inny niż null.
Uwagi
Po dodaniu nowego rekordu do zestawu rekordów wszystkie elementy członkowskie danych pól są początkowo ustawione na wartość Null i oznaczone jako "brudne" (zmienione). Po pobraniu rekordu ze źródła danych kolumny mają już wartości lub mają wartość Null.
Uwaga
Nie należy wywoływać tej funkcji składowej w zestawach rekordów korzystających z zbiorczego pobierania wierszy. Jeśli zaimplementowano pobieranie wierszy zbiorczych, wywołanie SetFieldNull
wywołania powoduje niepowodzenie asercji. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Jeśli w szczególności chcesz wyznaczyć pole bieżącego rekordu jako bez wartości, wywołaj SetFieldNull
metodę z ustawioną bNull
wartością , aby oznaczyć TRUE
ją jako null. Jeśli pole zostało wcześniej oznaczone jako Null, a teraz chcesz nadać mu wartość, ustaw jej nową wartość. Nie musisz usuwać flagi null za pomocą SetFieldNull
polecenia . Aby określić, czy pole może mieć wartość Null, wywołaj metodę IsFieldNullable
.
Użycie NULL
polecenia dla pierwszego argumentu funkcji spowoduje zastosowanie funkcji tylko do outputColumn
pól, a nie param
pól. Na przykład wywołanie
SetFieldNull(NULL);
spowoduje ustawienie tylko outputColumn
pól na NULL
; param
pola nie będą miały wpływu.
Aby pracować nad param
polami, musisz podać rzeczywisty adres osoby param
, nad którą chcesz pracować, na przykład:
SetFieldNull(&m_strParam);
Oznacza to, że nie można ustawić wszystkich param
pól na NULL
, tak jak w przypadku outputColumn
pól.
Uwaga
Podczas ustawiania parametrów na Null wywołanie SetFieldNull
metody przed otwarciem zestawu rekordów powoduje potwierdzenie. W takim przypadku wywołaj metodę SetParamNull
.
SetFieldNull
jest implementowany za pomocą programu DoFieldExchange
.
CRecordset::SetLockingMode
Ustawia tryb blokowania na "optymistyczne" blokowanie (ustawienie domyślne) lub "pesymistyczne" blokowanie. Określa sposób blokowania rekordów dla aktualizacji.
void SetLockingMode(UINT nMode);
Parametry
nMode
Zawiera jedną z następujących wartości z elementu enum LockMode
:
optimistic
Optymistyczne blokowanie blokuje rekord aktualizowany tylko podczas wywołania metodyUpdate
.pessimistic
Pesymistyczne blokowanie blokuje rekord natychmiast poEdit
wywołaniu i utrzymuje go zablokowane do momentuUpdate
zakończenia wywołania lub przejścia do nowego rekordu.
Uwagi
Wywołaj tę funkcję składową, jeśli musisz określić, które z dwóch strategii blokowania rekordów zestaw rekordów używa do aktualizacji. Domyślnie tryb blokowania zestawu rekordów to optimistic
. Można to zmienić na bardziej ostrożną pessimistic
strategię blokowania. Wywołaj metodę SetLockingMode
po utworzeniu i otwarciu obiektu zestawu rekordów, ale przed wywołaniem metody Edit
.
CRecordset::SetParamNull
Flaguje parametr jako null (w szczególności bez wartości) lub jako wartość inną niż null.
void SetParamNull(
int nIndex,
BOOL bNull = TRUE);
Parametry
nIndex
Indeks zerowy parametru.
bNull
Jeśli TRUE
(wartość domyślna), parametr jest oflagowany jako Null. W przeciwnym razie parametr jest oflagowany jako inny niż null.
Uwagi
W przeciwieństwie do SetFieldNull
metody można wywołać SetParamNull
metodę przed otwarciem zestawu rekordów.
SetParamNull
jest zwykle używany ze wstępnie zdefiniowanymi zapytaniami (procedur składowanych).
CRecordset::SetRowsetCursorPosition
Przenosi kursor do wiersza w bieżącym zestawie wierszy.
void SetRowsetCursorPosition(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);
Parametry
wRow
Pozycja jednego wiersza w bieżącym zestawie wierszy. Ta wartość może zawierać zakres od 1 do rozmiaru zestawu wierszy.
wLockType
Wartość wskazująca, jak zablokować wiersz po jego odświeżeniu. Aby uzyskać szczegółowe informacje, zobacz Uwagi.
Uwagi
Podczas implementowania zbiorczego pobierania wierszy rekordy są pobierane przez zestawy wierszy, gdzie pierwszy rekord w pobranym zestawie wierszy jest bieżącym rekordem. Aby utworzyć inny rekord w zestawie wierszy bieżącego rekordu, wywołaj metodę SetRowsetCursorPosition
. Na przykład można połączyć SetRowsetCursorPosition
z funkcją składową GetFieldValue
, aby dynamicznie pobierać dane z dowolnego rekordu zestawu rekordów.
Aby użyć SetRowsetCursorPosition
polecenia , musisz zaimplementować pobieranie wierszy zbiorczych przez określenie CRecordset::useMultiRowFetch
opcji parametru dwOptions
w funkcji składowej Open
.
SetRowsetCursorPosition
wywołuje funkcję SQLSetPos
interfejsu API ODBC . Parametr wLockType
określa stan blokady wiersza po SQLSetPos
wykonaniu. W poniższej tabeli opisano możliwe wartości dla elementu wLockType
.
wLockType |
opis |
---|---|
SQL_LOCK_NO_CHANGE (wartość domyślna) |
Sterownik lub źródło danych gwarantuje, że wiersz jest w tym samym stanie zablokowanym lub odblokowanym, co wcześniej SetRowsetCursorPosition został wywołany. |
SQL_LOCK_EXCLUSIVE |
Sterownik lub źródło danych blokuje wiersz wyłącznie. Nie wszystkie źródła danych obsługują ten typ blokady. |
SQL_LOCK_UNLOCK |
Sterownik lub źródło danych odblokowuje wiersz. Nie wszystkie źródła danych obsługują ten typ blokady. |
Aby uzyskać więcej informacji o SQLSetPos
systemie , zobacz Zestaw Windows SDK. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
CRecordset::SetRowsetSize
Określa liczbę rekordów, które mają zostać pobrane podczas pobierania.
virtual void SetRowsetSize(DWORD dwNewRowsetSize);
Parametry
dwNewRowsetSize
Liczba wierszy do pobrania podczas danego pobierania.
Uwagi
Ta funkcja wirtualnego elementu członkowskiego określa, ile wierszy chcesz pobrać podczas pojedynczego pobierania podczas korzystania z pobierania zbiorczego wiersza. Aby zaimplementować pobieranie wierszy zbiorczych, należy ustawić CRecordset::useMultiRowFetch
opcję w parametrze dwOptions
funkcji składowej Open
.
Uwaga
Wywołanie SetRowsetSize
bez implementowania pobierania wierszy zbiorczych spowoduje niepowodzenie asercji.
Wywołaj metodę SetRowsetSize
przed wywołaniem Open
, aby początkowo ustawić rozmiar zestawu wierszy dla zestawu rekordów. Domyślny rozmiar zestawu wierszy podczas implementowania pobierania wierszy zbiorczych wynosi 25.
Uwaga
Podczas wywoływania metody SetRowsetSize
należy zachować ostrożność. Jeśli ręcznie przydzielasz magazyn dla danych (zgodnie z opcją CRecordset::userAllocMultiRowBuffers
parametru dwOptions w pliku Open
), sprawdź, czy należy ponownie przydzielić te magazynu po wywołaniu SetRowsetSize
metody , ale przed wykonaniem jakiejkolwiek operacji nawigacji kursorem.
Aby uzyskać bieżące ustawienie dla rozmiaru zestawu wierszy, wywołaj metodę GetRowsetSize
.
Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
CRecordset::Update
Wykonuje operację AddNew
lub Edit
, zapisując nowe lub edytowane dane w źródle danych.
virtual BOOL Update();
Wartość zwracana
Niezerowe, jeśli jeden rekord został pomyślnie zaktualizowany; w przeciwnym razie 0, jeśli kolumny nie uległy zmianie. Jeśli nie zaktualizowano żadnych rekordów lub jeśli został zaktualizowany więcej niż jeden rekord, zgłaszany jest wyjątek. Wyjątek jest również zgłaszany w przypadku wszelkich innych błędów w źródle danych.
Uwagi
Wywołaj tę funkcję składową po wywołaniu funkcji lub Edit
składowejAddNew
. To wywołanie jest wymagane do ukończenia AddNew
operacji lub Edit
.
Uwaga
Jeśli zaimplementowano pobieranie wierszy zbiorczych, nie można wywołać metody Update
. Spowoduje to niepowodzenie asercji. Mimo że klasa CRecordset
nie udostępnia mechanizmu aktualizowania zbiorczych wierszy danych, można napisać własne funkcje przy użyciu funkcji SQLSetPos
interfejsu API ODBC . Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Zarówno, AddNew
jak i Edit
przygotuj bufor edycji, w którym dodawane lub edytowane dane są umieszczane do zapisywania w źródle danych. Update
zapisuje dane. Tylko te pola oznaczone lub wykryte jako zmienione są aktualizowane.
Jeśli źródło danych obsługuje transakcje, możesz wykonać Update
wywołanie (i jego odpowiadające AddNew
lub Edit
wywołanie) transakcji. Aby uzyskać więcej informacji na temat transakcji, zobacz Transaction (ODBC).
Uwaga
Jeśli wywołasz połączenie bez wcześniejszego wywołania Update
AddNew
metody lub Edit
, Update
zgłasza błąd CDBException
. Jeśli wywołasz AddNew
metodę lub Edit
, musisz wywołać Update
metodę Move
przed wywołaniem operacji lub przed zamknięciem zestawu rekordów lub połączenia ze źródłem danych. W przeciwnym razie zmiany zostaną utracone bez powiadomienia.
Aby uzyskać szczegółowe informacje na temat obsługi Update
błędów, zobacz Zestaw rekordów: Jak zestawy rekordów aktualizują rekordy (ODBC).
Przykład
zobacz Transakcja: wykonywanie transakcji w zestawie rekordów (ODBC).
Zobacz też
Klasa CObject
Wykres hierarchii
Klasa CDatabase
Klasa CRecordView