Sdílet prostřednictvím


Třída CRecordset

Představuje sadu záznamů vybraných ze zdroje dat.

Syntaxe

class CRecordset : public CObject

Členové

Veřejné konstruktory

Název Popis
CRecordset::CRecordset CRecordset Vytvoří objekt. Odvozená třída musí poskytovat konstruktor, který tuto třídu volá.

Veřejné metody

Název Popis
CRecordset::AddNew Připraví se na přidání nového záznamu. Volání Update pro dokončení přidání
CRecordset::CanAppend Vrátí nenulové hodnoty, pokud je možné nové záznamy přidat do sady záznamů prostřednictvím AddNew členské funkce.
CRecordset::CanBookmark Vrátí nenulové hodnoty, pokud sada záznamů podporuje záložky.
CRecordset::Cancel Zruší asynchronní operaci nebo proces z druhého vlákna.
CRecordset::CancelUpdate Zruší všechny čekající aktualizace z důvodu AddNew operace nebo operace Edit .
CRecordset::CanRestart Vrátí nenulovou hodnotu, pokud Requery je možné volat, aby se dotaz sady záznamů spustil znovu.
CRecordset::CanScroll Vrátí nenulové hodnoty, pokud můžete procházet záznamy.
CRecordset::CanTransact Vrátí nenulové, pokud zdroj dat podporuje transakce.
CRecordset::CanUpdate Vrátí nenulové hodnoty, pokud lze sadu záznamů aktualizovat (můžete přidat, aktualizovat nebo odstranit záznamy).
CRecordset::CheckRowsetError Volané pro zpracování chyb generovaných během načítání záznamu.
CRecordset::Close Zavře sadu záznamů a přidruženou rozhraní ODBC HSTMT .
CRecordset::Delete Odstraní aktuální záznam ze sady záznamů. Po odstranění se musíte explicitně posunout na jiný záznam.
CRecordset::DoBulkFieldExchange Volá se k výměně hromadných řádků dat ze zdroje dat do sady záznamů. Implementuje hromadnou výměnu polí záznamu (Bulk RFX).
CRecordset::DoFieldExchange Volá se k výměně dat (v obou směrech) mezi datovými členy pole sady záznamů a odpovídajícím záznamem ve zdroji dat. Implementuje výměnu polí záznamů (RFX).
CRecordset::Edit Připraví se na změny aktuálního záznamu. Volání Update pro dokončení úprav
CRecordset::FlushResultSet Vrátí nenulovou hodnotu, pokud se při použití předdefinovaného dotazu načte jiná sada výsledků.
CRecordset::GetBookmark Přiřadí hodnotu záložky záznamu objektu parametru.
CRecordset::GetDefaultConnect Zavolá se pro získání výchozího připojovací řetězec.
CRecordset::GetDefaultSQL Volá se k získání výchozího řetězce SQL, který se má spustit.
CRecordset::GetFieldValue Vrátí hodnotu pole v sadě záznamů.
CRecordset::GetODBCFieldCount Vrátí počet polí v sadě záznamů.
CRecordset::GetODBCFieldInfo Vrátí konkrétní typy informací o polích v sadě záznamů.
CRecordset::GetRecordCount Vrátí počet záznamů v sadě záznamů.
CRecordset::GetRowsetSize Vrátí počet záznamů, které chcete načíst během jednoho načtení.
CRecordset::GetRowsFetched Vrátí skutečný počet řádků načtených během načítání.
CRecordset::GetRowStatus Vrátí stav řádku po načtení.
CRecordset::GetSQL Získá řetězec SQL použitý k výběru záznamů pro sadu záznamů.
CRecordset::GetStatus Získá stav sady záznamů: index aktuálního záznamu a zda byl získán konečný počet záznamů.
CRecordset::GetTableName Získá název tabulky, na které je sada záznamů založena.
CRecordset::IsBOF Vrátí nenulové hodnoty, pokud byla sada záznamů umístěna před prvním záznamem. Neexistuje žádný aktuální záznam.
CRecordset::IsDeleted Vrátí nenulovou hodnotu, pokud je sada záznamů umístěna na odstraněný záznam.
CRecordset::IsEOF Vrátí nenulové hodnoty, pokud byla sada záznamů umístěna za posledním záznamem. Neexistuje žádný aktuální záznam.
CRecordset::IsFieldDirty Vrátí nenulové, pokud bylo změněno zadané pole v aktuálním záznamu.
CRecordset::IsFieldNull Vrátí nenulové pole, pokud zadané pole v aktuálním záznamu má hodnotu null (nemá žádnou hodnotu).
CRecordset::IsFieldNullable Vrátí nenulové, pokud zadané pole v aktuálním záznamu může být nastaveno na hodnotu null (bez hodnoty).
CRecordset::IsOpen Vrátí nenulovou hodnotu, pokud Open byla dříve volána.
CRecordset::Move Umístí sadu záznamů do zadaného počtu záznamů z aktuálního záznamu v libovolném směru.
CRecordset::MoveFirst Umístí aktuální záznam na první záznam v sadě záznamů. IsBOF Nejprve otestujte.
CRecordset::MoveLast Umístí aktuální záznam na poslední záznam nebo na poslední sadu řádků. IsEOF Nejprve otestujte.
CRecordset::MoveNext Umístí aktuální záznam na další záznam nebo do další sady řádků. IsEOF Nejprve otestujte.
CRecordset::MovePrev Umístí aktuální záznam na předchozí záznam nebo na předchozí sadu řádků. IsBOF Nejprve otestujte.
CRecordset::OnSetOptions Volá se k nastavení možností (při výběru) pro zadaný příkaz ODBC.
CRecordset::OnSetUpdateOptions Volá se k nastavení možností (používá se při aktualizaci) pro zadaný příkaz ODBC.
CRecordset::Open Otevře sadu záznamů načtením tabulky nebo provedením dotazu, který sada záznamů představuje.
CRecordset::RefreshRowset Aktualizuje data a stav zadaných řádků.
CRecordset::Requery Spustí dotaz sady záznamů znovu a aktualizuje vybrané záznamy.
CRecordset::SetAbsolutePosition Umístí sadu záznamů na záznam odpovídající zadanému číslu záznamu.
CRecordset::SetBookmark Umístí sadu záznamů na záznam určený záložkou.
CRecordset::SetFieldDirty Označí zadané pole v aktuálním záznamu jako změněné.
CRecordset::SetFieldNull Nastaví hodnotu zadaného pole v aktuálním záznamu na hodnotu null (bez hodnoty).
CRecordset::SetLockingMode Nastaví režim uzamčení na optimistické uzamčení (výchozí) nebo pesimistické uzamčení. Určuje, jak jsou záznamy uzamčeny pro aktualizace.
CRecordset::SetParamNull Nastaví zadaný parametr na hodnotu null (bez hodnoty).
CRecordset::SetRowsetCursorPosition Umístí kurzor na zadaný řádek v sadě řádků.
CRecordset::SetRowsetSize Určuje počet záznamů, které chcete načíst během načítání.
CRecordset::Update AddNew Dokončí operaci Edit uložením nových nebo upravených dat do zdroje dat.

Veřejné datové členy

Název Popis
CRecordset::m_hstmt Obsahuje popisovač příkazu ODBC pro sadu záznamů. Zadejte HSTMT.
CRecordset::m_nFields Obsahuje počet datových členů pole v sadě záznamů. Zadejte UINT.
CRecordset::m_nParams Obsahuje počet členů dat parametrů v sadě záznamů. Zadejte UINT.
CRecordset::m_pDatabase Obsahuje ukazatel na CDatabase objekt, přes který je sada záznamů připojena ke zdroji dat.
CRecordset::m_strFilter Obsahuje klauzuliCString, která určuje klauzuli jazyk SQL (Structured Query Language) (SQL). WHERE Slouží jako filtr k výběru pouze těch záznamů, které splňují určitá kritéria.
CRecordset::m_strSort Obsahuje klauzuli CString , která určuje klauzuli SQL ORDER BY . Slouží k řízení způsobu řazení záznamů.

Poznámky

Objekty označované jako "sady záznamů" CRecordset se obvykle používají ve dvou formách: dynasety a snímky. Dynamická sada zůstane synchronizovaná s aktualizacemi dat provedenými jinými uživateli. Snímek je statické zobrazení dat. Každý formulář představuje sadu záznamů opravených při otevření sady záznamů. Když se posunete na záznam v dynasetu, odráží změny provedené v záznamu, a to buď jinými uživateli, nebo jinými sadami záznamů ve vaší aplikaci.

Poznámka:

Pokud pracujete s třídami DAO (Data Access Objects) místo tříd ODBC (Open Database Připojení ivity), použijte místo toho tříduCDaoRecordset. Další informace naleznete v tématu Přehled: Programování databáze.

Chcete-li pracovat s některým druhem sady záznamů, obvykle odvození třídy sady záznamů specifické pro aplikaci z CRecordset. Sady záznamů vyberou záznamy ze zdroje dat a pak můžete:

  • Procházejte záznamy.

  • Aktualizujte záznamy a zadejte režim uzamčení.

  • Vyfiltrujte sadu záznamů tak, aby omezila, které záznamy vybere z těch dostupných ve zdroji dat.

  • Seřaďte sadu záznamů.

  • Parametrizovat sadu záznamů tak, aby přizpůsobila svůj výběr s informacemi, které nejsou známé do doby běhu.

Chcete-li použít vaši třídu, otevřete databázi a vytvořte objekt sady záznamů a předejte konstruktor ukazatel na objekt CDatabase . Potom zavolejte členskou Open funkci sady záznamů, kde můžete určit, zda je objekt dynaset nebo snímek. Volání Open vybere data ze zdroje dat. Po otevření objektu sady záznamů můžete pomocí jejích členských funkcí a datových členů procházet záznamy a pracovat s nimi. Dostupné operace závisí na tom, jestli je objekt dynaset nebo snímek, jestli je aktualizovatelný nebo jen pro čtení (to závisí na schopnosti zdroje dat Open Database Připojení ivity (ODBC) a jestli jste implementovali hromadné načítání řádků. Chcete-li aktualizovat záznamy, které mohly být změněny nebo přidány od Open volání, zavolejte členskou funkci objektu Requery . Volání členské funkce objektu Close a zničení objektu po dokončení.

V odvozené CRecordset třídě se pro podporu čtení a aktualizace polí záznamů používá výměna polí záznamu (RFX) nebo hromadná výměna polí záznamu (Bulk RFX).

Další informace o sadách záznamů a výměně polí záznamů najdete v článcích Přehled: Programování databáze, sada záznamů (ODBC), sada záznamů: Načítání záznamů hromadně (ODBC) a Výměna polí záznamů (RFX). Pokud se chcete zaměřit na dynamické sady a snímky, přečtěte si články Dynaset a Snapshot.

Hierarchie dědičnosti

CObject

CRecordset

Požadavky

Záhlaví:afxdb.h

CRecordset::AddNew

Připraví se na přidání nového záznamu do tabulky.

virtual void AddNew();

Poznámky

Pokud chcete zobrazit nově přidaný záznam, musíte volat Requery členovu funkci. Pole záznamu jsou zpočátku null. (V terminologii databáze hodnota Null znamená, že hodnota nemá žádnou hodnotu a není stejná jako hodnota NULL v jazyce C++.) K dokončení operace je nutné volat členovu Update funkci. Update uloží změny ve zdroji dat.

Poznámka:

Pokud jste implementovali hromadné načítání řádků, nemůžete volat AddNew. Výsledkem bude neúspěšný kontrolní výraz. I když třída CRecordset neposkytuje mechanismus pro aktualizaci hromadných řádků dat, můžete psát vlastní funkce pomocí funkce SQLSetPosrozhraní ODBC API . Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

AddNew připraví nový prázdný záznam pomocí datových členů sady záznamů. Po volání AddNewnastavte požadované hodnoty v datových členech sady záznamů. (Nemusíte volat Upravit členské funkce pro tento účel; použít Edit pouze pro existující záznamy.) Při volání Updatese změněné hodnoty v datových členech polí ukládají do zdroje dat.

Upozornění

Pokud se před voláním Updateposunete na nový záznam, nový záznam se ztratí a nebude se zobrazovat žádné upozornění.

Pokud zdroj dat podporuje transakce, můžete provést AddNew volání části transakce. Další informace o transakcích naleznete v tématu třída CDatabase. Zavolejte CDatabase::BeginTrans před voláním AddNew.

Poznámka:

U dynamických sad se nové záznamy přidají do sady záznamů jako poslední záznam. Přidané záznamy nejsou přidány do snímků; musíte volat Requery , aby se sada záznamů aktualizovala.

Volání AddNew sady záznamů, jejíž Open členská funkce nebyla volána. Vyvolá CDBException se, pokud voláte AddNew sadu záznamů, ke které není možné připojit. Můžete určit, zda je sada záznamů aktualizovatelná voláním CanAppend.

Další informace najdete v následujících článcích: Sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC),sada záznamů: Přidávání, aktualizace a odstraňování záznamů (ODBC) a transakce (ODBC).

Příklad

Viz Transakce: Provádění transakce v sadě záznamů (ODBC).

CRecordset::CanAppend

Určuje, zda dříve otevřená sada záznamů umožňuje přidat nové záznamy.

BOOL CanAppend() const;

Vrácená hodnota

Nenulové, pokud sada záznamů umožňuje přidávat nové záznamy; jinak 0. CanAppend vrátí hodnotu 0, pokud jste otevřeli sadu záznamů jen pro čtení.

CRecordset::CanBookmark

Určuje, zda sada záznamů umožňuje označit záznamy pomocí záložek.

BOOL CanBookmark() const;

Vrácená hodnota

Nenulové, pokud sada záznamů podporuje záložky; jinak 0.

Poznámky

Tato funkce je nezávislá na CRecordset::useBookmarks možnosti v dwOptions parametru Open členské funkce. CanBookmark určuje, zda daný ovladač ODBC a typ kurzoru podporují záložky. CRecordset::useBookmarks označuje, jestli budou záložky k dispozici, pokud jsou podporované.

Poznámka:

Záložky nejsou podporovány u sad záznamů jen pro předávání.

Další informace o záložkách a navigaci v sadě záznamů naleznete v článcích Sada záznamů: Záložky a Absolutní pozice (ODBC) a Sada záznamů: Posouvání (ODBC).

CRecordset::Cancel

Vyžaduje, aby zdroj dat zrušil probíhající asynchronní operaci nebo proces z druhého vlákna.

void Cancel();

Poznámky

Třídy MFC ODBC již nepoužívají asynchronní zpracování; k provedení asynchronní operace je nutné přímo volat funkci SQLSetConnectOptionrozhraní ODBC API . Další informace naleznete v tématu Spouštění funkcí asynchronně v průvodci programátorem sady ODBC SDK.

CRecordset::CancelUpdate

Zruší všechny čekající aktualizace způsobené nějakou Edit operací AddNew před Update zavoláním.

void CancelUpdate();

Poznámky

Poznámka:

Tato členová funkce se nevztahuje na sady záznamů, které používají hromadné načítání řádků, protože tyto sady záznamů nemohou volat Edit, AddNewnebo Update. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Pokud je povolena automatická kontrola nezašpiněných polí, CancelUpdate obnoví členské proměnné na hodnoty, které předtím měly Edit nebo AddNew byly volány. Jinak všechny změny hodnoty zůstanou. Ve výchozím nastavení je automatická kontrola polí povolená při otevření sady záznamů. Chcete-li tuto funkci zakázat, je nutné zadat CRecordset::noDirtyFieldCheck parametr dwOptionsfunkce Open member.

Další informace o aktualizaci dat naleznete v tématu Sada záznamů: Přidání, aktualizace a odstranění záznamů (ODBC).

CRecordset::CanRestart

Určuje, zda sada záznamů umožňuje restartovat svůj dotaz (aktualizovat jeho záznamy) voláním Requery členské funkce.

BOOL CanRestart() const;

Vrácená hodnota

Nenulové, pokud je povoleno opětovné dotazování; jinak 0.

CRecordset::CanScroll

Určuje, zda sada záznamů umožňuje posouvání.

BOOL CanScroll() const;

Vrácená hodnota

Nenulové, pokud sada záznamů umožňuje posouvání; jinak 0.

Poznámky

Další informace o posouvání naleznete v tématu Sada záznamů: Posouvání (ODBC).

CRecordset::CanTransact

Určuje, zda sada záznamů umožňuje transakce.

BOOL CanTransact() const;

Vrácená hodnota

Nenulové, pokud sada záznamů umožňuje transakce; jinak 0.

Poznámky

Další informace naleznete v tématu Transakce (ODBC).

CRecordset::CanUpdate

Určuje, zda lze sadu záznamů aktualizovat.

BOOL CanUpdate() const;

Vrácená hodnota

Nenulové, pokud lze sadu záznamů aktualizovat; jinak 0.

Poznámky

Sada záznamů může být jen pro čtení, pokud je podkladový zdroj dat jen pro čtení nebo pokud jste CRecordset::readOnly zadali v parametru dwOptions při otevření sady záznamů.

CRecordset::CheckRowsetError

Volané pro zpracování chyb generovaných během načítání záznamu.

virtual void CheckRowsetError(RETCODE nRetCode);

Parametry

nRetCode
Návratový kód funkce rozhraní ODBC API Podrobnosti najdete v části Poznámky.

Poznámky

Tato virtuální členová funkce zpracovává chyby, ke kterým dochází při načítání záznamů, a je užitečná při hromadném načítání řádků. Možná budete chtít zvážit přepsání CheckRowsetError , abyste implementovali vlastní zpracování chyb.

CheckRowsetError je volána automaticky v navigační operaci kurzoru, například Open, Requerynebo jakoukoli Move operaci. Předá se návratová hodnota funkce SQLExtendedFetchrozhraní ODBC API . Následující tabulka uvádí možné hodnoty parametru nRetCode .

nRetCode Popis
SQL_SUCCESS Funkce byla úspěšně dokončena; nejsou k dispozici žádné další informace.
SQL_SUCCESS_WITH_INFO Funkce byla úspěšně dokončena, pravděpodobně s méně závažnou chybou. Další informace lze získat voláním SQLError.
SQL_NO_DATA_FOUND Všechny řádky ze sady výsledků byly načteny.
SQL_ERROR Funkce se nezdařila. Další informace lze získat voláním SQLError.
SQL_INVALID_HANDLE Funkce selhala kvůli neplatnému popisovači prostředí, popisovači připojení nebo popisovači příkazu. To značí chybu programování. Žádné další informace nejsou k dispozici od SQLErrorspolečnosti .
SQL_STILL_EXECUTING Funkce, která byla spuštěna asynchronně, se stále spouští. Mfc ve výchozím nastavení nikdy nepředá tuto hodnotu CheckRowsetError; MFC bude pokračovat v volání SQLExtendedFetch , dokud se už nevrátí SQL_STILL_EXECUTING.

Další informace naleznete v SQLErrorsadě Windows SDK. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

CRecordset::Close

Zavře sadu záznamů.

virtual void Close();

Poznámky

Rozhraní ODBC HSTMT a veškerá paměť přidělená sadě záznamů jsou uvolněny. Obvykle po volání Close, odstraníte C++ objekt sady záznamů, pokud byl přidělen new.

Po volání můžete volat OpenCloseznovu . To vám umožní znovu použít objekt sady záznamů. Alternativou je volání Requery.

Příklad

// 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 Vytvoří objekt.

CRecordset(CDatabase* pDatabase = NULL);

Parametry

pDatabase
Obsahuje ukazatel na CDatabase objekt nebo hodnotu NULL. Pokud ne NULL a členská Open funkce objektu nebyla volána pro připojení ke zdroji dat, sada záznamů se pokusí otevřít pro vás během vlastního Open volání.CDatabase Pokud předáte NULL, CDatabase objekt je vytvořen a připojen za vás pomocí informací o zdroji dat, které jste zadali při odvození třídy sady záznamů pomocí ClassWizard.

Poznámky

Můžete buď použít CRecordset přímo nebo odvodit třídu specifickou pro aplikaci z CRecordset. Třídy ClassWizard můžete použít k odvození tříd sady záznamů.

Poznámka:

Odvozená třída musí zadat vlastní konstruktor. V konstruktoru odvozené třídy zavolejte konstruktor CRecordset::CRecordset, předat příslušné parametry spolu s ním.

Předejte NULL konstruktoru sady záznamů, aby byl CDatabase objekt vytvořen a připojen automaticky. Jedná se o užitečnou zkratku, která nevyžaduje vytvoření a připojení objektu CDatabase před vytvořením sady záznamů.

Příklad

Další informace naleznete v tématu Sada záznamů: Deklarování třídy pro tabulku (ODBC).

CRecordset::Delete

Odstraní aktuální záznam.

virtual void Delete();

Poznámky

Po úspěšném odstranění jsou datové členy sady záznamů nastaveny na hodnotu Null a pokud chcete přesunout odstraněný záznam, musíte explicitně volat jednu z Move funkcí. Jakmile přesunete odstraněný záznam, není možné se k němu vrátit. Pokud zdroj dat podporuje transakce, můžete provést Delete volání části transakce. Další informace naleznete v tématu Transakce (ODBC).

Poznámka:

Pokud jste implementovali hromadné načítání řádků, nemůžete volat Delete. Výsledkem bude neúspěšný kontrolní výraz. I když třída CRecordset neposkytuje mechanismus pro aktualizaci hromadných řádků dat, můžete psát vlastní funkce pomocí funkce SQLSetPosrozhraní ODBC API . Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Upozornění

Sada záznamů musí být aktualizovatelná a při volání Deletemusí existovat platný záznam aktuální v sadě záznamů. V opačném případě dojde k chybě. Pokud například odstraníte záznam, ale nepřesouvejte se před dalším voláním Delete na nový záznam, Delete vyvolá výjimku CDBException.

Na rozdíl od AddNew volání a Editvolání Delete není následované voláním Update. Delete Pokud volání selže, datové členy pole zůstanou beze změny.

Příklad

Tento příklad ukazuje sadu záznamů vytvořenou v rámci funkce. Příklad předpokládá existenci m_dbCustčlenské proměnné typu CDatabase , která je již připojena ke zdroji dat.

// 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

Volá se k výměně hromadných řádků dat ze zdroje dat do sady záznamů. Implementuje hromadnou výměnu polí záznamu (Bulk RFX).

virtual void DoBulkFieldExchange(CFieldExchange* pFX);

Parametry

pFX
Ukazatel na CFieldExchange objekt. Architektura již bude mít nastaven tento objekt k určení kontextu pro operaci výměny polí.

Poznámky

Při hromadném načítání řádků je implementováno rozhraní volá tuto členovu funkci, aby automaticky přenášela data ze zdroje dat do objektu sady záznamů. DoBulkFieldExchange také vytvoří vazbu datových členů parametru(pokud existuje) na zástupné symboly parametrů v řetězci příkazu SQL pro výběr sady záznamů.

Pokud hromadné načítání řádků není implementováno, volá DoFieldExchangerozhraní . Chcete-li implementovat hromadné načítání řádků, je nutné zadat CRecordset::useMultiRowFetch možnost parametru dwOptions v Open členské funkci.

Poznámka:

DoBulkFieldExchange je k dispozici pouze v případě, že používáte třídu odvozenou z CRecordset. Pokud jste vytvořili objekt sady záznamů přímo z CRecordset, je nutné volat členovou GetFieldValue funkci pro načtení dat.

Výměna polí hromadného záznamu (Bulk RFX) se podobá výměně polí záznamu (RFX). Data se automaticky přenášejí ze zdroje dat do objektu sady záznamů. Nemůžete ale volat AddNew, Edit, Deletenebo Update přenést změny zpět do zdroje dat. Třída CRecordset v současné době neposkytuje mechanismus pro aktualizaci hromadných řádků dat. Vlastní funkce ale můžete napsat pomocí funkce SQLSetPosrozhraní ODBC API .

TřídaWizard nepodporuje hromadnou výměnu polí záznamu; proto je nutné přepsat DoBulkFieldExchange ručně zápisem volání funkcí Bulk RFX. Další informace o těchto funkcích naleznete v tématu Funkce výměny polí záznamu.

Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC). Související informace najdete v tématu Výměna polí záznamu (RFX).

CRecordset::DoFieldExchange

Volá se k výměně dat (v obou směrech) mezi datovými členy pole sady záznamů a odpovídajícím záznamem ve zdroji dat. Implementuje výměnu polí záznamů (RFX).

virtual void DoFieldExchange(CFieldExchange* pFX);

Parametry

pFX
Ukazatel na CFieldExchange objekt. Architektura již bude mít nastaven tento objekt k určení kontextu pro operaci výměny polí.

Poznámky

Pokud není implementováno hromadné načítání řádků, architektura volá tuto členkou funkci, aby automaticky vyměňovala data mezi datovými členy pole objektu sady záznamů a odpovídajícími sloupci aktuálního záznamu ve zdroji dat. DoFieldExchange také vytvoří vazbu datových členů parametru(pokud existuje) na zástupné symboly parametrů v řetězci příkazu SQL pro výběr sady záznamů.

Pokud je implementováno hromadné načítání řádků, architektura volá DoBulkFieldExchange. Chcete-li implementovat hromadné načítání řádků, je nutné zadat CRecordset::useMultiRowFetch možnost dwOptions parametru Open ve členské funkci.

Poznámka:

DoFieldExchange je k dispozici pouze v případě, že používáte třídu odvozenou z CRecordset. Pokud jste vytvořili objekt sady záznamů přímo z CRecordset, je nutné volat GetFieldValue členské funkce pro načtení dat.

Výměna dat polí, označovaná jako výměna polí záznamu (RFX), funguje v obou směrech: od datových členů objektu sady záznamů k polím záznamu ve zdroji dat a ze záznamu ve zdroji dat do objektu sady záznamů.

Jedinou akcí, kterou je nutné provést k implementaci DoFieldExchange pro odvozenou třídu sady záznamů, je vytvořit třídu pomocí TřídyWizard a zadat názvy a datové typy datových členů pole. Můžete také přidat kód k tomu, co ClassWizard zapisuje za účelem určení datových členů parametrů nebo zpracování jakýchkoli sloupců, které svážete dynamicky. Další informace naleznete v tématu Sada záznamů: Dynamické vazby datových sloupců (ODBC).

Když deklarujete odvozenou třídu sady záznamů pomocí TřídyWizard, průvodce zapíše přepsání DoFieldExchange za vás, které se podobá následujícímu příkladu:

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);
}

Další informace o funkcích RFX naleznete v tématu Funkce výměny polí záznamu.

Další příklady a podrobnosti o DoFieldExchangenástroji Record Field Exchange: How RFX Works. Obecné informace o dokumentu RFX naleznete v tématu Výměna polí záznamu.

CRecordset::Edit

Umožňuje změny aktuálního záznamu.

virtual void Edit();

Poznámky

Po volání Editmůžete datové členy pole změnit přímo resetováním jejich hodnot. Operace se dokončí při volání Update členské funkce, aby se změny uložily do zdroje dat.

Poznámka:

Pokud jste implementovali hromadné načítání řádků, nemůžete volat Edit. Výsledkem bude neúspěšný kontrolní výraz. I když třída CRecordset neposkytuje mechanismus pro aktualizaci hromadných řádků dat, můžete psát vlastní funkce pomocí funkce SQLSetPosrozhraní ODBC API . Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Edit uloží hodnoty datových členů sady záznamů. Pokud voláte Edit, proveďte změny a pak znovu volejte Edit , hodnoty záznamu se obnoví do toho, co byly před prvním Edit voláním.

V některých případech můžete chtít sloupec aktualizovat tak, že ho vytvoříte null (obsahující žádná data). Uděláte to tak, že zavoláte SetFieldNull s parametrem TRUE, který označí pole Null. To také způsobí aktualizaci sloupce. Pokud chcete, aby se pole zapisovalo do zdroje dat, i když se jeho hodnota nezměnila, zavolejte SetFieldDirty s parametrem PRAVDA. To funguje i v případě, že pole mělo hodnotu Null.

Pokud zdroj dat podporuje transakce, můžete provést Edit volání části transakce. Hovor CDatabase::BeginTrans před voláním Edit a po otevření sady záznamů CDatabase::CommitTrans Volání také není náhradou za volání Update k Edit dokončení operace. Další informace o transakcích naleznete v tématu třída CDatabase.

V závislosti na aktuálním režimu uzamčení může být záznam, který se aktualizuje, uzamčen, Edit dokud nezavoláte Update nebo se posunete na jiný záznam, nebo může být uzamčen pouze během Edit hovoru. Režim uzamčení můžete změnit pomocí SetLockingModefunkce .

Předchozí hodnota aktuálního záznamu se obnoví, pokud se před voláním Updateposunete na nový záznam . Vyvolá CDBException se, pokud voláte Edit sadu záznamů, která se nedá aktualizovat nebo pokud neexistuje žádný aktuální záznam.

Další informace naleznete v článcích Transakce (ODBC) a Sada záznamů: Uzamčení záznamů (ODBC).

Příklad

// 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

Načte další sadu výsledků předdefinovaného dotazu (uložená procedura), pokud existuje více sad výsledků.

BOOL FlushResultSet();

Vrácená hodnota

Nenulové, pokud je potřeba načíst více sad výsledků; jinak 0.

Poznámky

Volání byste měli volat FlushResultSet pouze v případě, že jste hotovi s kurzorem na aktuální sadě výsledků. Při načtení další sady výsledků voláním FlushResultSetnení kurzor v této sadě výsledků platný. Po volání byste měli zavolat MoveNextFlushResultSetčlenovu funkci .

Pokud předdefinovaný dotaz používá výstupní parametr nebo vstupní/výstupní parametry, musíte volat FlushResultSet , dokud se nevrátí FALSE(hodnota 0), aby se tyto hodnoty parametrů získaly.

FlushResultSet volá funkci SQLMoreResultsrozhraní ODBC API . Pokud SQLMoreResults se vrátí SQL_ERROR nebo SQL_INVALID_HANDLE, vyvolá FlushResultSet výjimku. Další informace naleznete v SQLMoreResultssadě Windows SDK.

Uložená procedura musí mít svázaná pole, pokud chcete volat FlushResultSet.

Příklad

Následující kód předpokládá, že COutParamRecordset je odvozený CRecordsetobjekt založený na předdefinovaném dotazu se vstupním parametrem a výstupním parametrem a má více sad výsledků. Poznamenejte si strukturu přepsání DoFieldExchange .

// 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

Získá hodnotu záložky pro aktuální záznam.

void GetBookmark(CDBVariant& varBookmark);

Parametry

varBookmark
Odkaz na CDBVariant objekt představující záložku aktuálního záznamu.

Poznámky

Chcete-li zjistit, zda jsou záložky podporovány v sadě záznamů, zavolejte CanBookmark. Pokud chcete, aby byly záložky dostupné, pokud jsou podporované, musíte nastavit CRecordset::useBookmarks možnost v dwOptions parametru Open členské funkce.

Poznámka:

Pokud záložky nejsou podporované nebo nedostupné, volání GetBookmark způsobí vyvolání výjimky. Záložky nejsou podporovány u sad záznamů jen pro předávání.

GetBookmark přiřadí hodnotu záložky pro aktuální záznam objektu CDBVariant . Pokud se chcete k danému záznamu kdykoli vrátit po přesunutí na jiný záznam, zavolejte SetBookmark s odpovídajícím CDBVariant objektem.

Poznámka:

Po určitých operacích sady záznamů už záložky nemusí být platné. Pokud například zavoláte GetBookmark , Requerypak se pravděpodobně nebudete moct vrátit k záznamu pomocí SetBookmarkpříkazu . Zavolejte CDatabase::GetBookmarkPersistence a zkontrolujte, jestli můžete bezpečně volat SetBookmark.

Další informace o záložkách a navigaci v sadě záznamů naleznete v článcích Sada záznamů: Záložky a Absolutní pozice (ODBC) a Sada záznamů: Posouvání (ODBC).

CRecordset::GetDefaultConnect

Zavolá se pro získání výchozího připojovací řetězec.

virtual CString GetDefaultConnect();

Vrácená hodnota

A CString obsahující výchozí připojovací řetězec.

Poznámky

Architektura volá tuto členovou funkci, aby získala výchozí připojovací řetězec pro zdroj dat, na kterém je sada záznamů založena. ClassWizard implementuje tuto funkci za vás identifikací stejného zdroje dat, který ClassWizard používáte k získání informací o tabulkách a sloupcích. Pravděpodobně zjistíte, že je vhodné při vývoji aplikace spoléhat na toto výchozí připojení. Výchozí připojení ale nemusí být vhodné pro uživatele vaší aplikace. V takovém případě byste měli tuto funkci znovu zkompilovat a zahodit ClassWizardverzi. Další informace o připojovací řetězec naleznete v tématu Zdroj dat (ODBC).

CRecordset::GetDefaultSQL

Volá se k získání výchozího řetězce SQL, který se má spustit.

virtual CString GetDefaultSQL();

Vrácená hodnota

A CString , který obsahuje výchozí příkaz SQL.

Poznámky

Architektura volá tuto členovou funkci k získání výchozího příkazu SQL, na kterém je sada záznamů založena. Může se jednat o název tabulky nebo příkaz SQL SELECT .

Implicitně definujete výchozí příkaz SQL deklarováním třídy sady záznamů a ClassWizardClassWizard provedete tuto úlohu za vás.

Pokud potřebujete řetězec příkazu SQL pro vlastní použití, volání GetSQL, které vrátí příkaz SQL použitý k výběru záznamů sady záznamů při jeho otevření. Výchozí řetězec SQL můžete upravit v přepsání GetDefaultSQLtřídy . Můžete například zadat volání předdefinovaného dotazu pomocí CALL příkazu. (Všimněte si však, že pokud upravujete GetDefaultSQL, musíte také upravit m_nFields tak, aby odpovídaly počtu sloupců ve zdroji dat.)

Další informace naleznete v tématu Sada záznamů: Deklarování třídy pro tabulku (ODBC).

Upozornění

Název tabulky bude prázdný, pokud architektura nemohla identifikovat název tabulky, pokud bylo zadáno více názvů tabulek nebo nelze CALL interpretovat příkaz. Při použití CALL příkazu nevkládejte prázdné znaky mezi složenou závorku a CALL klíčové slovo ani před složenou závorku nebo před SELECT klíčové slovo v SELECT příkazu.

CRecordset::GetFieldValue

Načte data polí v aktuálním záznamu.

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
Název pole.

varValue Odkaz na CDBVariant objekt, který bude ukládat hodnotu pole.

nFieldType
Datový typ ODBC C pole. Pomocí výchozí hodnoty DEFAULT_FIELD_TYPEvynutí GetFieldValue určit datový typ jazyka C z datového typu SQL na základě následující tabulky. V opačném případě můžete datový typ zadat přímo nebo zvolit kompatibilní datový typ; Můžete například uložit libovolný datový typ do SQL_C_CHAR.

Datový typ jazyka C Datový typ 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

Další informace o datových typech ODBC naleznete v tématech "Datové typy SQL" a "Datové typy jazyka C" v dodatku D sady Windows SDK.

nIndex
Index pole založený na nule.

strValue
Odkaz na CString objekt, který uloží hodnotu pole převedenou na text bez ohledu na datový typ pole.

Poznámky

Pole můžete vyhledat podle názvu nebo podle indexu. Hodnotu pole můžete uložit do objektu CDBVariant nebo objektu CString .

Pokud jste implementovali hromadné načítání řádků, aktuální záznam se vždy umístí na první záznam v sadě řádků. Chcete-li použít GetFieldValue záznam v rámci dané sady řádků, musíte nejprve zavolat SetRowsetCursorPosition členovou funkci, aby se kurzor přesunul na požadovaný řádek v této sadě řádků. Pak zavolejte GetFieldValue na tento řádek. Chcete-li implementovat hromadné načítání řádků, je nutné zadat CRecordset::useMultiRowFetch možnost dwOptions parametru Open ve členské funkci.

Pole můžete použít GetFieldValue k dynamickému načítání polí za běhu místo statické vazby v době návrhu. Pokud jste například deklarovali objekt sady záznamů přímo z CRecordset, musíte použít GetFieldValue k načtení dat pole, výměnu polí záznamů (RFX) nebo hromadnou výměnu polí záznamů (Bulk RFX), není implementována.

Poznámka:

Pokud deklarujete objekt sady záznamů bez odvození , CRecordsetnemá načtenou knihovnu KURZOR ODBC. Knihovna kurzorů vyžaduje, aby sada záznamů měla alespoň jeden vázaný sloupec; Pokud však použijete CRecordset přímo, žádný ze sloupců není vázán. Členské funkce CDatabase::OpenEx a CDatabase::Open řídí, zda bude načtena knihovna kurzorů.

GetFieldValue volá funkci SQLGetDatarozhraní ODBC API . Pokud ovladač vypíše hodnotu SQL_NO_TOTAL pro skutečnou délku hodnoty pole, GetFieldValue vyvolá výjimku. Další informace naleznete v SQLGetDatasadě Windows SDK.

Příklad

Následující ukázkový kód znázorňuje volání GetFieldValue objektu sady záznamů deklarovaného přímo z CRecordset.

// 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();

Poznámka:

Na rozdíl od třídy CDaoRecordsetCRecordset DAO nemá členovou SetFieldValue funkci. Pokud vytváříte objekt přímo z CRecordset, je to efektivně jen pro čtení.

Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

CRecordset::GetODBCFieldCount

Načte celkový počet polí v objektu sady záznamů.

short GetODBCFieldCount() const;

Vrácená hodnota

Počet polí v sadě záznamů.

Poznámky

Další informace o vytváření sad záznamů naleznete v tématu Sada záznamů: Vytváření a zavírání sad záznamů (ODBC).

CRecordset::GetODBCFieldInfo

Získá informace o polích v sadě záznamů.

void GetODBCFieldInfo(
    LPCTSTR lpszName,
    CODBCFieldInfo& fieldinfo);

void GetODBCFieldInfo(
    short nIndex,
    CODBCFieldInfo& fieldinfo);

Parametry

lpszName
Název pole.

fieldinfo
Odkaz na CODBCFieldInfo strukturu.

nIndex
Index pole založený na nule.

Poznámky

Jedna verze funkce umožňuje vyhledat pole podle názvu. Druhá verze umožňuje vyhledat pole podle indexu.

Popis vrácených informací naleznete ve struktuře CODBCFieldInfo .

Další informace o vytváření sad záznamů naleznete v tématu Sada záznamů: Vytváření a zavírání sad záznamů (ODBC).

CRecordset::GetRecordCount

Určuje velikost sady záznamů.

long GetRecordCount() const;

Vrácená hodnota

Počet záznamů v sadě záznamů; 0, pokud sada záznamů neobsahuje žádné záznamy; nebo -1, pokud se počet záznamů nedá určit.

Poznámky

Upozornění

Počet záznamů se udržuje jako "horní značka", záznam s nejvyšším číslem, který se zatím považuje za uživatele, který prochází záznamy. Celkový počet záznamů je znám až po přesunutí uživatele za poslední záznam. Z důvodů výkonu se počet při volání MoveLastneaktualizuje. Pokud chcete spočítat záznamy sami, zavolejte MoveNext opakovaně, dokud IsEOF nenulově nevrátíte. Přidání záznamu prostřednictvím CRecordset:AddNew a Update zvýšení počtu; odstranění záznamu snížením CRecordset::Delete počtu.

CRecordset::GetRowsetSize

Získá aktuální nastavení počtu řádků, které chcete načíst během daného načtení.

DWORD GetRowsetSize() const;

Vrácená hodnota

Početřádkůch

Poznámky

Pokud používáte hromadné načítání řádků, výchozí velikost sady řádků při otevření sady záznamů je 25; jinak je to 1.

Chcete-li implementovat hromadné načítání řádků, je nutné zadat CRecordset::useMultiRowFetch možnost v dwOptions parametru Open členské funkce. Pokud chcete změnit nastavení velikosti sady řádků, zavolejte SetRowsetSize.

Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

CRecordset::GetRowsFetched

Určuje, kolik záznamů bylo načteno po načtení.

DWORD GetRowsFetched() const;

Vrácená hodnota

Počet řádků načtených ze zdroje dat po daném načtení

Poznámky

To je užitečné, když jste implementovali hromadné načítání řádků. Velikost sady řádků obvykle označuje, kolik řádků se načte z načtení. Celkový počet řádků v sadě záznamů ale ovlivňuje také počet řádků, které se načtou v sadě řádků. Pokud má například sada záznamů 10 záznamů s nastavením velikosti sady řádků 4, bude smyčka procházet sadou záznamů voláním MoveNext , aby konečná sada řádků měla pouze dva záznamy.

Chcete-li implementovat hromadné načítání řádků, je nutné zadat CRecordset::useMultiRowFetch možnost v parametru Open dwOptions členské funkce. Chcete-li zadat velikost sady řádků, zavolejte SetRowsetSize.

Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Příklad

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

Získá stav řádku v aktuální sadě řádků.

WORD GetRowStatus(WORD wRow) const;

Parametry

wRow
Jednostranná pozice řádku v aktuální sadě řádků. Tato hodnota může být v rozsahu od 1 do velikosti sady řádků.

Vrácená hodnota

Hodnota stavu pro řádek. Podrobnosti najdete v části Poznámky.

Poznámky

GetRowStatus vrátí hodnotu, která označuje buď jakoukoli změnu stavu řádku od posledního načtení ze zdroje dat, nebo že nebyl načten žádný řádek odpovídající wRow řádku. Následující tabulka uvádí možné návratové hodnoty.

Hodnota stavu Popis
SQL_ROW_SUCCESS Řádek se nezmění.
SQL_ROW_UPDATED Řádek byl aktualizován.
SQL_ROW_DELETED Řádek byl odstraněn.
SQL_ROW_ADDED Řádek byl přidán.
SQL_ROW_ERROR Řádek je kvůli chybě nedostupný.
SQL_ROW_NOROW Žádný řádek neodpovídá wRow.

Další informace naleznete v rozhraní ODBC API funkce SQLExtendedFetch v sadě Windows SDK.

CRecordset::GetStatus

Určuje index aktuálního záznamu v sadě záznamů a určuje, jestli byl poslední záznam zobrazen.

void GetStatus(CRecordsetStatus& rStatus) const;

Parametry

rStatus
Odkaz na CRecordsetStatus objekt. Další informace naleznete v tématu Poznámky.

Poznámky

CRecordset pokusy o sledování indexu, ale za určitých okolností to nemusí být možné. Podívejte se GetRecordCount na vysvětlení.

Struktura CRecordsetStatus má následující tvar:

struct CRecordsetStatus
{
    long m_lCurrentRecord;
    BOOL m_bRecordCountFinal;
};

Dva členové CRecordsetStatus mají následující významy:

  • m_lCurrentRecord Obsahuje index založený na nule aktuálního záznamu v sadě záznamů, pokud je znám. Pokud index nelze určit, obsahuje AFX_CURRENT_RECORD_UNDEFINED tento člen (-2). Pokud IsBOF je true (prázdná sada záznamů nebo pokus o posouvání před prvním záznamem), m_lCurrentRecord je nastavena na AFX_CURRENT_RECORD_BOF hodnotu (-1). Pokud je na prvním záznamu, nastaví se na 0, druhý záznam 1 atd.

  • m_bRecordCountFinal Nenulové, pokud byl zjištěn celkový počet záznamů v sadě záznamů. Obecně to musí být dosaženo tak, že začíná na začátku sady záznamů a volání MoveNext , dokud IsEOF nenulové. Pokud je tento člen nula, počítá se záznam jako vrácený GetRecordCounthodnotou -1 pouze počet záznamů "horní mez".

CRecordset::GetSQL

Voláním této členské funkce získáte příkaz SQL, který se použil k výběru záznamů sady záznamů při jeho otevření.

const CString& GetSQL() const;

Vrácená hodnota

const Odkaz na CString příkaz SQL.

Poznámky

Obvykle se jedná o příkaz SQL SELECT . Řetězec vrácený GetSQL jen pro čtení.

Řetězec vrácený obvykle se liší od jakéhokoli řetězce, který GetSQL jste mohli předat do sady záznamů v lpszSQL parametru Open členské funkci. Důvodem je to, že sada záznamů vytváří úplný příkaz SQL na základě toho, co jste předali Open, co jste zadali pomocí ClassWizard, co jste mohli zadat v m_strFilter datových členech a m_strSort všechny parametry, které jste zadali. Podrobnosti o tom, jak sada záznamů vytváří tento příkaz SQL, naleznete v tématu Recordset: How Recordsets Select Records (ODBC).

Poznámka:

Volání této členské funkce pouze po volání Open.

CRecordset::GetTableName

Získá název tabulky SQL, na které je založen dotaz sady záznamů.

const CString& GetTableName() const;

Vrácená hodnota

const Odkaz na CString název tabulky, pokud je sada záznamů založena na tabulce, jinak prázdný řetězec.

Poznámky

GetTableName je platná pouze v případě, že sada záznamů je založena na tabulce, nikoli spojení více tabulek nebo předdefinovaného dotazu (uložená procedura). Název je jen pro čtení.

Poznámka:

Volání této členské funkce pouze po volání Open.

CRecordset::IsBOF

Vrátí nenulové hodnoty, pokud byla sada záznamů umístěna před prvním záznamem. Neexistuje žádný aktuální záznam.

BOOL IsBOF() const;

Vrácená hodnota

Nenulové, pokud sada záznamů neobsahuje žádné záznamy nebo pokud jste se před prvním záznamem posouvali dozadu; jinak 0.

Poznámky

Volejte tuto členovu funkci, než se posunete ze záznamu na záznam, abyste se dozvěděli, jestli jste přešli před prvním záznamem sady záznamů. Můžete také použít IsBOF spolu s IsEOF určením, jestli sada záznamů obsahuje nějaké záznamy nebo je prázdná. Okamžitě po volání Open, pokud sada záznamů neobsahuje žádné záznamy, IsBOF vrátí nenulové. Když otevřete sadu záznamů, která má aspoň jeden záznam, první záznam je aktuální záznam a IsBOF vrátí hodnotu 0.

Pokud je prvním záznamem aktuální záznam a zavoláte MovePrev, IsBOF vrátí se nenulová hodnota. Pokud IsBOF vrátí nenulovou hodnotu a zavoláte MovePrev, dojde k chybě. Pokud IsBOF vrátí nenulovou hodnotu, aktuální záznam není definován a jakákoli akce, která vyžaduje aktuální záznam, způsobí chybu.

Příklad

Tento příklad používá IsBOF a IsEOF rozpozná omezení sady záznamů, protože kód prochází sadou záznamů v obou směrech.

// 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

Určuje, zda byl aktuální záznam odstraněn.

BOOL IsDeleted() const;

Vrácená hodnota

Nenulové, pokud je sada záznamů umístěna na odstraněný záznam; jinak 0.

Poznámky

Pokud se posunete na záznam a IsDeleted vrátíte TRUE (nenulové), musíte se před provedením jiných operací sady záznamů posunout k jinému záznamu.

Výsledek IsDeleted závisí na mnoha faktorech, jako je například typ sady záznamů, jestli je sada záznamů aktualizovatelná, jestli jste při otevření sady záznamů zadali CRecordset::skipDeletedRecords možnost, jestli vaše sady ovladačů odstranily záznamy a jestli existuje více uživatelů.

Další informace o CRecordset::skipDeletedRecords balení ovladačů naleznete v části Open member function.

Poznámka:

Pokud jste implementovali hromadné načítání řádků, neměli byste volat IsDeleted. Místo toho volejte funkci GetRowStatus member function. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

CRecordset::IsEOF

Vrátí nenulové hodnoty, pokud byla sada záznamů umístěna za posledním záznamem. Neexistuje žádný aktuální záznam.

BOOL IsEOF() const;

Vrácená hodnota

Nenulové, pokud sada záznamů neobsahuje žádné záznamy nebo pokud jste se posunovali za poslední záznam; jinak 0.

Poznámky

Volání této členské funkce při posouvání ze záznamu do záznamu, abyste se dozvěděli, jestli jste překročili poslední záznam sady záznamů. Můžete také použít IsEOF k určení, jestli sada záznamů obsahuje nějaké záznamy nebo je prázdná. Okamžitě po volání Open, pokud sada záznamů neobsahuje žádné záznamy, IsEOF vrátí nenulové. Když otevřete sadu záznamů, která má aspoň jeden záznam, první záznam je aktuální záznam a IsEOF vrátí hodnotu 0.

Pokud je posledním záznamem aktuální záznam při volání MoveNext, IsEOF vrátí nenulový záznam. Pokud IsEOF vrátí nenulovou hodnotu a zavoláte MoveNext, dojde k chybě. Pokud IsEOF vrátí nenulovou hodnotu, aktuální záznam není definován a jakákoli akce, která vyžaduje aktuální záznam, způsobí chybu.

Příklad

Podívejte se na příklad pro IsBOF.

CRecordset::IsFieldDirty

Určuje, zda byl zadaný datový člen pole změněn od nebo EditAddNew byl volána.

BOOL IsFieldDirty(void* pv);

Parametry

pv
Ukazatel na datový člen pole, jehož stav chcete zkontrolovat, nebo NULL určit, jestli některá z polí nejsou zašpiněná.

Vrácená hodnota

Nenulové, pokud se od volání AddNew změnil datový člen zadaného pole nebo Editjinak 0.

Poznámky

Data ve všech datových členech nezašpiněného pole budou přenesena do záznamu ve zdroji dat při aktualizaci aktuálního záznamu Update voláním členské funkce CRecordset (po volání Edit nebo AddNew).

Poznámka:

Tato členová funkce se nevztahuje na sady záznamů, které používají hromadné načítání řádků. Pokud jste implementovali hromadné načítání řádků, IsFieldDirty vrátí vždy hodnotu FALSE a výsledkem bude neúspěšný kontrolní výraz. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Volání IsFieldDirty obnoví účinky předchozích volání na SetFieldDirty , protože stav pole je znovu zhodnocený. AddNew V případě, že se aktuální hodnota pole liší od pseudonulové hodnoty, je stav pole nastaven zašpiněný. Edit V případě, že se hodnota pole liší od hodnoty uložené v mezipaměti, je stav pole nastaven zašpiněný.

IsFieldDirty se implementuje prostřednictvím DoFieldExchange.

Další informace o zašpiněného příznaku naleznete v tématu Sada záznamů: Jak sady záznamů vyberou záznamy (ODBC).

CRecordset::IsFieldNull

Vrátí nenulové pole, pokud zadané pole v aktuálním záznamu je Null (nemá žádnou hodnotu).

BOOL IsFieldNull(void* pv);

Parametry

pv
Ukazatel na datový člen pole, jehož stav chcete zkontrolovat, nebo NULL určit, jestli některá z polí má hodnotu Null.

Vrácená hodnota

Nenulové, pokud je zadaný datový člen pole označen jako Null; jinak 0.

Poznámky

Voláním této členské funkce určíte, zda byl datový člen zadaného pole sady záznamů označen jako Null. (V terminologii databáze znamená hodnota Null "bez hodnoty" a není stejná jako NULL v jazyce C++.) Pokud je datový člen pole označený příznakem Null, interpretuje se jako sloupec aktuálního záznamu, pro který neexistuje žádná hodnota.

Poznámka:

Tato členová funkce se nevztahuje na sady záznamů, které používají hromadné načítání řádků. Pokud jste implementovali hromadné načítání řádků, IsFieldNull vrátí se vždy FALSE a výsledkem bude neúspěšný kontrolní výraz. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

IsFieldNull se implementuje prostřednictvím DoFieldExchange.

CRecordset::IsFieldNullable

Vrátí nenulové, pokud zadané pole v aktuálním záznamu lze nastavit na Hodnotu Null (bez hodnoty).

BOOL IsFieldNullable(void* pv);

Parametry

pv
Ukazatel na datový člen pole, jehož stav chcete zkontrolovat, nebo NULL určit, jestli některá z polí může být nastavena na hodnotu Null.

Poznámky

Voláním této členské funkce určíte, zda je datový člen zadaného pole nullable (lze nastavit na hodnotu Null; C++ NULL není totéž jako null, což v terminologii databáze znamená "bez hodnoty").

Poznámka:

Pokud jste implementovali hromadné načítání řádků, nemůžete volat IsFieldNullable. Místo toho zavolejte GetODBCFieldInfo členovou funkci a určete, zda lze pole nastavit na hodnotu Null. Vždy můžete volat GetODBCFieldInfobez ohledu na to, jestli jste implementovali hromadné načítání řádků. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Pole, které nemůže mít hodnotu Null, musí mít hodnotu. Pokud se pokusíte nastavit takové pole na hodnotu Null při přidávání nebo aktualizaci záznamu, zdroj dat odmítne přidání nebo aktualizaci a Update vyvolá výjimku. K výjimce dojde při volání Update, ne při volání SetFieldNull.

Použití NULL pro první argument funkce použije funkci pouze u outputColumn polí, nikoli param polí. Například volání

SetFieldNull(NULL);

nastaví pouze outputColumn pole NULLna ; param pole nebudou ovlivněna.

Pokud chcete pracovat na param polích, musíte zadat skutečnou adresu jednotlivce param , na který chcete pracovat, například:

SetFieldNull(&m_strParam);

To znamená, že nemůžete nastavit všechna param pole tak NULL, jak je to možné s outputColumn poli.

IsFieldNullable je implementována prostřednictvím DoFieldExchange.

CRecordset::IsOpen

Určuje, jestli je sada záznamů již otevřená.

BOOL IsOpen() const;

Vrácená hodnota

Nenulové, pokud byla dříve volána nebo členská funkce objektu OpenRequery sady záznamů a sada záznamů nebyla uzavřena, jinak 0.

CRecordset::m_hstmt

Obsahuje popisovač datové struktury příkazu ODBC, typu HSTMT, přidružené k sadě záznamů.

Poznámky

Každý dotaz na zdroj dat ODBC je přidružen k objektu HSTMT.

Upozornění

Nepoužívat m_hstmt dřív Open , než byl volána.

Obvykle nemusíte přistupovat HSTMT přímo, ale možná ho budete potřebovat pro přímé spuštění příkazů SQL. Členová ExecuteSQL funkce třídy CDatabase poskytuje příklad použití m_hstmt.

CRecordset::m_nFields

Obsahuje počet datových členů pole ve třídě sady záznamů; to znamená počet sloupců vybraných sadou záznamů ze zdroje dat.

Poznámky

Konstruktor třídy sady záznamů musí inicializovat m_nFields se správným číslem. Pokud jste neimplementovali hromadné načítání řádků, ClassWizard zapíše tato inicializace za vás, když ji použijete k deklaraci třídy sady záznamů. Můžete ho také napsat ručně.

Architektura používá toto číslo ke správě interakce mezi datovými členy pole a odpovídajícími sloupci aktuálního záznamu ve zdroji dat.

Upozornění

Toto číslo musí odpovídat počtu "výstupních sloupců" registrovaných v DoFieldExchange nebo po volání SetFieldType s parametrem CFieldExchange::outputColumnDoBulkFieldExchange .

Sloupce můžete svázat dynamicky, jak je vysvětleno v článku Sada záznamů: Dynamicky svázání datových sloupců. Pokud to uděláte, musíte počet zvýšit m_nFields , aby odrážel počet volání funkce RFX nebo Bulk RFX ve vaší DoFieldExchange nebo DoBulkFieldExchange členské funkci pro dynamicky vázané sloupce.

Další informace najdete v článcích Sada záznamů: Dynamické vazby datových sloupců (ODBC) a sady záznamů: Hromadné načítání záznamů (ODBC).

Příklad

viz Výměna polí záznamu: Použití RFX.

CRecordset::m_nParams

Obsahuje počet datových členů parametrů ve třídě sady záznamů; to znamená počet parametrů předaných dotazem sady záznamů.

Poznámky

Pokud má vaše třída sady záznamů datové členy parametrů, konstruktor třídy musí inicializovat m_nParams se správným číslem. Výchozí hodnota m_nParams je 0. Pokud přidáte datové členy parametrů (které musíte provést ručně), musíte do konstruktoru třídy přidat inicializaci, která bude odrážet počet parametrů (které musí být alespoň tak velké jako počet zástupných symbolů '' v řetězci m_strFilterm_strSort ).

Rozhraní používá toto číslo při parametrizaci dotazu sady záznamů.

Upozornění

Toto číslo musí odpovídat počtu parametrů registrovaných v DoFieldExchange nebo po volání SetFieldType s hodnotou parametru CFieldExchange::inputParam, , CFieldExchange::outputParamCFieldExchange::paramnebo CFieldExchange::inoutParam.DoBulkFieldExchange

Příklad

Projděte si články Sada záznamů: Parametrizace sady záznamů (ODBC) a Výměny polí záznamů: Použití RFX.

CRecordset::m_pDatabase

Obsahuje ukazatel na CDatabase objekt, přes který je sada záznamů připojena ke zdroji dat.

Poznámky

Tato proměnná se nastavuje dvěma způsoby. Obvykle při vytváření objektu sady záznamů předáte ukazatel na již připojený CDatabase objekt. Pokud místo toho předáte NULL objekt, CRecordset vytvoří objekt CDatabase a připojí ho. V obou případech CRecordset uloží ukazatel do této proměnné.

Za normálních okolností nebudete muset přímo použít ukazatel uložený v m_pDatabasesouboru . Pokud ale napíšete vlastní rozšíření CRecordset, budete možná muset použít ukazatel. Pokud například vyvoláte vlastní CDBException, budete potřebovat ukazatel. Nebo ho možná budete potřebovat, pokud potřebujete něco udělat pomocí stejného CDatabase objektu, jako je spouštění transakcí, nastavení časových limitů nebo volání ExecuteSQL členské funkce třídy CDatabase k přímému spuštění příkazů SQL.

CRecordset::m_strFilter

Po vytvoření objektu sady záznamů, ale před voláním jeho Open členské funkce použijte tento datový člen k uložení CString obsahující klauzuli SQL WHERE .

Poznámky

Sada záznamů používá tento řetězec k omezení (nebo filtrování) záznamů, které vybere během Open volání.Requery To je užitečné při výběru podmnožina záznamů, například "všichni prodejci v Kalifornii" ("state = CA"). Syntaxe ODBC SQL pro WHERE klauzuli je

WHERE search-condition

Nezahrnujte WHERE do řetězce klíčové slovo. Architektura ji poskytuje.

Řetězec filtru můžete také parametrizovat tak, že do něj umístíte zástupné symboly '' a deklarujete do třídy datový člen parametru pro každý zástupný symbol a předáte parametry sadě záznamů za běhu. To vám umožní vytvořit filtr za běhu. Další informace naleznete v tématu Sada záznamů: Parametrizace sady záznamů (ODBC).

Další informace o klauzulích SQL WHERE najdete v tématu SQL. Další informace o výběru a filtrování záznamů naleznete v tématu Sada záznamů: Filtrování záznamů (ODBC).

Příklad

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 vytvoření objektu sady záznamů, ale před voláním jeho Open členské funkce použijte tento datový člen k uložení CString obsahující klauzuli SQL ORDER BY .

Poznámky

Sada záznamů používá tento řetězec k seřazení záznamů, které vybere během Open volání.Requery Pomocí této funkce můžete sadu záznamů seřadit podle jednoho nebo více sloupců. Syntaxe ODBC SQL pro ORDER BY klauzuli je

ORDER BY sort-specification [, sort-specification]...

kde specifikace řazení je celé číslo nebo název sloupce. Můžete také zadat vzestupné nebo sestupné pořadí (pořadí je ve výchozím nastavení vzestupné) tak, že do seznamu sloupců v řetězci řazení připojíte "ASC" nebo "DESC". Vybrané záznamy se nejprve seřadí podle prvního sloupce uvedeného, pak podle druhého atd. Sadu záznamů "Zákazníci" můžete například objednat podle příjmení a potom křestní jméno. Počet sloupců, které můžete vypsat, závisí na zdroji dat. Další informace najdete v sadě Windows SDK.

Nezahrnujte ORDER BY do řetězce klíčové slovo. Architektura ji poskytuje.

Další informace o klauzulích SQL najdete v tématu SQL. Další informace o řazení záznamů naleznete v tématu Sada záznamů: Řazení záznamů (ODBC).

Příklad

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

Přesune aktuální ukazatel záznamu v sadě záznamů dopředu nebo dozadu.

virtual void Move(
    long nRows,
    WORD wFetchType = SQL_FETCH_RELATIVE);

Parametry

nRows
Početřádkůch Kladné hodnoty se posunují dopředu směrem ke konci sady záznamů. Záporné hodnoty se posunují zpět směrem k začátku.

wFetchType
Určuje sadu řádků, která Move se načte. Podrobnosti najdete v části Poznámky.

Poznámky

Pokud předáte hodnotu 0 pro nRows, Move aktualizuje aktuální záznam; Move ukončí jakýkoli aktuální AddNew nebo Edit režim a obnoví hodnotu aktuálního záznamu před AddNew nebo Edit byla volána.

Poznámka:

Když procházíte sadou záznamů, nemůžete vynechat odstraněné záznamy. Další informace naleznete v tématu CRecordset::IsDeleted. Když otevřete sadu CRecordset možností s skipDeletedRecords možností, Move použije se příkaz, pokud nRows je parametr 0. Toto chování zabraňuje aktualizaci řádků odstraněných jinými klientskými aplikacemi pomocí stejných dat. Popis parametru dwOption naleznete v Open parametru skipDeletedRecords.

Move přemísťuje sadu záznamů podle sad řádků. Na základě hodnot pro nRows a wFetchTypenačte Move příslušnou sadu řádků a pak vytvoří první záznam v sadě řádků aktuální záznam. Pokud jste neimplementovali hromadné načítání řádků, je velikost sady řádků vždy 1. Při načítání sady řádků přímo volá CheckRowsetError členovou funkci, Move aby zpracovávala všechny chyby způsobené načtením.

V závislosti na hodnotách, které předáte, Move odpovídá ostatním CRecordset členským funkcím. Konkrétně může hodnota znamenat členovou funkci, která je intuitivnější a často upřednostňovaná metoda pro přesunutí aktuálního wFetchType záznamu.

Následující tabulka uvádí možné hodnoty pro wFetchTypesadu řádků, která Move bude načtena na wFetchType základě a nRows, a všechny ekvivalentní členské funkce odpovídající wFetchType.

wFetchType Načtená sada řádků Ekvivalentní členová funkce
SQL_FETCH_RELATIVE (výchozí hodnota) Počáteční řádky sady nRows řádků z prvního řádku v aktuální sadě řádků.
SQL_FETCH_NEXT Další sada řádků; nRows se ignoruje. MoveNext
SQL_FETCH_PRIOR Předchozí sada řádků; nRows se ignoruje. MovePrev
SQL_FETCH_FIRST První sada řádků v sadě záznamů; nRows se ignoruje. MoveFirst
SQL_FETCH_LAST Poslední úplná sada řádků v sadě záznamů; nRows se ignoruje. MoveLast
SQL_FETCH_ABSOLUTE Pokud nRows> 0, počáteční nRows řádky sady řádků od začátku sady záznamů. Pokud nRows< 0, počáteční nRows řádky sady řádků od konce sady záznamů. Pokud nRows = 0, vrátí se podmínka BOF (začátek souboru). SetAbsolutePosition
SQL_FETCH_BOOKMARK Sada řádků začínající na řádku, jehož hodnota záložky odpovídá nRows. SetBookmark

Poznámka:

Pro sady záznamů pouze pro předávání je Move platná pouze s hodnotou SQL_FETCH_NEXT pro wFetchType.

Upozornění

Volání Move vyvolá výjimku, pokud sada záznamů neobsahuje žádné záznamy. Chcete-li určit, zda sada záznamů obsahuje nějaké záznamy, volání IsBOF a IsEOF.

Poznámka:

Pokud jste se posunuli za začátek nebo konec sady záznamů (IsBOF nebo IsEOF vrátí nenulovou hodnotu), volání Move funkce pravděpodobně vyvolá CDBExceptionchybu . Pokud například IsEOF vrátí nenulovou hodnotu a IsBOF ne, MoveNext vyvolá výjimku, ale MovePrev ne.

Poznámka:

Pokud voláte Move při aktualizaci nebo přidání aktuálního záznamu, aktualizace se ztratí bez upozornění.

Další informace o navigaci v sadě záznamů naleznete v článcích Sada záznamů: Posouvání (ODBC) a Sada záznamů: Záložky a Absolutní pozice (ODBC). Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC). Související informace naleznete v rozhraní ODBC API funkce SQLExtendedFetch v sadě Windows SDK.

Příklad

// 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

Vytvoří první záznam v první sadě řádků jako aktuální záznam.

void MoveFirst();

Poznámky

Bez ohledu na to, jestli bylo implementováno hromadné načítání řádků, bude to vždy první záznam v sadě záznamů.

Nemusíte volat MoveFirst hned po otevření sady záznamů. V té době je prvním záznamem (pokud existuje) automaticky aktuální záznam.

Poznámka:

Tato členová funkce není platná pro sady záznamů jen pro předávání.

Poznámka:

Když procházíte sadou záznamů, nemůžete vynechat odstraněné záznamy. Podrobnosti najdete v IsDeleted členské funkci.

Upozornění

Volání některé z Move funkcí vyvolá výjimku, pokud sada záznamů neobsahuje žádné záznamy. Chcete-li určit, zda sada záznamů obsahuje nějaké záznamy, volání IsBOF a IsEOF.

Poznámka:

Pokud při aktualizaci nebo přidání aktuálního záznamu Move zavoláte některou z funkcí, aktualizace se ztratí bez upozornění.

Další informace o navigaci v sadě záznamů naleznete v článcích Sada záznamů: Posouvání (ODBC) a Sada záznamů: Záložky a Absolutní pozice (ODBC). Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Příklad

Podívejte se na příklad pro IsBOF.

CRecordset::MoveLast

Nastaví první záznam v poslední úplné sadě řádků na aktuální záznam.

void MoveLast();

Poznámky

Pokud jste neimplementovali hromadné načítání řádků, sada záznamů má velikost sady řádků 1, takže MoveLast se přesune na poslední záznam v sadě záznamů.

Poznámka:

Tato členová funkce není platná pro sady záznamů jen pro předávání.

Poznámka:

Když procházíte sadou záznamů, nemůžete vynechat odstraněné záznamy. Podrobnosti najdete v IsDeleted členské funkci.

Upozornění

Volání některé z Move funkcí vyvolá výjimku, pokud sada záznamů neobsahuje žádné záznamy. Chcete-li určit, zda sada záznamů obsahuje nějaké záznamy, volání IsBOF a IsEOF.

Poznámka:

Pokud při aktualizaci nebo přidání aktuálního záznamu Move zavoláte některou z funkcí, aktualizace se ztratí bez upozornění.

Další informace o navigaci v sadě záznamů naleznete v článcích Sada záznamů: Posouvání (ODBC) a Sada záznamů: Záložky a Absolutní pozice (ODBC). Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Příklad

Podívejte se na příklad pro IsBOF.

CRecordset::MoveNext

Vytvoří první záznam v další sadě řádků jako aktuální záznam.

void MoveNext();

Poznámky

Pokud jste neimplementovali hromadné načítání řádků, sada záznamů má velikost sady řádků 1, takže MoveNext se přesune na další záznam.

Poznámka:

Když procházíte sadou záznamů, nemůžete vynechat odstraněné záznamy. Podrobnosti najdete v IsDeleted členské funkci.

Upozornění

Volání některé z Move funkcí vyvolá výjimku, pokud sada záznamů neobsahuje žádné záznamy. Chcete-li určit, zda sada záznamů obsahuje nějaké záznamy, volání IsBOF a IsEOF.

Poznámka:

Před voláním se také doporučuje volat IsEOFMoveNext. Pokud jste například posunovali za konec sady záznamů, IsEOF vrátí se nenulové; následné volání MoveNext vyvolá výjimku.

Poznámka:

Pokud při aktualizaci nebo přidání aktuálního záznamu Move zavoláte některou z funkcí, aktualizace se ztratí bez upozornění.

Další informace o navigaci v sadě záznamů naleznete v článcích Sada záznamů: Posouvání (ODBC) a Sada záznamů: Záložky a Absolutní pozice (ODBC). Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Příklad

Podívejte se na příklad pro IsBOF.

CRecordset::MovePrev

Nastaví první záznam v předchozí sadě řádků na aktuální záznam.

void MovePrev();

Poznámky

Pokud jste neimplementovali hromadné načítání řádků, má sada záznamů velikost sady řádků 1, takže MovePrev se přesune na předchozí záznam.

Poznámka:

Tato členová funkce není platná pro sady záznamů jen pro předávání.

Poznámka:

Když procházíte sadou záznamů, nemůžete vynechat odstraněné záznamy. Podrobnosti najdete v IsDeleted členské funkci.

Upozornění

Volání některé z Move funkcí vyvolá výjimku, pokud sada záznamů neobsahuje žádné záznamy. Chcete-li určit, zda sada záznamů obsahuje nějaké záznamy, volání IsBOF a IsEOF.

Poznámka:

Před voláním se také doporučuje volat IsBOFMovePrev. Pokud jste například posunuli před začátek sady záznamů, IsBOF vrátí se nenulové; následné volání MovePrev vyvolá výjimku.

Poznámka:

Pokud při aktualizaci nebo přidání aktuálního záznamu Move zavoláte některou z funkcí, aktualizace se ztratí bez upozornění.

Další informace o navigaci v sadě záznamů naleznete v článcích Sada záznamů: Posouvání (ODBC) a Sada záznamů: Záložky a Absolutní pozice (ODBC). Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Příklad

Podívejte se na příklad pro IsBOF.

CRecordset::OnSetOptions

Volá se k nastavení možností (při výběru) pro zadaný příkaz ODBC.

virtual void OnSetOptions(HSTMT hstmt);

Parametry

hstmt
Příkaz HSTMT ODBC, jehož možnosti mají být nastaveny.

Poznámky

Volání OnSetOptions pro nastavení možností (při výběru) pro zadaný příkaz ODBC. Architektura volá tuto členovu funkci k nastavení počátečních možností sady záznamů. OnSetOptions určuje podporu zdroje dat pro posouvání kurzorů a pro souběžnost kurzoru a nastaví možnosti sady záznamů odpovídajícím způsobem. (vzhledem k tomu, že OnSetOptions se používá pro operace výběru, OnSetUpdateOptions slouží k operacím aktualizace.)

Přepsáním nastavíte OnSetOptions možnosti specifické pro ovladač nebo zdroj dat. Pokud například váš zdroj dat podporuje otevírání výhradního přístupu, můžete tuto možnost přepsat OnSetOptions .

Další informace o kurzorech naleznete v tématu ODBC.

CRecordset::OnSetUpdateOptions

Volá se k nastavení možností (používá se při aktualizaci) pro zadaný příkaz ODBC.

virtual void OnSetUpdateOptions(HSTMT hstmt);

Parametry

hstmt
Příkaz HSTMT ODBC, jehož možnosti mají být nastaveny.

Poznámky

Volání OnSetUpdateOptions pro nastavení možností (použité při aktualizaci) pro zadaný příkaz ODBC. Architektura volá tuto členovou funkci poté, co vytvoří HSTMT aktualizaci záznamů v sadě záznamů. (Zatímco OnSetOptions se používá pro operace výběru, OnSetUpdateOptions používá se pro aktualizační operace.) OnSetUpdateOptions určuje podporu zdroje dat pro posouvání kurzorů a pro souběžnost kurzorů a odpovídajícím způsobem nastaví možnosti sady záznamů.

Přepište OnSetUpdateOptions nastavení možností příkazu ODBC před tímto příkazem pro přístup k databázi.

Další informace o kurzorech naleznete v tématu ODBC.

CRecordset::Open

Otevře sadu záznamů načtením tabulky nebo provedením dotazu, který sada záznamů představuje.

virtual BOOL Open(
    UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
    LPCTSTR lpszSQL = NULL,
    DWORD dwOptions = none);

Parametry

nOpenType
Přijměte výchozí hodnotu AFX_DB_USE_DEFAULT_TYPEnebo použijte jednu z následujících hodnot z enum OpenType:

  • CRecordset::dynaset Sada záznamů s obousměrným posouváním. Otevření sady záznamů určuje členství a řazení záznamů, ale změny provedené jinými uživateli datových hodnot jsou viditelné po operaci načtení. Dynamické sady jsou známy také jako sady záznamů řízené sadou klíčů.

  • CRecordset::snapshot Statická sada záznamů s obousměrným posouváním. Otevření sady záznamů určuje členství a řazení záznamů. Načtení záznamu určuje hodnoty dat. Změny provedené jinými uživateli nejsou viditelné, dokud se sada záznamů nezavře a pak znovu neotevře.

  • CRecordset::dynamic Sada záznamů s obousměrným posouváním. Změny členství, pořadí a datových hodnot provedené jinými uživateli jsou viditelné po operaci načtení. Mnoho ovladačů ODBC nepodporuje tento typ sady záznamů.

  • CRecordset::forwardOnly Sada záznamů jen pro čtení s posouváním vpřed.

    Pro CRecordset, výchozí hodnota je CRecordset::snapshot. Mechanismus výchozích hodnot umožňuje interakci průvodců aplikace Visual C++ s třídou CRecordset pro rozhraní ODBC i třídou CDaoRecordset pro rozhraní DAO, které používají různé výchozí hodnoty.

Další informace otěchtoch Související informace najdete v tématu Použití blokových a posuvných kurzorů v sadě Windows SDK.

Upozornění

Pokud požadovaný typ není podporovaný, architektura vyvolá výjimku.

lpszSQL
Ukazatel řetězce obsahující jedno z následujících:

  • Ukazatel NULL .

  • Název tabulky.

  • Příkaz SQL SELECT (volitelně s klauzulí SQL WHEREORDER BY ).

  • Příkaz CALL určující název předdefinovaného dotazu (uložená procedura). Dávejte pozor, abyste mezi složenou závorku a CALL klíčové slovo nevkládejte prázdné znaky.

Další informace o tomto řetězci najdete v tabulce a diskuzi o roli TřídyWizard v části Poznámky .

Poznámka:

Pořadí sloupců v sadě výsledků musí odpovídat pořadí volání funkce RFX nebo Bulk RFX v přepsání funkce DoFieldExchange nebo DoBulkFieldExchange funkce.

dwOptions
Bitová maska, která může určit kombinaci níže uvedených hodnot. Některé se vzájemně vylučují. Výchozí hodnota je none.

  • CRecordset::none Nejsou nastaveny žádné možnosti. Tato hodnota parametru se vzájemně vylučuje se všemi ostatními hodnotami. Ve výchozím nastavení lze sadu záznamů aktualizovat Edit nebo Delete umožňuje přidávat nové záznamy pomocí AddNew. Aktualizovatelnost závisí na zdroji dat a možnosti nOpenType , kterou zadáte. Optimalizace pro hromadné přidávání není k dispozici. Hromadné načítání řádků se neimplementuje. Během navigace v sadě záznamů se odstraněné záznamy nepřeskočí. Záložky nejsou k dispozici. Automatická kontrola nečistých polí je implementována.

  • CRecordset::appendOnly Nepovolujte Edit ani Delete na sadě záznamů. Povolit pouze funkci AddNew. Tato možnost se vzájemně vylučuje s možností CRecordset::readOnly.

  • CRecordset::readOnly Otevřete sadu záznamů jen pro čtení. Tato možnost se vzájemně vylučuje s možností CRecordset::appendOnly.

  • CRecordset::optimizeBulkAdd Pomocí připraveného příkazu SQL můžete optimalizovat přidávání mnoha záznamů najednou. Platí jenom v případě, že k aktualizaci sady záznamů nepoužíváte funkci SQLSetPos rozhraní ODBC API. První aktualizace určuje, která pole jsou označena za nečistá. Tato možnost se vzájemně vylučuje s možností CRecordset::useMultiRowFetch.

  • CRecordset::useMultiRowFetch Implementujte hromadné načítání řádků, aby bylo možné načíst více řádků v rámci jedné operace načtení. Jedná se o pokročilou funkci navrženou tak, aby zlepšila výkon; Výměna polí hromadného záznamu však není podporována ClassWizard. Tato možnost se vzájemně vylučuje s možností CRecordset::optimizeBulkAdd. Pokud zadáte CRecordset::useMultiRowFetch, bude tato možnost CRecordset::noDirtyFieldCheck zapnutá automaticky (dvojité ukládání do vyrovnávací paměti nebude k dispozici); u sad záznamů pouze pro předávání dál se tato možnost CRecordset::useExtendedFetch automaticky zapne. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

  • CRecordset::skipDeletedRecords Při procházení sady záznamů přeskočte všechny odstraněné záznamy. V určitých relativních načteních tato možnost sníží výkon. Tato možnost není platná u sad záznamů jen pro předávání. Pokud zavoláte Move s parametrem nRows nastaveným na 0 a CRecordset::skipDeletedRecords sada možností, Move bude assert. CRecordset::skipDeletedRecords se podobá balení ovladačů, což znamená, že odstraněné řádky jsou ze sady záznamů odebrány. Pokud však ovladač zabalí záznamy, přeskočí pouze ty záznamy, které odstraníte; nepřeskočí záznamy odstraněné jinými uživateli, když je sada záznamů otevřená. CRecordset::skipDeletedRecords přeskočí řádky odstraněné jinými uživateli.

  • CRecordset::useBookmarks V případě podpory může sada záznamů používat záložky. Záložky zpomalují načítání dat, ale zvyšují výkon navigace v nich. Nelze je použít v sadách záznamů s posouváním pouze vpřed. Další informace naleznete v tématu Sada záznamů: Záložky a Absolutní pozice (ODBC).

  • CRecordset::noDirtyFieldCheck Vypněte automatickou kontrolu nezašpiněného pole (dvojité ukládání do vyrovnávací paměti). Tím se zlepší výkon; Pole však musíte ručně označit jako nezašpiněná voláním SetFieldDirty funkcí a SetFieldNull členských funkcí. Dvojité ukládání do vyrovnávací paměti ve třídě CRecordset je podobné dvojité vyrovnávací paměti ve třídě CDaoRecordset. U CRecordsetjednotlivých polí ale nemůžete povolit dvojité ukládání do vyrovnávací paměti. Můžete ho povolit pro všechna pole nebo zakázat pro všechna pole. Pokud zadáte možnost CRecordset::useMultiRowFetch, pak CRecordset::noDirtyFieldCheck je zapnuta automaticky, ale SetFieldNull nelze ji použít u sad záznamů, SetFieldDirty které implementují hromadné načítání řádků.

  • CRecordset::executeDirect Nepoužívejte připravený příkaz SQL. Pokud chcete zvýšit výkon, určete tuto možnost, pokud Requery se členová funkce nikdy nevolá.

  • CRecordset::useExtendedFetch Implementujte SQLExtendedFetch místo SQLFetch. Navrženo pro implementaci hromadného načítání řádků pro sady záznamů s posouváním pouze vpřed. Pokud zadáte možnost CRecordset::useMultiRowFetch v sadě záznamů jen pro předávání, CRecordset::useExtendedFetch automaticky se zapne.

  • CRecordset::userAllocMultiRowBuffers Uživatel přidělí pro data vyrovnávací paměti úložiště. Tuto možnost použijte, CRecordset::useMultiRowFetch pokud chcete přidělit vlastní úložiště. Jinak architektura automaticky přidělí potřebné úložiště. Další informace naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC). Zadání CRecordset::userAllocMultiRowBuffers bez zadání CRecordset::useMultiRowFetch výsledků v neúspěšném kontrolním výrazu

Vrácená hodnota

Nenulové, pokud CRecordset byl objekt úspěšně otevřen; jinak 0, pokud CDatabase::Open je volána, vrátí hodnotu 0.

Poznámky

Chcete-li spustit dotaz definovaný sadou záznamů, je zapotřebí zavolat tuto členskou funkci. Před voláním Openje nutné sestavit objekt sady záznamů.

Připojení této sady záznamů ke zdroji dat závisí na tom, jak před voláním Opensestavíte sadu záznamů . Pokud předáte CDatabase objekt konstruktoru sady záznamů, který nebyl připojen ke zdroji dat, použije GetDefaultConnect tato členská funkce pokus o otevření databázového objektu. Pokud předáte hodnotu NULL konstruktoru sady záznamů, konstruktor za vás vytvoří CDatabase objekt a Open pokusí se připojit databázový objekt. Podrobnosti o uzavření sady záznamů a připojení za těchto různých okolností naleznete v tématu Close.

Poznámka:

Přístup ke zdroji dat pomocí objektu CRecordset je vždy sdílen. CDaoRecordset Na rozdíl od třídy nemůžete objekt použít CRecordset k otevření zdroje dat s výhradním přístupem.

Při volání Opendotazu, obvykle příkazu SQL SELECT , vybere záznamy na základě kritérií zobrazených v následující tabulce.

Hodnota parametru lpszSQL Zvolené záznamy jsou určeny Příklad
NULL Řetězec vrácený funkcí GetDefaultSQL.
Název tabulky SQL Všechny sloupce tabulkového seznamu ve funkci DoFieldExchange nebo DoBulkFieldExchange. "Customer"
Název předdefinovaného dotazu (uložené procedury) Sloupce, k jejichž vrácení je dotaz definován. "{call OverDueAccts}"
SELECT column-list FROM table-list Zadané sloupce ze zadané tabulky nebo tabulek. "SELECT CustId, CustName FROM

Customer"

Upozornění

Nevkládejte do řetězce SQL nadbytečné prázdné znaky. Pokud například vložíte prázdné znaky mezi složenou závorku a CALL klíčové slovo, mfc chybně interpretuje řetězec SQL jako název tabulky a začlení ho do SELECT příkazu, což způsobí vyvolání výjimky. Podobně platí, že pokud předdefinovaný dotaz používá výstupní parametr, nevkládejte mezi složenou závorku a symbol '' prázdné znaky. Nakonec nesmíte vložit prázdné znaky před složenou závorku v CALL příkazu nebo před SELECT klíčové slovo v SELECT příkazu.

Obvyklým postupem je předání NULLOpen; v tomto případě Open volá GetDefaultSQL. Pokud používáte odvozenou CRecordset třídu, zadejte názvy tabulek, GetDefaultSQL které jste zadali v ClassWizard. Místo toho lze zadat jiné informace v parametru lpszSQL.

Bez ohledu na to, co předáte, Open sestaví konečný řetězec SQL pro dotaz (řetězec může mít k předanému lpszSQL řetězci připojeny klauzule SQL WHEREORDER BY) a pak dotaz spustí. Vytvořený řetězec můžete prozkoumat voláním GetSQL po volání Open. Další podrobnosti o tom, jak sada záznamů vytváří příkaz SQL a vybírá záznamy, naleznete v tématu Sada záznamů: Jak sady záznamů výběr záznamů (ODBC).

Datové členy polí třídy sady záznamů jsou svázány se sloupci zvolených dat. Jsou-li vráceny jakékoli záznamy, první záznam se stává aktuálním záznamem.

Chcete-li nastavit možnosti pro sadu záznamů, například filtr nebo řazení, zadejte je po vytvoření objektu sady záznamů, ale před voláním Open. Pokud chcete aktualizovat záznamy v sadě záznamů po otevření sady záznamů, zavolejte Requery.

Další informace, včetně dalších příkladů, naleznete v tématu Sada záznamů (ODBC), Sada záznamů: Jak sady záznamů vybrat záznamy (ODBC) a Sada záznamů: Vytváření a uzavření sad záznamů (ODBC).

Příklad

Následující příklady kódu ukazují různé formy Open volání.

// 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

Aktualizace data a stav řádku v aktuální sadě řádků.

void RefreshRowset(
    WORD wRow,
    WORD wLockType = SQL_LOCK_NO_CHANGE);

Parametry

wRow
Jednostranná pozice řádku v aktuální sadě řádků. Tato hodnota může být v rozsahu od nuly až po velikost sady řádků.

wLockType
Hodnota označující, jak po aktualizaci uzamknout řádek. Podrobnosti najdete v části Poznámky.

Poznámky

Pokud předáte hodnotu nula pro wRow, bude každý řádek v sadě řádků aktualizován.

Chcete-li použít RefreshRowset, je nutné implementovat hromadné načítání řádků zadáním CRecordset::useMulitRowFetch možnosti v Open členské funkci.

RefreshRowset volá funkci SQLSetPosrozhraní ODBC API . Parametr wLockType určuje stav zámku řádku po SQLSetPos provedení. Následující tabulka popisuje možné hodnoty pro wLockType.

wLockType Popis
SQL_LOCK_NO_CHANGE (výchozí hodnota) Ovladač nebo zdroj dat zajistí, že je řádek ve stejném uzamčeném nebo odemknutém stavu jako předtím RefreshRowset , než byl volána.
SQL_LOCK_EXCLUSIVE Ovladač nebo zdroj dat uzamkne řádek výhradně. Tento typ zámku nepodporují všechny zdroje dat.
SQL_LOCK_UNLOCK Ovladač nebo zdroj dat odemkne řádek. Tento typ zámku nepodporují všechny zdroje dat.

Další informace naleznete v SQLSetPossadě Windows SDK. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

CRecordset::Requery

Znovu sestaví (aktualizuje) sadu záznamů.

virtual BOOL Requery();

Vrácená hodnota

Nenulové, pokud byla sada záznamů úspěšně znovu sestavena; jinak 0.

Poznámky

Jsou-li vráceny jakékoli záznamy, první záznam se stává aktuálním záznamem.

Aby sada záznamů odrážela přidání a odstranění, které vy nebo jiní uživatelé provádíte ve zdroji dat, musíte sadu záznamů znovu sestavit voláním Requery. Pokud je sada záznamů dynamickou sadou, automaticky odráží aktualizace, které vy nebo jiní uživatelé provádíte v existujících záznamech (ale ne přidávání). Pokud je sada záznamů snímek, musíte volat Requery , aby odrážely úpravy jinými uživateli a přidáváním a odstraňováním.

Pro dynamickou sadu nebo snímek volejte Requery pokaždé, když chcete sadu záznamů znovu sestavit pomocí nového filtru nebo řazení nebo nových hodnot parametrů. Nastavte nový filtr nebo vlastnost řazení přiřazením nových hodnot a m_strFilterm_strSort před voláním Requery. Nastavte nové parametry přiřazením nových hodnot datovým členům parametrů před voláním Requery. Pokud se filtry a řetězce řazení nezmění, můžete dotaz znovu použít, což zlepšuje výkon.

Pokud pokus o opětovné sestavení sady záznamů selže, sada záznamů se zavře. Před voláním Requerymůžete určit, jestli se sada záznamů dá znovu dotazovat voláním CanRestart členské funkce. CanRestart nezaručuje, že Requery to bude úspěšné.

Upozornění

Zavolejte Requery až po zavolání Open.

Příklad

Tento příklad znovu sestaví sadu záznamů, aby se použilo jiné pořadí řazení.

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

Umístí sadu záznamů na záznam odpovídající zadanému číslu záznamu.

void SetAbsolutePosition(long nRows);

Parametry

nRows
Jednoúrovňová pořadová pozice aktuálního záznamu v sadě záznamů.

Poznámky

SetAbsolutePosition přesune aktuální ukazatel záznamu na základě této pořadové pozice.

Poznámka:

Tato členová funkce není platná pro sady záznamů jen pro předávání.

U sad záznamů ODBC odkazuje absolutní nastavení pozice 1 na první záznam v sadě záznamů; nastavení 0 odkazuje na pozici začátku souboru (BOF).

Můžete také předat záporné hodnoty do SetAbsolutePosition. V tomto případě se pozice sady záznamů vyhodnocuje z konce sady záznamů. Například SetAbsolutePosition( -1 ) přesune aktuální ukazatel záznamu na poslední záznam v sadě záznamů.

Poznámka:

Absolutní pozice není určená k použití jako náhradní číslo záznamu. Záložky jsou stále doporučeným způsobem uchování a návratu na danou pozici, protože se pozice záznamu změní při odstranění předchozích záznamů. Kromě toho si nemůžete být jisti, že daný záznam bude mít stejnou absolutní pozici, pokud se sada záznamů znovu vytvoří, protože pořadí jednotlivých záznamů v sadě záznamů není zaručeno, pokud se nevytvořil pomocí příkazu SQL pomocí ORDER BY klauzule.

Další informace o navigaci sady záznamů a záložkách naleznete v článcích Sada záznamů: Posouvání (ODBC) a Sada záznamů: Záložky a Absolutní pozice (ODBC).

CRecordset::SetBookmark

Umístí sadu záznamů na záznam obsahující zadanou záložku.

void SetBookmark(const CDBVariant& varBookmark);

Parametry

varBookmark
Odkaz na CDBVariant objekt obsahující hodnotu záložky pro určitý záznam.

Poznámky

Chcete-li zjistit, zda jsou záložky podporovány v sadě záznamů, zavolejte CanBookmark. Pokud chcete, aby byly záložky dostupné, pokud jsou podporované, musíte nastavit CRecordset::useBookmarks možnost v dwOptions parametru Open členské funkce.

Poznámka:

Pokud záložky nejsou podporované nebo nedostupné, volání SetBookmark způsobí vyvolání výjimky. Záložky nejsou podporovány u sad záznamů jen pro předávání.

Chcete-li nejprve načíst záložku pro aktuální záznam, volání GetBookmark, který uloží hodnotu záložky do objektu CDBVariant . Později se k danému záznamu můžete vrátit voláním SetBookmark pomocí uložené hodnoty záložky.

Poznámka:

Po určitých operacích sady záznamů byste měli před voláním SetBookmarkzkontrolovat trvalost záložky . Pokud například načtete záložku s voláním GetBookmark a zavoláte Requery, záložka už nemusí být platná. Zavolejte CDatabase::GetBookmarkPersistence a zkontrolujte, jestli můžete bezpečně volat SetBookmark.

Další informace o záložkách a navigaci v sadě záznamů naleznete v článcích Sada záznamů: Záložky a Absolutní pozice (ODBC) a Sada záznamů: Posouvání (ODBC).

CRecordset::SetFieldDirty

Označí datový člen sady záznamů jako změněný nebo nezměněný datový člen pole.

void SetFieldDirty(void* pv, BOOL bDirty = TRUE);

Parametry

pv
Obsahuje adresu datového člena pole v sadě záznamů nebo NULL. Pokud NULLjsou všechny datové členy pole v sadě záznamů označeny příznakem. (Jazyk C++ NULL není stejný jako hodnota Null v terminologii databáze, což znamená "bez hodnoty".)

bDirty
TRUE pokud má být datový člen pole označen příznakem "dirty" (změněno). Jinak FALSE pokud se datový člen pole označí příznakem "clean" (beze změny).

Poznámky

Označení polí jako nezměněné zajišťuje, že se pole neaktualizuje a vede k menšímu provozu SQL.

Poznámka:

Tato členová funkce se nevztahuje na sady záznamů, které používají hromadné načítání řádků. Pokud jste implementovali hromadné načítání řádků, výsledkem SetFieldDirty bude neúspěšný kontrolní výraz. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Architektura označuje změněné datové členy polí, aby se zajistilo, že budou zapsány do záznamu ve zdroji dat mechanismem výměny polí záznamu (RFX). Když změníte hodnotu pole, obvykle se pole automaticky zašpiní, takže se budete muset volat SetFieldDirty jen zřídka, ale někdy budete chtít zajistit, aby se sloupce explicitně aktualizovaly nebo vložili bez ohledu na hodnotu datového člena pole.

Upozornění

Volání této členské funkce pouze po zavolání Edit nebo AddNew.

Použití NULL pro první argument funkce použije funkci pouze u outputColumn polí, nikoli param polí. Například volání

SetFieldNull(NULL);

nastaví pouze outputColumn pole NULLna ; param pole nebudou ovlivněna.

Pokud chcete pracovat na param polích, musíte zadat skutečnou adresu jednotlivce param , na který chcete pracovat, například:

SetFieldNull(&m_strParam);

To znamená, že nemůžete nastavit všechna param pole tak NULL, jak je to možné s outputColumn poli.

CRecordset::SetFieldNull

Označí datový člen sady záznamů jako datový člen pole null (konkrétně nemá žádnou hodnotu) nebo jako nenulový.

void SetFieldNull(void* pv, BOOL bNull = TRUE);

Parametry

pv
Obsahuje adresu datového člena pole v sadě záznamů nebo NULL. Pokud NULLjsou všechny datové členy pole v sadě záznamů označeny příznakem. (Jazyk C++ NULL není stejný jako hodnota Null v terminologii databáze, což znamená "bez hodnoty".)

bNull
Nenulové, pokud se datový člen pole označí příznakem, že nemá žádnou hodnotu (Null). Jinak hodnota 0, pokud má být datový člen pole označen jako nenulový.

Poznámky

Když do sady záznamů přidáte nový záznam, všechny datové členy polí se zpočátku nastaví na hodnotu Null a označí se jako "dirty" (změněno). Když načtete záznam ze zdroje dat, jeho sloupce už mají hodnoty nebo mají hodnotu Null.

Poznámka:

Tuto členovou funkci nevolejte u sad záznamů, které používají hromadné načítání řádků. Pokud jste implementovali hromadné načítání řádků, výsledkem volání SetFieldNull je neúspěšný kontrolní výraz. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

Pokud chcete konkrétně určit pole aktuálního záznamu, že nemá hodnotu, volání SetFieldNull s bNull nastaveným příznakem TRUE příznaku Null. Pokud bylo pole dříve označené hodnotou Null a teď chcete dát hodnotu, nastavte její novou hodnotu. Příznak Null nemusíte odebírat s příznakem SetFieldNull. Chcete-li zjistit, zda pole může být Null, volání IsFieldNullable.

Upozornění

Volání této členské funkce pouze po zavolání Edit nebo AddNew.

Použití NULL pro první argument funkce použije funkci pouze u outputColumn polí, nikoli param polí. Například volání

SetFieldNull(NULL);

nastaví pouze outputColumn pole NULLna ; param pole nebudou ovlivněna.

Pokud chcete pracovat na param polích, musíte zadat skutečnou adresu jednotlivce param , na který chcete pracovat, například:

SetFieldNull(&m_strParam);

To znamená, že nemůžete nastavit všechna param pole tak NULL, jak je to možné s outputColumn poli.

Poznámka:

Při nastavování parametrů na hodnotu Null je výsledkem volání SetFieldNull před otevřením sady záznamů kontrolní výraz. V tomto případě zavolejte SetParamNull.

SetFieldNull se implementuje prostřednictvím DoFieldExchange.

CRecordset::SetLockingMode

Nastaví režim uzamčení na optimistické uzamčení (výchozí) nebo pesimistické uzamčení. Určuje, jak jsou záznamy uzamčeny pro aktualizace.

void SetLockingMode(UINT nMode);

Parametry

nMode
Obsahuje jednu z následujících hodnot:enum LockMode

  • optimistic Optimistické uzamčení uzamkne aktualizovaný záznam pouze během volání Update.

  • pessimistic Pesimistické uzamčení zamkne záznam, jakmile Edit bude voláno, a zachová ho zamknuté, dokud Update se volání neskončí nebo se přesunete na nový záznam.

Poznámky

Tuto členovou funkci zavolejte, pokud potřebujete určit, které ze dvou strategií uzamykání záznamů sada záznamů používá pro aktualizace. Ve výchozím nastavení je optimisticrežim uzamčení sady záznamů . Můžete to změnit na opatrnější pessimistic strategii uzamykání. Volání SetLockingMode po vytvoření a otevření objektu sady záznamů, ale před voláním Edit.

CRecordset::SetParamNull

Označí parametr jako Null (konkrétně nemá žádnou hodnotu) nebo jako hodnotu non-Null.

void SetParamNull(
    int nIndex,
    BOOL bNull = TRUE);

Parametry

nIndex
Index parametru založený na nule.

bNull
Pokud TRUE (výchozí hodnota), parametr má příznak Null. V opačném případě se parametr označí jako nenulový.

Poznámky

Na rozdíl od SetFieldNulltoho můžete volat SetParamNull před otevřením sady záznamů.

SetParamNull se obvykle používá s předdefinovanými dotazy (uložené procedury).

CRecordset::SetRowsetCursorPosition

Přesune kurzor na řádek v aktuální sadě řádků.

void SetRowsetCursorPosition(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);

Parametry

wRow
Jednostranná pozice řádku v aktuální sadě řádků. Tato hodnota může být v rozsahu od 1 do velikosti sady řádků.

wLockType
Hodnota označující, jak po aktualizaci uzamknout řádek. Podrobnosti najdete v části Poznámky.

Poznámky

Při implementaci hromadného načítání řádků se záznamy načítají sadami řádků, kde první záznam v sadě načtených řádků je aktuální záznam. Chcete-li vytvořit jiný záznam v sadě řádků aktuální záznam, zavolejte SetRowsetCursorPosition. Pomocí členské funkce můžete SetRowsetCursorPositionGetFieldValue například dynamicky načítat data z libovolného záznamu sady záznamů.

Chcete-li použít SetRowsetCursorPosition, je nutné implementovat hromadné načítání řádků zadáním CRecordset::useMultiRowFetch možnosti dwOptions parametru Open v členské funkci.

SetRowsetCursorPosition volá funkci SQLSetPosrozhraní ODBC API . Parametr wLockType určuje stav zámku řádku po SQLSetPos provedení. Následující tabulka popisuje možné hodnoty pro wLockType.

wLockType Popis
SQL_LOCK_NO_CHANGE (výchozí hodnota) Ovladač nebo zdroj dat zajistí, že je řádek ve stejném uzamčeném nebo odemknutém stavu jako předtím SetRowsetCursorPosition , než byl volána.
SQL_LOCK_EXCLUSIVE Ovladač nebo zdroj dat uzamkne řádek výhradně. Tento typ zámku nepodporují všechny zdroje dat.
SQL_LOCK_UNLOCK Ovladač nebo zdroj dat odemkne řádek. Tento typ zámku nepodporují všechny zdroje dat.

Další informace naleznete v SQLSetPossadě Windows SDK. Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

CRecordset::SetRowsetSize

Určuje počet záznamů, které chcete načíst během načítání.

virtual void SetRowsetSize(DWORD dwNewRowsetSize);

Parametry

dwNewRowsetSize
Početřádkůch

Poznámky

Tato virtuální členová funkce určuje, kolik řádků chcete načíst během jednoho načtení při použití hromadného načítání řádků. Pokud chcete implementovat hromadné načítání řádků, musíte nastavit CRecordset::useMultiRowFetch možnost v dwOptions parametru Open členské funkce.

Poznámka:

Volání SetRowsetSize bez implementace hromadného načítání řádků způsobí neúspěšné kontrolní výrazy.

Před SetRowsetSize voláním Open nejprve nastavte velikost sady řádků pro sadu záznamů. Výchozí velikost sady řádků při implementaci hromadného načítání řádků je 25.

Poznámka:

Při volání SetRowsetSizepoužívejte upozornění . Pokud ručně alokujete úložiště pro data (podle CRecordset::userAllocMultiRowBuffers možnosti parametru dwOptions v Open), měli byste zkontrolovat, jestli po volání SetRowsetSizepotřebujete tyto vyrovnávací paměti úložiště znovu přidělit , ale před provedením jakékoli operace navigace kurzorem.

Chcete-li získat aktuální nastavení pro velikost sady řádků, volání GetRowsetSize.

Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

CRecordset::Update

AddNew Dokončí operaci Edit uložením nových nebo upravených dat do zdroje dat.

virtual BOOL Update();

Vrácená hodnota

Nenulové, pokud byl jeden záznam úspěšně aktualizován; jinak 0, pokud se nezměnily žádné sloupce. Pokud nebyly aktualizovány žádné záznamy nebo pokud byl aktualizován více než jeden záznam, vyvolá se výjimka. Výjimku vyvolá také případná jiná chyba ve zdroji dat.

Poznámky

Volání této členské funkce po volání funkce nebo Edit členaAddNew. Toto volání je nutné k dokončení AddNew operace.Edit

Poznámka:

Pokud jste implementovali hromadné načítání řádků, nemůžete volat Update. Výsledkem bude neúspěšný kontrolní výraz. I když třída CRecordset neposkytuje mechanismus pro aktualizaci hromadných řádků dat, můžete psát vlastní funkce pomocí funkce SQLSetPosrozhraní ODBC API . Další informace o hromadném načítání řádků naleznete v tématu Sada záznamů: Načítání záznamů hromadně (ODBC).

A AddNewEdit připravte vyrovnávací paměť pro úpravy, ve které jsou přidaná nebo upravená data umístěna pro uložení do zdroje dat. Update uloží data. Aktualizují se jenom tato pole označená nebo zjištěná jako změněná.

Pokud zdroj dat podporuje transakce, můžete provést Update volání (a jeho odpovídající AddNew nebo Edit volat) část transakce. Další informace o transakcích naleznete v tématu Transakce (ODBC).

Upozornění

Pokud zavoláte Update bez prvního volání nebo AddNewEdit, Update vyvolá chybu CDBException. Pokud voláte AddNew nebo Edit, musíte volat Update před voláním Move operace nebo před zavření sady záznamů nebo připojení zdroje dat. V opačném případě dojde ke ztrátě změn bez oznámení.

Podrobnosti o zpracování Update selhání najdete v tématu Sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC).

Příklad

Viz Transakce: Provádění transakce v sadě záznamů (ODBC).

Viz také

Třída CObject
Hierarchy chart
Třída CDatabase
Třída CRecordView