Wymiana pól rekordów: praca z kodem kreatora

W tym temacie wyjaśniono kod który Kreator aplikacji MFC i Add Class (zgodnie z opisem w dodanie odbiorca ODBC MFC) zapisu do obsługi RFX i jak można zmienić ten kod.

[!UWAGA]

Ten temat dotyczy pochodną klasy CRecordset w wiersz, który luzem pobieranie nie została zaimplementowana.Jeśli używasz pobieranie wiersza zbiorczego wymiany pól rekordu luzem (RFX luzem) jest zaimplementowana.Większość RFX jest podobny do RFX.Aby zrozumieć różnice, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).

Po utworzeniu klasy zestaw rekordów przy użyciu Kreatora aplikacji MFC lub Add Class, kreator zapisuje następujące elementy związane z RFX dla tabeli można na podstawie źródła danych, a kolumna opcji wprowadzone w Kreatorze:

  • Deklaracje rekordów pole danych członków w klasie zestawu rekordów

  • ZastępującaCRecordset::DoFieldExchange

  • Inicjowanie zestawu rekordów pole danych członków w konstruktorze klasy zestawu rekordów

Deklaracje członków pola danych

Kreatorzy napisać deklarację klasy zestaw rekordów w pliku .h, podobne do następujących 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

};

Jeśli zostanie dodany parametr danych członków lub nowych członków pola danych, które wiążą się, należy je dodać po nich wygenerowany przez kreatora.

Ponadto, Zauważ, że kreator zastępuje DoFieldExchange funkcji składowej klasy CRecordset.

Zastępowanie DoFieldExchange

DoFieldExchange jest sercem RFX.Wywołania framework DoFieldExchange dowolnym momencie, należy go przenieść dane ze źródła danych do zestawu rekordów lub z zestawu rekordów do źródła danych.DoFieldExchangetakże uzyskiwanie informacji o obsługuje pola danych członków, za pośrednictwem IsFieldDirty i IsFieldNull funkcji elementów członkowskich.

Następujące DoFieldExchange jest zastąpienie dla CSections klasy.Kreator zapisuje funkcji w pliku CPP dla swojej 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);
}

Należy zauważyć następujące cechy funkcji:

  • W tej sekcji funkcja jest nazywany mapą pola.

  • Wywołanie CFieldExchange::SetFieldType, poprzez pFX wskaźnik.To wywołanie określa, że wszystkie funkcja RFX wywołuje na końcu 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 (z których wszystkie są CString zmiennych w przykładzie).Te wywołania określania relacji między nazwę kolumny w źródle danych i element członkowski danych pola.Funkcje RFX do transferu danych rzeczywistych.Biblioteka klas dostarcza funkcji RFX dla wszystkich powszechnie używanych typów danych.Aby uzyskać więcej informacji na temat funkcji RFX, zobacz wymiany pól rekordu: przy użyciu funkcji RFX.

    [!UWAGA]

    Kolejność kolumn w zestawie wyników musi odpowiadać kolejności wywołań funkcji RFX w DoFieldExchange.

  • pFX Wskaźnik do CFieldExchange obiekt, który w ramach przechodzi, gdy wywołuje DoFieldExchange.CFieldExchange Operacji określa obiekt który DoFieldExchange jest wykonanie kierunek transferu i innych informacji kontekstowych.

Konstruktor zestawu rekordów

Konstruktora zestawu rekordów, który zapis kreatorów zawiera dwie czynności związanych z RFX:

  • Inicjowanie dla każdego elementu członkowskiego danych pola

  • Inicjowanie m_nFields członka danych, która zawiera liczbę elementów danych pola

Konstruktor dla CSections przykładzie zestaw 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 żadnych elementów członkowskich danych pola ręcznie, jak to się dzieje w przypadku powiązania dynamicznie nowe kolumny, należy zwiększyć m_nFields.To zrobić przez dołączenie innego wiersza kodu, takich jak:

m_nFields += 3;

Jest to kod dodaje trzy nowe pola.Jeśli zostanie dodany parametr danych członków, musisz zainicjować m_nParams członka danych, która zawiera liczbę elementów członkowskich danych parametru.Umieścić m_nParams inicjowania poza nawiasami.

Zobacz też

Koncepcje

Wymiana pól rekordów (RFX)