Sdílet prostřednictvím


Výměna polí záznamu: Práce s kódem průvodce

Poznámka:

Průvodce příjemcem rozhraní ODBC MFC není v sadě Visual Studio 2019 a novější k dispozici. Příjemce můžete přesto vytvořit ručně.

Toto téma vysvětluje kód, který průvodce aplikací MFC a přidat třídu (jak je popsáno v přidání příjemce ROZHRANÍ ODBC MFC), aby podporoval RFX a jak můžete chtít tento kód změnit.

Poznámka:

Toto téma se týká tříd odvozených z toho, ze CRecordset kterých hromadné načítání řádků nebylo implementováno. Pokud používáte hromadné načítání řádků, je implementována výměna polí hromadného záznamu (Bulk RFX). Hromadný formát RFX je podobný formátu RFX. Informace o rozdílech najdete v tématu Sada záznamů: Hromadné načítání záznamů (ODBC).

Když vytvoříte třídu sady záznamů pomocí Průvodce aplikací MFC nebo Přidat třídu, průvodce zapíše následující prvky související s dokumentem RFX za vás na základě zdroje dat, tabulky a možností sloupců, které v průvodci provedete:

  • Deklarace datových členů sady záznamů ve třídě sady záznamů

  • Přepsání CRecordset::DoFieldExchange

  • Inicializace datových členů sady záznamů v konstruktoru tříd záznamů

Deklarace datových členů pole

Průvodci zapisují deklaraci třídy sady záznamů do souboru .h, který se podobá následující třídě CSections:

class CSections : public CRecordset
{
public:
   CSections(CDatabase* pDatabase = NULL);
   DECLARE_DYNAMIC(CSections)

// Field/Param Data
   CString   m_strCourseID;
   CString   m_strInstructorID;
   CString   m_strRoomNo;
   CString   m_strSchedule;
   CString   m_strSectionNo;

// Overrides
   // Wizard generated virtual function overrides
   protected:
   virtual CString GetDefaultConnect();  // Default connection string
   virtual CString GetDefaultSQL();      // Default SQL for Recordset
   virtual void DoFieldExchange(CFieldExchange* pFX);  // RFX support

// Implementation
#ifdef _DEBUG
   virtual void AssertValid() const;
   virtual void Dump(CDumpContext& dc) const;
#endif

};

Pokud přidáte datové členy parametrů nebo nové datové členy polí, které svážete sami, přidejte je za vygenerované průvodcem.

Všimněte si také, že průvodce přepíše DoFieldExchange člena funkce třídy CRecordset.

Přepsání DoFieldExchange

DoFieldExchange je jádrem RFX. Architektura volá DoFieldExchange pokaždé, když potřebuje přesunout data ze zdroje dat do sady záznamů nebo ze sady záznamů do zdroje dat. DoFieldExchange podporuje také získání informací o datových členech pole prostřednictvím členské funkce IsFieldDirty a IsFieldNull .

Následující DoFieldExchange přepsání je pro CSections třídu. Průvodce zapíše funkci do souboru .cpp třídy sady záznamů.

void CSections::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   RFX_Text(pFX, "CourseID", m_strCourseID);
   RFX_Text(pFX, "InstructorID", m_strInstructorID);
   RFX_Text(pFX, "RoomNo", m_strRoomNo);
   RFX_Text(pFX, "Schedule", m_strSchedule);
   RFX_Text(pFX, "SectionNo", m_strSectionNo);
}

Všimněte si následujících klíčových funkcí funkce:

  • Tato část funkce se nazývá mapa polí.

  • Volání ukazatelemCFieldExchange::SetFieldTypepFX. Toto volání určuje, že všechna volání funkce RFX až do konce DoFieldExchange nebo dalšího volání SetFieldType jsou výstupní sloupce. Další informace naleznete v tématu CFieldExchange::SetFieldType.

  • Několik volání RFX_Text globální funkce – jedno na datový člen pole (to jsou všechny CString proměnné v příkladu). Tato volání určují vztah mezi názvem sloupce ve zdroji dat a datovým členem pole. Funkce RFX dělají skutečný přenos dat. Knihovna tříd poskytuje funkce RFX pro všechny běžné datové typy. Další informace o funkcích RFX naleznete v tématu Výměna polí záznamu: Použití funkcí RFX.

    Poznámka:

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

  • Ukazatel pFX na CFieldExchange objekt, který architektura předává při volání DoFieldExchange. Objekt CFieldExchange určuje operaci, která DoFieldExchange se má provést, směr přenosu a další kontextové informace.

Konstruktor sady záznamů

Konstruktor sady záznamů, který průvodci zapisují, obsahuje dvě věci související s dokumentem RFX:

  • Inicializace pro každého datového člena pole

  • Inicializace m_nFields datového členu , který obsahuje počet datových členů pole

Konstruktor pro příklad sady CSections záznamů vypadá takto:

CSections::CSections(CDatabase* pdb)
   : CRecordset(pdb)
{
   m_strCourseID = "";
   m_strInstructorID = "";
   m_strRoomNo = "";
   m_strSchedule = "";
   m_strSectionNo = "";
   m_nFields = 5;
}

Poznámka:

Pokud přidáte datové členy polí ručně, protože pokud dynamicky svážete nové sloupce, musíte zvýšit m_nFields. Uděláte to tak, že připojíte další řádek kódu, například:

m_nFields += 3;

Toto je kód pro přidání tří nových polí. Pokud přidáte datové členy parametrů, musíte inicializovat m_nParams datový člen, který obsahuje počet datových členů parametru. m_nParams Vložte inicializaci mimo hranaté závorky.

Viz také

Výměna polí záznamu (Record Field Exchange – RFX)