Sdílet prostřednictvím


Sada záznamů: Dynamické vazby datových sloupců (ODBC)

Toto téma platí pro třídy knihovny MFC rozhraní ODBC.

Sady záznamů spravují vazbu sloupců tabulky, které zadáte během doby návrhu. Existují ale případy, kdy chcete provést vazbu na sloupce, které jsou pro Vás neznámé během doby návrhu.Toto téma vysvětluje:

  • Když chcete dynamicky navázat sloupce do sady záznamů.

  • Jak dynamicky navázat sloupce za běhu.

[!POZNÁMKA]

Toto téma se týká objektů odvozených z třídy CRecordset, ve které nebylo naimplementováno hromadné načítání řádku. Obecně popsané techniky nejsou vhodné v případě, že používáte hromadné načítání řádku.Další informace o hromadném načítání řádku, naleznete v sady záznamů: Fetching Records in Bulk (ODBC).

Když chcete dynamicky navázat sloupce

Během doby návrhu, vytváří Průvodce aplikace knihovny MFC nebo Průvodce příjemce knihovny MFC rozhraní ODBC (z Přidat třídu) třídy sady záznamů na základě známých tabulek a sloupců Vašeho zdroje dat.Databáze se mohou změnit od doby kdy je navrhujete a pokud později Vaše aplikace používá za běhu tyto tabulky a sloupce.Vy nebo jiný uživatel může přidat nebo odebrat tabulku nebo přidat nebo odebrat sloupce z tabulky, ze kterých vychází sada záznamů Vaší aplikace.To se pravděpodobně netýká všech aplikací pro přístup k datům, ale pokud se to týká Vaší aplikace, jak se můžete vypořádat se změnami schématu databáze jinak než změnou návrhu a opětovným zkompilováním?Účelem tohoto tématu je odpovědět na tuto otázku.

Toto téma popisuje nejběžnější případ, ve kterém můžete dynamicky vázat sloupce – zahájené se sadou záznamů založenou na známém schématu databáze, ve které chcete za běhu zpracovávat další sloupce.Další téma předpokládá nejobvyklejší případ mapování dalších sloupců do CString pole datových členů, přestože jsou dodávány návrhy, aby Vám pomohly spravovat jiné datové typy.

S malou částí kódu navíc, můžete:

  • Určit, které sloupce jsou za běhu k dispozici.

  • Svázat dynamicky za běhu další sloupce do Vaší sady záznamů.

Vaše sada záznamů stále obsahuje datové členy pro sloupce, které znáte během doby návrhu.Obsahuje také malé množství kódu navíc, který dynamicky určuje, zda byly všechny nové sloupce přidány do Vaší cílové tabulky a, pokud ano, dynamicky váže tyto nové sloupce do přiděleného úložiště (spíše než do datových členů sady záznamů).

Toto téma nezahrnuje jiné případy dynamického vázání, jako je například odstranění tabulek nebo sloupců.Pro tyto případy potřebujete použít více přímých volání rozhraní ODBC API.Informace naleznete v Referenci programátora sady SDK rozhraní ODBC na disku CD knihovny MSDN.

Jak dynamicky navázat sloupce

Chcete-li dynamicky navázat sloupce, musíte znát (nebo moci určit) názvy dalších sloupců.Musíte také přidělit úložiště pro další pole datových členů, zadejte jejich názvy a jejich typy a zadejte počet sloupců, které přidáváte.

Následující diskuse uvádí dvě různé sady záznamů.První je hlavní sada záznamů, která vybere záznamy z cílové tabulky.Druhou je speciální sloupec sady záznamů, použitý pro získání informací o sloupcích ve Vaší cílové tabulce.

Hlavní proces

V nejobecnější úrovni postupujete takto:

  1. Sestavte objekt Vaší hlavní sady záznamů.

    Volitelně předejte ukazatel na otevřený objekt CDatabase nebo buďte schopni poskytnout informace o připojení na sloupec sady záznamů jiným způsobem.

  2. Proveďte kroky pro dynamické přidání sloupců.

    Viz proces Přidání sloupců, popsaný níže.

  3. Otevřete Vaší hlavní sadu záznamů.

    Sada záznamů vybere záznamy a použije výměnu pole záznamu (RFX) pro navázání statických sloupců (namapovaných do pole datových členů sady záznamů) a dynamických sloupců (namapovaných do dodatečného úložiště, které přidělíte).

Přidání sloupců

Dynamická vazba za běhu přidaných sloupců vyžaduje následující kroky:

  1. Za běhu zjistěte, které sloupce jsou v cílové tabulce.Z těchto informací získejte seznam sloupců, které byly přidány do tabulky po návrhu Vaší třídy sady záznamů.

    Dobrým přístupem je použití třídy sloupce sady záznamů, navržené k dotazování zdroje dat pro sloupce informací o zdrojové tabulce (jako je například název sloupce a datový typ).

  2. Poskytuje úložiště pro nové pole datových členů.Protože Vaše třída hlavní sady záznamů neobsahuje pole datových členů pro neznámé sloupce, musíte poskytnout místo pro ukládání názvů, výsledných hodnot a případně informace datového typu (pokud jsou sloupce rozdílných datových typů).

    Jedním ze způsobů je sestavení jednoho nebo více dynamických seznamů. Jeden pro názvy nových sloupců, další pro jejich výsledné hodnoty a třetí pro jejich datové typy (pokud je to nutné).Tyto seznamy, zejména seznam hodnot, poskytují informace a potřebné úložiště pro vazbu.Následující obrázek ukazuje vytváření seznamů.

    Vytváření seznamů sloupců pro dynamické vázání

    Vytváření seznamů sloupců pro dynamickou vazbu

  3. Přidejte volání RFX funkce ve Vaší funkci DoFieldExchange hlavní sady záznamů pro každý přidaný sloupec. Tato RFX volání provádějí načítání záznamu včetně dalších sloupců a vážou sloupce na datové členy sady záznamů nebo na Vámi zadané dynamické úložiště.

    Jedním ze způsobů je přidání smyčky do Vaší funkce hlavní sady záznamů DoFieldExchange, která prochází seznamem nových sloupců, voláním příslušné RFX funkce pro každý sloupec v seznamu. Při každém volání RFX je předán název sloupce ze seznamu názvů sloupců a umístění úložiště v odpovídajícím členu seznamu výsledných hodnot.

Seznamy sloupců

Čtyři seznamy, které potřebujete pro práci, jsou uvedeny v následující tabulce.

  • Aktuální sloupce tabulky (Seznam 1 na obrázku)
    Seznam aktuálních sloupců v tabulce ve zdroji dat.Tento seznam může odpovídat seznamu sloupců, které jsou aktuálně navázány ve Vaší sadě záznamů.

  • Vázané sloupce sady záznamů (Seznam 2 na obrázku)
    Seznam sloupců navázaných ve Vaší sadě záznamů.Tyto sloupce již obsahují RFX příkazy ve Vaší funkci DoFieldExchange.

  • Sloupce pro dynamickou vazbu (Seznam 3 na obrázku)
    Seznam sloupců v tabulce, ale ne ve Vaší sadě záznamů.Jedná se o sloupce, které chcete dynamicky vázat.

  • Dynamické hodnoty sloupce (Seznam 4 na obrázku)
    Seznam obsahující úložiště pro hodnoty získané ze sloupců, které dynamicky vážete.Prvky tohoto seznam odpovídají těm, které jsou v seznamu Sloupce pro dynamickou vazbu, jedna ku jedné.

Vytváření Vašich seznamů

S úvahou obecné strategie se můžete obrátit na detaily.Postupy ve zbývající části tohoto tématu Vám ukazují, jak sestavit seznamy, znázorněné v části Seznamy sloupců.Postupy vás provedou:

  • Určování názvů sloupců mimo Vaší sadu záznamů.

  • Poskytování dynamického úložiště pro nově přidané sloupce do tabulky.

  • Dynamické přidávání RFX volání pro nové sloupce.

Určení které sloupce tabulky nejsou ve Vaší sadě záznamů

Sestavte seznam (Vázané sloupce sady záznamů, jako v Seznamu 2 na obrázku), který obsahuje seznam již navázaných sloupců ve Vaší hlavní sadě záznamů.Poté sestavte seznam (Sloupce pro dynamickou vazbu, odvozený z Aktuální sloupce tabulky a Vázané sloupce sady záznamů), obsahující názvy sloupců, které jsou v tabulce ve zdroji dat, ale nejsou ve Vaší hlavní sadě záznamů.

Chcete-li zjistit názvy sloupců, které nejsou v sadě záznamů (Sloupce pro dynamickou vazbu)

  1. Sestavte seznam (Vázané sloupce sady záznamů) sloupců, které jsou již vázány ve Vaše hlavní sadě záznamů.

    Jedním ze způsobů je vytvořit Vázané sloupce sady záznamů během doby návrhu.Můžete vizuálně zkoumat volání RFX funkce ve funkci DoFieldExchange sady záznamů pro zjištění těchto názvů. Poté nastavte Váš seznam jako pole inicializované s názvy.

    Například obrázek zobrazuje Vázané sloupce sady záznamů (Seznam 2) se třemi prvky.Vázané sloupce sady záznamů neobsahují sloupec Phone, zobrazený v Aktuální sloupce tabulky (Seznam 1).

  2. Porovnejte Aktuální sloupce tabulky a Vázané sloupce sady záznamů pro sestavení seznamu (Sloupce pro dynamickou vazbu) sloupců, které ještě nejsou vázány ve Vaše hlavní sadě záznamů.

    Jedním ze způsobů je smyčka ve Vašem seznamu sloupců v tabulce za běhu (Aktuální sloupce tabulky) a seznam sloupců, které jsou již vázány paralelně ve Vaší sadě záznamů (Vázané sloupce sady záznamů).DO Sloupců pro dynamickou vazbu umístěte všechny názvy z Aktuálních sloupců tabulky, které nejsou uvedeny ve Vázaných sloupcích sady záznamů.

    Například Ilustrace zobrazuje sloupce pro dynamickou vazbu (seznam 3) s jedním prvkem: sloupec Phone se nachází v aktuálních sloupcích tabulky (seznam 1), ale ne ve vázaných sloupcích sady záznamů (seznam 2).

  3. Sestavte seznam Dynamických hodnot sloupce (jako v Seznamu 4 na obrázku), do kterého uložte hodnoty dat, odpovídající každému názvu sloupce, uloženém ve Vašem seznamu sloupců pro dynamickou vazbu (Sloupce pro dynamickou vazbu).

    Prvky tohoto seznamu představují roli nové sady záznamů pole datových členů.Jsou umístění v úložišti, ke kterému jsou vázány dynamické sloupce.Popis seznamů naleznete v tématu Seznamy sloupců.

Poskytování úložiště pro nové sloupce

Dále nastavte umístění úložiště pro sloupce, které chcete vázat dynamicky.Účelem je poskytnout prvek seznamu, do kterého se uloží každá hodnota sloupce.Tato umístění úložiště srovnávají členské proměnné sady záznamů, které ukládají obvyklé vázané sloupce.

Chcete-li poskytnout dynamické úložiště pro nové sloupce (Dynamické hodnoty sloupce)

  • Sestavte Dynamické hodnoty sloupce, paralelně se Sloupcem pro dynamickou vazbu, pro obsažení hodnoty dat v každém sloupci.

    Například Ilustrace zobrazuje dynamické hodnoty sloupce (seznam 4) s jedním prvkem: CString objekt obsahující skutečné telefonní číslo z aktuálního záznamu: "555 - 12 12".

    V nejčastějším případě obsahují Dynamické hodnoty sloupce prvky typu CString. Pokud se zabýváte sloupci s různými datovými typy, potřebujete seznam, který obsahuje prvky různých typů.

Výsledkem předchozích postupů jsou dva hlavní seznamy: sloupce pro dynamickou vazbu obsahují názvy sloupců a dynamické hodnoty sloupce obsahují hodnoty ve sloupcích aktuálního záznamu.

Tip

Pokud nejsou všechny nové sloupce stejného datového typu, můžete chtít extra paralelní seznam, obsahující položky, které nějakým způsobem definují typ každého odpovídajícího prvku v seznamu sloupců. (Můžete použít hodnoty AFX_RFX_BOOL, AFX_RFX_BYTE atd., pokud chcete.Tyto konstanty jsou definovány v AFXDB.H.) Zvolte typ seznamu, založený na vámi reprezentovaných datových typů sloupců.

Přidání volání RFX pro vazbu sloupců

Nakonec zařiďte dynamické vázání zajištěním umístění volání RFX pro nové sloupce ve Vaší funkci DoFieldExchange.

Chcete-li dynamicky přidávat RFX volání pro nové sloupce

  • Přidejte kód v členské funkci DoFieldExchange Vaší hlavní sady záznamů, který prochází Vaším seznamem nových sloupců (Sloupce pro dynamickou vazbu). V každé smyčce získejte název sloupce ze Sloupců pro dynamickou vazbu a výslednou hodnotu pro sloupec z Dynamických hodnot sloupce.Tyto položky předejte volání RFX funkci, odpovídající datovému typu sloupce.Popis seznamů naleznete v tématu Seznamy sloupců.

V obvyklém případě ve Vašem volání funkceRFX_Text, získáte CString ze seznamů, jako v následujících řádkách kódu, kde jsou Sloupce pro dynamickou vazbu CStringList nazvány m_listName a Dynamické hodnoty sloupce CStringList jsou nazvány m_listValue:

RFX_Text( pFX, 
            m_listName.GetNext( posName ), 
            m_listValue.GetNext( posValue ));

Další informace o funkcích RFX naleznete v tématu Makra a Globals v Referenci knihovny třídy.

Tip

Pokud jsou nové sloupce různých datových typů, použijte příkaz switch ve smyčce pro volání příslušné funkce RFX pro každý typ.

Když volá architektura DoFieldExchange během procesu Open pro vazbu sloupců na sadu záznamů, zavolá RFX tyto sloupce pro staticky vázané sloupce.Poté volá Vaše smyčka opakovaně RFX funkce pro dynamické sloupce.

Viz také

Koncepty

Sada záznamů (ODBC)

Sada záznamů: Práce s velkými datovými položkami (ODBC)