Sada záznamů: Jak sady záznamů vybírají záznamy (ODBC)
Toto téma platí pro třídy knihovny MFC rozhraní ODBC.
Toto téma vysvětluje:
Vaši roli a možnosti při výběru záznamů.
Jak tvoří sada záznamů příkazy SQL a vybírá záznamy.
Co můžete udělat pro přizpůsobení výběru.
Sady záznamů vybírají záznamy ze zdroje dat prostřednictvím ovladače rozhraní ODBC tím, že odešlou příkazy SQL ovladači. V závislosti na vašem návrhu SQL odešle a otevře třídu sady záznamů.
Možnosti při výběru záznamů
Následující tabulka zobrazuje možnosti při výběru záznamů.
Jak a kdy můžete ovlivnit sadu záznamů
Pokud |
Povolené akce |
---|---|
Deklarujete třídu sady záznamů s průvodcem Add Class |
Určit, ze které tabulky chcete vybrat. Určit, které sloupce chcete zahrnout. |
Dokončíte implementaci třídy sady záznamů |
Přepsat členské funkce, například OnSetOptions (pokročilé) chcete-li nastavit specifické možnosti aplikace nebo změnit výchozí nastavení. Zadat parametr datových členů, jestliže chcete parametrizovanou sadu záznamů. |
Sestavíte objekt sady záznamů (před voláním Open) |
Určit podmínku vyhledávání (případně složenou) pro použití v klauzuli WHERE, která filtruje záznamy. Viz téma Sada záznamů: Filtrování záznamů (ODBC). Určit pořadí řazení pro použití v klauzuli ORDER BY, která řadí záznamy. Viz téma Sada záznamů: Řazení záznamů (rozhraní ODBC). Určit hodnoty parametru pro všechny parametry, které jste přidali do třídy. Viz téma Sada záznamů: Parametrizování a sada záznamů (ODBC). |
Spustíte dotaz sady záznamů voláním Open |
Zadat vlastní řetězec SQL, chcete-li nahradit výchozí řetězec SQL, který je nastaven průvodcem. Viz CRecordset::Open v Referenci knihovny třídy a SQL: Přizpůsobení vašeho SQL dotazu sady záznamů (rozhraní ODBC). |
Voláte Requery pro opakované spuštění dotazu sady záznamů s nejnovějšími hodnotami nad zdrojem dat |
Zadat nové parametry, filtr nebo řazení. Viz téma Sada záznamů: Opětovné spuštění dotazu sady záznamů (rozhraní ODBC). |
Jak sada záznamů sestavuje příkaz SQL
Pokud voláte členskou funkci objeku sady záznamů Open, Open vytvoří výpis SQL pomocí některé nebo všech následujících složek:
Parametr lpszSQL předaný do funkce Open. Není-li tento parametr NULL, tak určuje vlastní řetězec SQL nebo jeho část. Systém analyzuje řetězec. Pokud je řetězec SQL příkaz SELECT nebo příkaz rozhraní ODBC CALL, systém použije řetězec jako příkaz SQL sady záznamů. Pokud řetězec nezačíná "SELECT" nebo "{CALL", systém použije to, co je součástí konstrukce SQL klauzule FROM.
Řetězec vrácený GetDefaultSQL. Jako výchozí je toto název tabulky zadaný pro sadu záznamů v průvodci, ale můžete změnit návratovou hodnotu. Systém volá GetDefaultSQL – pokud řetězec nezačíná "SELECT" nebo "{CALL", předpokládá se, že je to název tabulky, který slouží k sestavení příkazu SQL.
Pole datových členů sady záznamů, které má být vázáno k určitým sloupcům tabulky. Systém sváže záznam sloupců s adresami těchto členů jejich použitím jako vyrovnávací paměti. Systém určuje korelaci pole datových členů ke sloupcům tabulky z RFX nebo Bulk RFX funkce volá v členské funkci sady záznamů DoFieldExchange nebo DoBulkFieldExchange.
Filtr sady záznamů, pokud existuje, je součástí datového člene m_strFilter. Systém použije tento řetězec k vytvoření SQL klauzule WHERE.
Pořadí řazení sady záznamů, pokud existuje, je obsažen v datovém členu m_strSort. Systém použije tento řetězec k vytvoření SQL klauzule ORDER BY.
Tip
Chcete-li použít SQL klauzuli GROUP BY (případně klauzuli HAVING), připojte klauzule na konec vašeho filtračního řetězce.
Hodnoty libovolných parametrů datových členů zadáte pro třídu. Hodnoty parametru nastavíte těsně před voláním Open nebo Requery. Systém sváže hodnoty parametru se zástupnými symboly "?" v řetězeci SQL. V době kompilace zadáte řetězec se zástupnými symboly. Za běhu systém vyplní údaje založené na hodnotách předaného parametru.
Open tvoří příkaz SQL SELECT z těchto složek. Viz téma Vlastní úprava výběru pro podrobné informace o tom, jak systém používá složky.
Poté, co je příkaz vytvořen, Open odešle SQL správci ovladačů rozhraní ODBC (a také knihovně kurzorů rozhraní ODBC pokud je v paměťi) a ten jej odešle ovladači rozhraní ODBC pro konkrétní systém DBMS. Ovladač komunikuje s DBMS k provedení výběru nad zdrojem dat a načte první záznam. Systém načte záznam do pole datových členů sady záznamů.
Kombinace těchto postupů slouží k otevření tabulek a k vytvoření dotazu založeného na spojení více tabulek. Pomocí dalších úprav můžete volat předdefinované dotazy (uložené procedury), zvolit sloupce tabulky, které nejsou známy v době návrhu, a navázat je k polím sady záznamů nebo můžete provádět většinu dalších úkolů týkající se přístupu k datům. Úlohy, které nelze provádět přizpůsobením sad záznamů, můžete i nadále provést voláním funkcí rozhraní API ODBC nebo přímo vykonávat příkazy SQL pomocí CDatabase::ExecuteSQL.
Vlastní úprava výběru
Kromě dodání filtru, pořadí řazení nebo parametrů, můžete provést následující akce chcete-li přizpůsobit výběr sady záznamů:
Předat vlastní řetězec SQL lpszSQL když voláte Open pro sadu záznamů. Cokoliv předáte lpsqSQL má přednost před tím, co vrátí členská funkce GetDefaultSQL.
Další informace získáte v části SQL: Přizpůsobení příkazu SQL sady záznamů (ODBC), jenž popisuje typy příkazů SQL (nebo částečné příkazy), které lze předat Open, a co s těmito příkazy systém provádí.
Poznámka
Pokud předáte vlastní řetězec, který nezačíná "SELECT" nebo "{CALL", knihovna MFC předpokládá, že obsahuje název tabulky. To platí také pro další odrážku.
Změnit řetězec, který průvodce zapíše do sady záznamů členské funkce GetDefaultSQL. Upravte kód funkce, abyste změnili návratovou hodnotu. Jako výchozí průvodce vytvoří funkci GetDefaultSQL, která vrací jeden název tabulky.
Můžete mít GetDefaultSQL a vrátit každou z položek, kterou jste předali v lpszSQL jako parametr Open. Pokud nepředáte vlastní řetězec SQL v lpszSQL, systém použije řetězec, který vrátí funkce GetDefaultSQL. Přinejmenším musí funkce GetDefaultSQL vracet jeden název tabulky. Ale můžete mít funkci, která vrátí více názvů tabulek, úplný příkaz SELECT, ODBC příkaz CALL atd. Pro seznam toho, co můžete předat lpszSQL — nebo co může GetDefaultSQL vrátit — viz SQL: Přizpůsobení vašeho SQL dotazu sady záznamů (rozhraní ODBC).
Pokud provádíte spojení dvou nebo více tabulek, přepište GetDefaultSQL, abyste přizpůsobili tabulkový seznam použitý v SQL klauzuli FROM. Více informací naleznete v tématu Sada záznamů: Provedení spojení (rozhraní ODBC).
Ručně vytvořit vazbu dalšího pole datových členů, případně na základě informací, které jste získali o schéma zdroje dat za běhu. Přidáte pole datových členů do třídy sady záznamů, voláte pro ně fukce RFX nebo hromadné RFX k členské funkci DoFieldExchange nebo DoBulkFieldExchange a inicializujete datové členy v konstruktoru třídy. Více informací naleznete v tématu Sada záznamů: Dynamická vazba datových sloupců (rozhraní ODBC).
Přepsat členské funkce sady záznamů, například OnSetOptions (pokročilé), chcete-li nastavit specifické možnosti aplikace nebo přepsat výchozí nastavení.
Pokud chcete založit sadu záznamů na složitém příkazu SQL, musíte použít kombinaci těchto technik. Například možná chcete použít klauzuli SQL a klíčová slova nejsou přímo podporována sadou záznamů, nebo možná chcete spojit více tabulek.
Viz také
Koncepty
Sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC)