Sdílet prostřednictvím


Výměna pole záznamu (Record Field Exchange - RFX): Práce s kódem průvodce

Toto téma vysvětluje kód, který zapíšou Průvodce aplikace knihovny MFC a Přidat třídu (jak je popsáno v Přidání příjemce knihovny MFC rozhraní ODBC) k podpoře RFX a jak můžete změnit kód.

Poznámka

Toto téma se týká tříd odvozených z třídy CRecordset, ve které nebylo naimplementováno hromadné načítání řádku. Je naimplementována hromadná výměna pole záznamu (Bulk RFX), pokud používáte hromadné načítání řádku. Funkce hromadné výměny pole záznamu (Bulk RFX) je podobná funkci výměny pole záznamu (RFX). Chcete-li porozumět rozdílům, přečtěte si téma Sada záznamů: Hromadné načítání záznamů (rozhraní ODBC).

Když vytvoříte třídu sady záznamů s Průvodcem aplikace knihovny MFC nebo s Přidat třídu, zapíše průvodce následující prvky související s RFX, založené na volbě zdroje dat, tabulky a sloupce, provedené v průvodci:

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

  • Přepsání CRecordset::DoFieldExchange

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

Deklarace pole datového člena

Průvodci zapíše deklaraci třídy sady záznamů v souboru .h, která se podobá následujícímu pro třídu 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

};

Přidáte-li parametr datových členů nebo nové pole datových členů, které navážete sami, můžete je přidat po vygenerování průvodcem.

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

Přepsání DoFieldExchange

DoFieldExchange je jádrem RFX. Architektura volá DoFieldExchange kdykoli je třeba přesunout data ze zdroje dat do sady záznamů nebo ze sady záznamů do zdroje dat. DoFieldExchange také podporuje získávání informací o poli datových členů, prostřednictvím členských funkcí IsFieldDirty a IsFieldNull.

Následující přepsání DoFieldExchange je pro třídu CSections. Průvodce zapíše funkci v soubru .cpp pro vaší třídu 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í této funkce:

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

  • Volání CFieldExchange::SetFieldType, prostřednictvím ukazatele pFX. Toto volání určuje, že všechna volání RFX funkce vyžadují konec DoFieldExchange nebo další volání SetFieldType jsou výstupní sloupce. Další informace naleznete v tématu CFieldExchange::SetFieldType.

  • Několik volání globální funkceRFX_Text – každé pro pole datového člena (všechny, které jsou proměnné CString v příkladu). Tato volání určují relaci mezi názvem sloupce ve zdroji dat a polem datového člen. Funkce RFX provádějí skutečný přenos dat. Knihovna tříd poskytuje funkce RFX pro všechny běžné datové typy. Další informace o RFX funkcích naleznete v tématu Výměna pole záznamu: Pomocí funkcí výměny pole záznamu (RFX).

    Poznámka

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

  • Ukazatel pFX na objekt CFieldExchange, který předává architektura při volání DoFieldExchange. Objekt CFieldExchange určuje operaci, která je provedena DoFieldExchange, směr přenosu a další informace o kontextu.

Konstruktor sady záznamů

Konstruktor sady záznamů, který zapíše průvodce, obsahuje dvě věci týkající se RFX:

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

  • Inicializaci pro datového člena m_nFields, který obsahuje číslo pole datových členů

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

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

Poznámka

Přidáte-li ručně jakékoliv pole datových členů, jak můžete, pokud svážete dynamicky nové sloupce, budete muset zvýšit m_nFields. Tak učiníte přidáním další řádky kódu, jako například:

m_nFields += 3;

Toto je kód pro přidání tří nových polí. Přidáte-li jakýkoliv parametr datových členů, je třeba inicializovat datového člena m_nParams, který obsahuje počet parametrů datových členů. Umístěte inicializaci m_nParams mimo závorky.

Viz také

Koncepty

Výměna pole záznamu (Record Field Exchange - RFX)