Sdílet prostřednictvím


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řijmout výchozí hodnotu AFX_DB_USE_DEFAULT_TYPE, nebo použijte jednu z následujících hodnot z výčtu OpenType:

    • CRecordset::dynaset záznamů s obousměrné posouvání.Členství a řazení záznamů jsou určeny při otevření sady záznamů, ale změny provedené jinými uživateli na hodnoty dat jsou zobrazeny následující fetch operaci.Dynamické sady se také nazývají sady záznamů řízený sadou klíčů.

    • CRecordset::snapshot statických záznamů s obousměrné posouvání.Členství a řazení záznamů jsou určeny při otevření záznamů; hodnoty dat jsou určena při načtené záznamy.Změny provedené jinými uživateli nejsou viditelné, dokud je při zavření a opětovném záznamů.

    • CRecordset::dynamic záznamů s obousměrné posouvání.Změny provedené jinými uživateli členství, objednávání a data hodnoty jsou zobrazeny následující fetch operaci.Všimněte si, že mnoho ovladačů ODBC nepodporuje tento typ sady záznamů.

    • CRecordset::forwardOnly jen pro čtení záznamů s posouvání pouze dopředu.

      Pro CRecordset , výchozí hodnota je CRecordset::snapshot.Výchozí hodnota mechanismus umožňuje pracovat s oběma ODBC Visual C++ průvodců 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 "Použití bloku a posuvný kurzory" v .

    Poznámka k upozorněníUpozornění

    Pokud požadovaný typ není podporován, rámci vyvolá výjimku.

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

    • A NULL ukazatel.

    • Název tabulky.

    • SQL Vyberte prohlášení (volitelně s SQL kde nebo Order klauzule).

    • A volání 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 volání 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ů v sadě výsledků musí odpovídat pořadí RFX nebo volání funkce hromadné RFX vaše DoFieldExchange nebo DoBulkFieldExchange funkci přepsat.

  • dwOptions
    Maskování bitů, které lze určit kombinace 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 kombinovat s jinými hodnotami.Ve výchozím nastavení lze aktualizovat sadu záznamů s Upravit nebo Odstranit a povoluje přidávání nových záznamů s AddNew.Updatability závisí na zdroji dat stejně jako na nOpenType zadáte možnost.Optimalizace hromadné doplnit není k dispozici.Načítání řádku hromadné nebude implementováno.Během navigace záznamů nebude přeskočena odstraněné záznamy.Záložky nejsou k dispozici.Dirty pole Automatická kontrola je implementována.

    • CRecordset::appendOnly , aby Upravit nebo Odstranit v sadě záznamů.Povolit AddNew pouze.Tato možnost je kombinovat s CRecordset::readOnly.

    • CRecordset::readOnly otevřít sadu záznamů jako jen pro čtení.Tato možnost je kombinovat s CRecordset::appendOnly.

    • CRecordset::optimizeBulkAdd optimalizace přidávání záznamů najednou použít připravený příkaz SQL.Platí pouze v případě, že nepoužíváte funkce rozhraní API ODBC SQLSetPos aktualizace záznamů.První aktualizace Určuje, která pole jsou označena dirty.Tato možnost je kombinovat s CRecordset::useMultiRowFetch .

    • CRecordset::useMultiRowFetchProvádění hromadných řádek načítání povolit více řádků, které mají být načteny v jednom fetch operaci.Toto je rozšířená funkce navržené pro zlepšení výkonu. hromadné pole záznamu exchange však nepodporuje ClassWizard.Tato možnost je kombinovat s CRecordset::optimizeBulkAdd.Všimněte si, že zadáte CRecordset::useMultiRowFetch , klepněte na možnost CRecordset::noDirtyFieldCheck bude automaticky zapnuto (dvojité ukládání do vyrovnávací paměti nebude k dispozici); v pouze pro předávání sady záznamů, možnost CRecordset::useExtendedFetch bude automaticky zapnuta.Další informace o načítání řádků hromadného naleznete v článku záznamů: načítání záznamů hromadné (ODBC).

    • CRecordset::skipDeletedRecords při procházení záznamů přeskočit všechny odstraněné záznamy.Zpomaluje výkon v určitých relativní načte.Tato možnost není platná pro sady záznamů pouze pro předávání.Při volání přesunout se nRows parametr nastaven na hodnotu 0 a CRecordset::skipDeletedRecords nastavení, přesunout bude výrazu.Všimněte si, že CRecordset::skipDeletedRecords je podobný ovladač balení, což znamená, že odstraněné řádky jsou odebrány ze záznamů.Však Jestliže ovladač sad záznamů, pak jej přeskočí pouze záznamy, které je odstranit; nebude ji vynechat záznamy odstraněny ostatní uživatelé při otevření sady záznamů.CRecordset::skipDeletedRecords přeskočí řádky odstraněny jinými uživateli.

    • CRecordset::useBookmarks mohou používat záložky v sadě záznamů, pokud je podporována.Záložky pomalé načítání dat, ale výkon pro navigační data.Na sady záznamů pouze pro předávání není platná.Další informace naleznete v článku záznamů: záložky a absolutní pozice (ODBC).

    • CRecordset::noDirtyFieldCheck vypnout automatické dirty pole Kontrola (dvojité ukládání).Zlepšit výkon; však musíte ručně označit pole jako špinavý voláním SetFieldDirty a SetFieldNull funkce členů.Všimněte si, že dvojité ukládání do třídy CRecordset je podobný dvojité ukládání do třídy CDaoRecordset .V CRecordset , nelze povolit dvojité ukládání jednotlivých polí; Povolit u všech polí nebo po zakázání všech polí.Všimněte si, že zadáte možnost CRecordset::useMultiRowFetch , pak CRecordset::noDirtyFieldCheck bude zapnuta automaticky. však SetFieldDirty a SetFieldNull nelze použít u sady záznamů, které implementovat načítání hromadné řádku.

    • CRecordset::executeDirect nelze použít připravený příkaz SQL.Pro zlepšení výkonu určit tuto možnost, pokud Requery bude volána nikdy členské funkce.

    • CRecordset::useExtendedFetch implementace SQLExtendedFetch namísto SQLFetch.To je určen pro provádění hromadných načítání řádků na sady záznamů pouze pro předávání.Pokud zadáte možnost CRecordset::useMultiRowFetch pouze pro předávání záznamů, klepněte na CRecordset::useExtendedFetch bude automaticky zapnuta.

    • CRecordset::userAllocMultiRowBuffers uživateli přidělí vyrovnávací paměti úložiště pro data.Tuto možnost lze použít ve spojení s CRecordset::useMultiRowFetch Pokud chcete přidělit vlastní skladování; jinak bude rámci automaticky přidělí nezbytné úložiště.Další informace naleznete v článku záznamů: načítání záznamů hromadné (ODBC).Všimněte si, že zadání CRecordset::userAllocMultiRowBuffers bez zadání CRecordset::useMultiRowFetch způsobí selhání výrazu.

Vrácená hodnota

Pokud nenulová CRecordset objekt byl úspěšně otevřen; jinak 0, pokud CDatabase::Open (Pokud se nazývá) vrátí 0.

Poznámky

Musí volat toto členské funkce Spustit dotaz podle záznamů.Před voláním otevřených, je nutné vytvořit objektu recordset.

Tuto sadu záznamů připojení ke zdroji dat závisí na způsobu sestavení záznamů před voláním otevřených.Pokud předáte CDatabase objektu recordset konstruktor, který nebyl připojen ke zdroji dat, používá tato funkce členské GetDefaultConnect k pokusu o otevření databázového objektu.Předáte NULL konstruktoru recordset konstruktor konstrukce CDatabase objektu, a otevřených pokusí připojit objekt databáze.Podrobnosti o ukončení sady záznamů a připojení za těchto okolností proměnlivé, viz Zavřít.

[!POZNÁMKA]

Přístup ke zdroji dat až CRecordset je vždy sdílený objekt.Na rozdíl od CDaoRecordset třídu nelze použít CRecordset objekt otevřít zdroj dat s výhradním přístupem.

Při volání otevřených, obvykle SQL dotazu Vyberte prohlášení, vybere záznamy na základě kritérií, které jsou uvedeny v následující tabulce.

Hodnota parametru lpszSQL

Vybrané záznamy jsou určena.

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é dotaz je definována vrátit.

"{call OverDueAccts}"

Vyberte seznam sloupců od seznam tabulek

Zadaného sloupce ze zadané tabulky.

"SELECT CustId, CustName FROM

Customer"

Poznámka k upozorněníUpozornění

Buďte opatrní, nevkládejte nadbytečné mezery v váš řetězec SQL.Například vložení mezery mezi složenou závorkou a volání bude klíčové MFC chybně interpretují řetězec SQL jako název tabulky a začlenit ji do Vyberte prohlášení, 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 nesmí vkládat mezery před složená závorka v volání prohlášení nebo před Vyberte klíčové slovo v Vyberte prohlášení.

Obvyklý postup je předat NULL na otevřených; v tomto případě otevřených volání GetDefaultSQL.Pokud používáte odvozené CRecordset třídy, GetDefualtSQL poskytuje názvy tabulky uvedené v ClassWizard.Místo toho můžete zadat další informace lpszSQL parametr.

Ať předáte, Otevřít sestaví konečný řetězec SQL pro dotaz (pravděpodobně řetězec SQL kde a Order klauzule připojen lpszSQL řetězec předaný) a potom provede dotaz.Vyrobeno řetězce můžete prověřit voláním GetSQL po volání otevřených.Další podrobnosti o způsobu záznamů vytvoří příkaz SQL a vybere záznamy, naleznete v článku záznamů: jak sady záznamů vyberte záznamy (ODBC).

Pole datové členy vaší třídy recordset jsou vázány na sloupce dat vybrána.Pokud jsou vráceny žádné záznamy, první záznam stane aktuálním záznamem.

Pokud chcete nastavit možnosti pro sadu záznamů jako filtr nebo řazení, zadat po vytvoření objektu recordset, ale před volání otevřených.Pokud chcete aktualizovat záznamy v sadě záznamů po záznamů je již otevřena, volání Requery.

Další informace včetně další příklady naleznete v článcích Záznamů (ODBC), záznamů: jak sady záznamů vyberte záznamy (ODBC), a záznamů: vytváření a zavírání sady záznamů (ODBC).

Výjimky

Tuto metodu lze vyvolávají 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

Viz také

Referenční dokumentace

Třída CRecordset

Diagram hierarchie

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery