Klasa CRecordset

Reprezentuje zestaw rekordów wybranych ze źródła danych.

Składnia

class CRecordset : public CObject

Członkowie

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 Obiektów dostępu do danych (DAO), a nie z klasami Open Database Połączenie ivity (ODBC), użyj klasyCDaoRecordset. 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 danych, czy migawką, czy jest aktualizowalny, czy tylko do odczytu (zależy to od możliwości źródła danych Open Database Połączenie ivity (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

CObject

CRecordset

Wymagania

Nagłówka: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 SQLSetPosinterfejsu 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 AddNewmetody 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 Updatemetody 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 Updatemetody , 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::BeginTransAddNew.

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ę SQLSetConnectOptioninterfejsu 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ć Editelementów , AddNewani 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 dwOptionsfunkcji 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, Requerylub dowolna Move operacja. Przekazano jej wartość zwracaną przez funkcję SQLExtendedFetchinterfejsu 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 SQLErrorsystemie , 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 Closemetody 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 NULLCDatabase 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 SQLSetPosinterfejsu 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 Deletezestawu 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 Editwywoł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_dbCustzmienna 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 CRecordsetklasy . Jeśli obiekt zestawu rekordów został utworzony bezpośrednio z CRecordsetusł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ć AddNewmetody , Edit, Deleteani 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 SQLSetPosinterfejsu 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 CRecordsetklasy . Jeśli obiekt zestawu rekordów został utworzony bezpośrednio z CRecordsetprogramu , 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 DoFieldExchangeprogramu , 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 Editmetody 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 SQLSetPosinterfejsu 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 Editmetodę , 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ą SetLockingModepolecenia .

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 FlushResultSetmetody kursor nie jest prawidłowy w tym zestawie wyników. Po wywołaniu funkcji składowej należy wywołać FlushResultSetMoveNext 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 FALSEwartości (wartość 0), aby uzyskać te wartości parametrów.

FlushResultSet wywołuje funkcję SQLMoreResultsinterfejsu 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 SQLMoreResultssystemie , 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 CRecordsetna 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ę GetBookmarkRequery, 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 ClassWizardwersję .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 ClassWizardpomocą 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 GetDefaultSQLklasy . 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 GetDefaultSQLelement , 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_TYPEwymusza 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 CRecordsetprogramu , 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 CRecordsetelementu , 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ę SQLGetDatainterfejsu 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 SQLGetDatasystemie , zobacz Zestaw Windows SDK.

Przykład

Poniższy przykładowy kod ilustruje wywołania GetFieldValue obiektu zestawu rekordów zadeklarowanego bezpośrednio z CRecordsetklasy .

// 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 CDaoRecordsetDAO , CRecordset nie ma funkcji składowej SetFieldValue . Jeśli utworzysz obiekt bezpośrednio z CRecordsetusł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 zawiera AFX_CURRENT_RECORD_UNDEFINED wartość (-2). Jeśli IsBOF 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ąc MoveNext , dopóki IsEOF nie zwraca wartości nonzero. Jeśli ten element członkowski ma wartość zero, liczba rekordów zwracana przez GetRecordCountwartość , 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 Openelementu , określonego za pomocą ClassWizardpolecenia , 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 Openmetody , 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 MovePrevmetodę , IsBOF zwróci wartość nonzero. Jeśli IsBOF zwraca wartość niezerową i wywołujesz MovePrevmetodę , 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 Openmetody , 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 MoveNextmetody , IsEOF zwróci wartość nonzero. Jeśli IsEOF zwraca wartość niezerową i wywołujesz MoveNextmetodę , 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 Updatemetody , 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::outputColumnSetFieldType .

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::paramCFieldExchange::outputParamlub 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 CDBExceptions. 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 nRowsparametru , Move odświeży bieżący rekord. Move Spowoduje to zakończenie dowolnego bieżącego AddNewEdit 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 wFetchTypepobiera 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 wFetchTypezestawu wierszy, które Move będą pobierane na wFetchType podstawie elementów i i nRowsoraz dowolnej równoważnej funkcji składowej odpowiadającej wFetchTypefunkcji .

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 wFetchTypeelementu .

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_TYPElub 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 CRecordsetparametru wartość domyślna to CRecordset::snapshot. Mechanizm wartości domyślnej umożliwia kreatorom języka Visual C++ interakcję zarówno z ODBC CRecordset , jak i DAO CDaoRecordset, 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 SQL WHERE lub ORDER 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 nawiasem CALL 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. Wartość domyślna 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 lub Delete i umożliwia dołączanie nowych rekordów za pomocą polecenia AddNew. Możliwość aktualizowania zależy od źródła danych i nOpenType 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 zezwalaj Edit ani Delete na zestaw rekordów. Zezwalaj AddNew 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 funkcji SQLSetPos 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 program ClassWizard. Ta opcja wyklucza się wzajemnie z opcją CRecordset::optimizeBulkAdd. Jeśli określisz CRecordset::useMultiRowFetchwartość , opcja CRecordset::noDirtyFieldCheck zostanie włączona automatycznie (podwójne buforowanie nie będzie dostępne); w zestawach rekordów tylko do przodu opcja CRecordset::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łania Move parametru nRows ustawionego na wartość 0 i CRecordset::skipDeletedRecords zestawu Move 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ładowych SetFieldDirty i SetFieldNull . Podwójne buforowanie w klasie CRecordset jest podobne do podwójnego buforowania w klasie CDaoRecordset. Jednak w systemie CRecordsetnie 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, ale SetFieldDirtySetFieldNull 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śli Requery funkcja składowa nigdy nie zostanie wywołana.

  • CRecordset::useExtendedFetch Zaimplementuj SQLExtendedFetchSQLFetchzamiast . 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 bufory 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ślanie CRecordset::userAllocMultiRowBuffers bez określania CRecordset::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 Openmetody 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 Openzapytania 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}"
SELECTlista-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ę OpenGetDefaultSQL. 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

Aktualizacje 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ć RefreshRowsetelementu , musisz zaimplementować pobieranie wierszy zbiorczych przez określenie CRecordset::useMulitRowFetch opcji w funkcji składowej Open .

RefreshRowset wywołuje funkcję SQLSetPosinterfejsu 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 SQLSetPossystemie , 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 Requerymetody 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ę GetBookmarkCDBVariant , 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 Requerypolecenie , 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 NULLwszystkie 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.

Uwaga

Wywołaj tę funkcję składową dopiero po wywołaniu Edit funkcji lub AddNew.

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 NULLwszystkie 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ą SetFieldNullpolecenia . Aby określić, czy pole może mieć wartość Null, wywołaj metodę IsFieldNullable.

Uwaga

Wywołaj tę funkcję składową dopiero po wywołaniu Edit funkcji lub AddNew.

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 metody Update.

  • pessimistic Pesymistyczne blokowanie blokuje rekord natychmiast po Edit wywołaniu i utrzymuje go zablokowane do momentu Update 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 SetFieldNullmetody 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ć SetRowsetCursorPositionpolecenia , musisz zaimplementować pobieranie wierszy zbiorczych przez określenie CRecordset::useMultiRowFetch opcji parametru dwOptions w funkcji składowej Open .

SetRowsetCursorPosition wywołuje funkcję SQLSetPosinterfejsu 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 SQLSetPossystemie , 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 SetRowsetSizenależ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 bufory magazynu po wywołaniu SetRowsetSizemetody , 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 SQLSetPosinterfejsu 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 UpdateAddNew 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