CRecordset::Open
Otevře sadu záznamů podle načtení tabulky nebo dotazu, který představuje sadu záznamů.
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_TYPE, nebo použijte jednu z následujících hodnot z výčtového typu OpenType:CRecordset::dynaset sady záznamů s posouvaným obousměrné.Členství a řazení záznamů jsou určeny při otevření sady záznamů, ale změny provedené jinými uživateli v datových hodnotách jsou viditelné po operaci načítání.Dynamické sady jsou také známé jako kurzory řízené sady záznamů.
CRecordset::snapshot statické sady záznamů s posouvaným obousměrné.Členství a řazení záznamů jsou určeny při otevření sady záznamů; hodnoty dat jsou určeny při načtení záznamů.Změny provedené ostatními uživateli se nezobrazí, dokud sada záznamů je zavření a opětovném.
CRecordset::dynamic sady záznamů s posouvaným obousměrné.Změny provedené ostatními uživateli členství, objednávání a data hodnoty jsou viditelné po operaci načítání.Všimněte si, že mnoho ovladačů rozhraní ODBC nepodporuje tento typ sady záznamů.
CRecordset::forwardOnly jen pro čtení záznamů s pouze posouvání vpřed.
Pro CRecordset, výchozí hodnota je CRecordset::snapshot.Mechanismus výchozí hodnota umožňuje průvodci Visual C++ pro interakci s oběma ODBC CRecordset a DAO CDaoRecordset, které mají různé výchozí hodnoty.
Další informace o těchto typech záznamů naleznete v článku Záznamů (ODBC).Související informace naleznete v článku "Pomocí bloku a posuvný kurzory" Windows SDK.
Upozornění Pokud požadovaný typ není podporován, rozhraní framework vyvolá výjimku.
lpszSQL
Ukazatel řetězce obsahující některou z následujících akcí:A NULL ukazatele.
Název tabulky.
SQL Vybrat prohlášení (volitelně s SQL kde nebo ORDER klauzule).
A volat uvádějící název předdefinovaného dotazu (uložené procedury).Buďte opatrní, nevkládejte mezery mezi složenou závorkou a volat klíčové slovo.
Další informace o tomto řetězci naleznete v tabulce a diskusi o roli v ClassWizard v části poznámky.
[!POZNÁMKA]
Pořadí sloupců ve vaší sadě výsledků dotazu musí odpovídat pořadí RFX nebo Bulk RFX funkce volá své DoFieldExchange nebo DoBulkFieldExchange funkce přepsání.
dwOptions
Maskování bitů, které lze zadat kombinaci hodnot uvedených níže.V některých případech se vzájemně vylučují.Výchozí hodnota je žádný.CRecordset::none žádné možnosti nastavení.Hodnota tohoto parametru je vzájemně se vylučující s jinými hodnotami.Ve výchozím nastavení, lze aktualizovat sadu záznamů s Úprava nebo Odstranit a povoluje přidávání nových záznamů pomocí AddNew.Aktualizační závisí na zdroji dat stejně jako na nOpenType možnost je zadat.Optimalizace pro hromadné přidání není k dispozici.Není implementováno hromadné načítání řádků.Při navigaci v sadě záznamů nesmí být odstraněné záznamy přeskočeny.Záložky nejsou k dispozici.Chybná pole automatické kontroly je implementována.
CRecordset::appendOnly , aby Úprava nebo Odstranit na sadu záznamů.Povolit AddNew pouze.Tato možnost se vzájemně vylučuje pomocí CRecordset::readOnly.
CRecordset::readOnly otevřít sadu záznamů jako jen pro čtení.Tato možnost se vzájemně vylučuje pomocí CRecordset::appendOnly.
CRecordset::optimizeBulkAdd použití připraveného příkazu SQL pro optimalizaci přidání více záznamů najednou.Platí pouze v případě, že nepoužíváte funkce rozhraní ODBC API SQLSetPos Chcete-li aktualizovat sadu záznamů.První aktualizace určuje pole, která jsou označen za nečistý.Tato možnost se vzájemně vylučuje pomocí CRecordset::useMultiRowFetch.
CRecordset::useMultiRowFetchImplementujte hromadné načítání řádků chcete-li povolit více řádků k načtení během jednoho načtení operace.To je pokročilá funkce navržené pro zlepšení výkonu. Hromadná výměna pole záznamu však není podporována ClassWizard.Tato možnost se vzájemně vylučuje pomocí CRecordset::optimizeBulkAdd.Všimněte si, že pokud zadáte CRecordset::useMultiRowFetch, klepněte na možnost CRecordset::noDirtyFieldCheck bude automaticky zapnuto (dvojité ukládání do vyrovnávací paměti není k dispozici); na dopředné sady záznamů, možnost CRecordset::useExtendedFetch bude automaticky zapnuto.Další informace o hromadném načítání řádku, naleznete v článku sady záznamů: Fetching Records in Bulk (ODBC).
CRecordset::skipDeletedRecords přeskočit všechny odstraněné záznamy při procházení sady záznamů.Zpomaluje výkon v určité relativní načte.Tato možnost není platná pro dopředné sady záznamů.Pokud zavoláte Přesunout se nRows parametr nastaven na hodnotu 0 a CRecordset::skipDeletedRecords nastavený, Přesunout bude uplatňovat.Všimněte si, že CRecordset::skipDeletedRecords je podobná ovladač balení, což znamená, že odstraněné řádky jsou odstraněny ze sady záznamů.Však pokud ovladač sady záznamů, pak to přeskočí pouze ty záznamy, které je odstranit; ji nebude vynechat záznamy odstraněné jiným uživatelům při otevření sady záznamů.CRecordset::skipDeletedRecords přeskočí řádků odstraněn jiným uživatelem.
CRecordset::useBookmarks v sadě záznamů, může použít záložky, pokud je podporován.Záložky pomalé načítání dat, ale zvýšení výkonu pro navigační data.Na dopředné sady záznamů není platná.Další informace naleznete v článku sady záznamů: záložky a absolutní umístění (ODBC).
CRecordset::noDirtyFieldCheck vypnout automatické nevyřízenými poli kontroly (dvojité ukládání).Tím se zvýší výkon; však musíte ručně označit pole jako špinavý voláním SetFieldDirty a SetFieldNull členské funkce.Všimněte si, že dvojité ukládání do třídy CRecordset se podobá dvojité ukládání do třídy CDaoRecordset.Nicméně, v CRecordset, nelze povolit dvojité vyrovnávací paměti v jednotlivých oblastech; povolení pro všechna pole nebo po zakázání všech polí.Všimněte si, že pokud zadáte možnost CRecordset::useMultiRowFetch, pak CRecordset::noDirtyFieldCheck bude zapnuta automaticky. Nicméně SetFieldDirty a SetFieldNull nelze použít u sady záznamů, které implementují hromadné načítání řádku.
CRecordset::executeDirect bez použití připraveného příkazu SQL.Pro lepší výkon, tuto možnost zadáte-li Requery členské funkce bude nikdy volána.
CRecordset::useExtendedFetch implementovat SQLExtendedFetch místo SQLFetch.Tento proces je navržen pro provádění hromadné načítání řádků na dopředné sady záznamů.Pokud zadáte možnost CRecordset::useMultiRowFetch na dopřednou sadu záznamů, pak CRecordset::useExtendedFetch bude automaticky zapnuto.
Možnost CRecordset::userAllocMultiRowBuffers uživatel bude přidělení vyrovnávací paměti úložiště pro data.Tuto možnost použijte ve spojení s CRecordset::useMultiRowFetch Pokud chcete přidělit vlastní úložiště; jinak bude rozhraní automaticky přidělí potřebné úložiště.Další informace naleznete v článku sady záznamů: Fetching Records in Bulk (ODBC).Všimněte si, že určení CRecordset::userAllocMultiRowBuffers bez určení CRecordset::useMultiRowFetch způsobí selhání výrazu.
Vrácená hodnota
Nenulová, pokud CRecordset objekt byl úspěšně otevřen; v opačném případě 0, pokud CDatabase::Open (je-li volán) vrátí hodnotu 0.
Poznámky
Musíte zavolat tuto členskou funkci spustit dotaz definované sady záznamů.Před volací otevřených, je nutné vytvořit objekt sady záznamů.
Tuto sadu záznamů připojení ke zdroji dat, závisí na způsobu vytvoření záznamů před volací otevřených.Pokud předáte CDatabase objekt do konstruktoru sady záznamů, který nebyl připojen ke zdroji dat používá tuto členskou funkci GetDefaultConnect k pokusu o otevření databázového objektu.Pokud předáte NULL do konstruktoru sady záznamů vytvoří konstruktor CDatabase objekt a Otevřít se pokusí připojit k databázovému objektu.Podrobné informace o uzavření sady záznamů a připojení za těchto různých podmínek, viz Zavřít.
[!POZNÁMKA]
Přístup ke zdroji dat prostřednictvím CRecordset objekt je vždy sdílen.Na rozdíl od CDaoRecordset třídu, nelze použít CRecordset objekt zdroj dat otevřít s výhradním přístupem.
Při volání otevřených, obvykle SQL dotazu Vybrat prohlášení, vybere záznamy na základě kritérií, které jsou uvedeny v následující tabulce.
Hodnota parametru lpszSQL |
Jsou určeny vybrané záznamy |
Příklad |
---|---|---|
NULL |
Řetězec vrácený GetDefaultSQL. |
|
Název tabulky SQL |
Všechny sloupce seznamu tabulek v DoFieldExchange nebo DoBulkFieldExchange. |
"Customer" |
Název předdefinovaného dotazu (uložené procedury) |
Sloupce, které je definováno dotaz vrátit. |
"{call OverDueAccts}" |
Vyberte seznam sloupců od seznam tabulek |
Zadané sloupce ze zadané tabulky. |
"SELECT CustId, CustName FROM Customer" |
Upozornění |
---|
Buďte opatrní, nevkládejte mezery navíc ve vašem řetězci SQL.Například vložení mezery mezi složenou závorkou a volat klíčové slovo, MFC bude špatně interpretovat SQL řetězec jako název tabulky a začlenit ji do Vybrat příkaz, jehož výsledkem je vyvolána výjimka.Podobně pokud předdefinovaný dotaz používá výstupní parametr, nevkládejte mezery mezi složenou závorkou a '?' symbol.Nakonec je nepřípustné vložit mezeru před složená závorka v volat prohlášení nebo před Vybrat klíčové slovo v Vyberte prohlášení. |
Obvyklý postup je předat NULL k otevřených; v tomto případě otevřených volání GetDefaultSQL.Pokud používáte odvozený CRecordset třídy, GetDefaultSQL uvádí tabulka názvy uvedené v ClassWizard.Namísto zadání dalších informací v lpszSQL parametr.
Cokoliv předáte otevřených sestaví konečné řetězec SQL dotazu (řetězec může mít SQL kde a ORDER klauzule připojená k lpszSQL řetězec předaný) a potom spustí dotaz.Můžete zkoumat vyrobeno řetězec voláním GetSQL po volání otevřených.Další informace o způsobu sada záznamů vytvoří SQL dotaz a vybere záznamy, najdete v článku Sada záznamů: Jak sady záznamů vyberte záznamy (rozhraní ODBC).
Vaší třídy sady záznamů pole datových členů jsou vázány na sloupce dat vybrána.Pokud jsou vráceny žádné záznamy, stane první záznam aktuálním záznamem.
Nastavení možností sady záznamů, jako je filtrování nebo řazení, chcete-li zadat po sestavení objektu sady záznamů, ale před zavoláním funkce otevřených.Pokud chcete aktualizovat záznamy v sadě záznamů po sadě záznamů je již otevřen, volání Requery.
Další informace včetně další příklady naleznete v článcích Záznamů (ODBC), Sada záznamů: Jak sady záznamů vyberte záznamy (rozhraní ODBC), a záznamů: vytváření a uzavírání sad záznamů (ODBC).
Výjimky
Tuto metodu lze vyvolat výjimky typu CDBException * a CMemoryException*.
Příklad
Následující příklady kódu ukazují různé formy otevřených 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();
Požadavky
Záhlaví: afxdb.h