Udostępnij za pośrednictwem


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.

Zobacz też

Koncepcje

Wymiany pola rekordu (RFX)