Wymiany pola rekordu: Praca z kodu Kreator
W tym temacie wyjaśniono kod, Kreator aplikacji MFC i Add Class (jak opisano w Dodawanie konsumenta ODBC MFC) zapisu do obsługi RFX i w jaki sposób można zmienić tego kodu.
[!UWAGA]
Ten temat dotyczy klasy pochodzące od CRecordset w którym wiersz luzem pobieranie nie została zaimplementowana.Jeśli używasz pobieranie wiersza luzem wymiany pola rekordu luzem (RFX luzem) jest zaimplementowana.Luzem RFX jest podobny do RFX.Aby poznać różnice, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).
Podczas tworzenia klasy rekordów za pomocą Kreatora aplikacji MFC lub Add Class, kreator zapisuje następujące elementy związane z RFX dla Ciebie na podstawie źródła danych, tabeli i wybór kolumn należy w Kreatorze:
Deklaracje członków zestawu rekordów pola danych w klasie zestawu rekordów
PrzesłonięcieCRecordset::DoFieldExchange
Inicjowanie rekordów pole danych członków w konstruktorze klasy zestawu rekordów
Deklaracje członków danych pola
Kreatorzy zapisu deklaracji klasy rekordów w pliku .h, podobny do następującego dla klasy 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
};
Dodając parametr danych członków lub nowych członków pola danych, które wiążą się samodzielnie, można je dodać po nich wygenerowany przez kreatora.
Ponadto należy zauważyć, że kreator zastępuje DoFieldExchange funkcji składowej klasy CRecordset.
Zastępowanie DoFieldExchange
DoFieldExchange jest RFX.Rozmowy w ramach DoFieldExchange ilekroć wymaga przesunięcia danych ze źródła danych do zestawu rekordów lub zestawu rekordów do źródła danych.DoFieldExchangerównież obsługuje uzyskiwania informacji na temat pól danych członków poprzez IsFieldDirty i IsFieldNull funkcji elementów członkowskich.
Następujące DoFieldExchange override jest CSections klasy.Kreator zapisuje funkcji w pliku .cpp klasy zestawu rekordów.
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);
}
Zawiadomienie następujące cechy funkcji:
Funkcji tej sekcji jest nazywany mapą pola.
Wywołanie CFieldExchange::SetFieldType, poprzez pFX wskaźnik.To wywołanie określa, że wszystkich funkcji RFX wzywa do końca DoFieldExchange lub następne wywołanie SetFieldType są kolumn wyjściowych.Aby uzyskać więcej informacji, zobacz CFieldExchange::SetFieldType.
Kilka wywołań do RFX_Text funkcja globalna — jeden na każdego pola danych (wszystkie są CString zmiennych w przykładzie).Te wywołania określić relację między nazwę kolumny w źródle danych i członek danych pola.Funkcje RFX do transferu danych rzeczywistych.Biblioteka klas dostaw funkcji RFX dla typowych typów danych.Aby uzyskać więcej informacji na temat funkcji RFX, zobacz wymiany pola rekordu: przy użyciu funkcji RFX.
[!UWAGA]
Kolejność kolumn w zestawie wyników musi odpowiadać kolejności wywołania funkcji RFX w DoFieldExchange.
pFX Wskaźnik do CFieldExchange obiekt, który przekazuje ramy, gdy wywołuje DoFieldExchange.CFieldExchange Obiekt określa działania, DoFieldExchange jest wykonanie kierunek przesunięcia i innych informacji kontekstu.
Konstruktor zestawu rekordów
Konstruktor rekordów zapisu kreatorów zawiera dwie czynności związane z RFX:
Inicjowanie dla każdego pola danych
Inicjowanie dla m_nFields elementu danych, który zawiera numer pola danych członków
Konstruktor dla CSections przykład zestawu rekordów wygląda następująco:
CSections::CSections(CDatabase* pdb)
: CRecordset(pdb)
{
m_strCourseID = "";
m_strInstructorID = "";
m_strRoomNo = "";
m_strSchedule = "";
m_strSectionNo = "";
m_nFields = 5;
}
[!UWAGA]
Jeśli dodasz pola danych członków ręcznie, jak to się dynamicznie w przypadku powiązania nowe kolumny, należy zwiększyć m_nFields.W tym celu przez dołączenie innego wiersza kodu, takie jak:
m_nFields += 3;
Jest to kod dodaje trzy nowe pola.Jeśli dodasz członków danych parametru, musisz zainicjować m_nParams członka danych, która zawiera liczbę członków danych parametru.Umieścić m_nParams inicjowania spoza nawiasów.