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í ukazatelem
CFieldExchange::SetFieldType
pFX
. Toto volání určuje, že všechna volání funkce RFX až do konceDoFieldExchange
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šechnyCString
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
. ObjektCFieldExchange
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.