Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Kreator klienta MFC ODBC nie jest dostępny w programie Visual Studio 2019 i nowszych wersjach. Nadal można ręcznie utworzyć użytkownika.
W tym temacie opisano kod, który kreator aplikacji MFC i dodawanie klasy (zgodnie z opisem w artykule Dodawanie użytkownika MFC ODBC) zapisuje w celu obsługi RFX i sposobu zmiany tego kodu.
Uwaga
Ten temat dotyczy klas pochodnych CRecordset , z których pobieranie wierszy zbiorczych nie zostało zaimplementowane. Jeśli używasz zbiorczego pobierania wierszy, implementowana jest wymiana pól rekordów zbiorczych (Bulk RFX). Zbiorcze RFX jest podobne do RFX. Aby zrozumieć różnice, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).
Podczas tworzenia klasy zestawu rekordów za pomocą Kreatora aplikacji MFC lub Dodawania klasy kreator zapisuje następujące elementy związane z RFX na podstawie źródła danych, tabeli i kolumny wybranych w kreatorze:
Deklaracje składowych danych pól zestawu rekordów w klasie zestawu rekordów
Przesłonięcia
CRecordset::DoFieldExchangeInicjowanie składowych danych pól zestawu rekordów w konstruktorze klasy zestawu rekordów
Deklaracje składowych danych pól
Kreatorzy zapisują deklarację klasy zestawu rekordów w pliku .h, który przypomina następujący 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 dodasz elementy członkowskie danych parametrów lub nowe elementy członkowskie danych pól powiązane samodzielnie, dodaj je po wygenerowanych przez kreatora elementach.
Zwróć również uwagę, że kreator zastępuje DoFieldExchange funkcję składową klasy CRecordset.
Przesłonięcia DoFieldExchange
DoFieldExchange jest sercem RFX. Platforma wywołuje DoFieldExchange wywołania za każdym razem, gdy musi przenieść dane ze źródła danych do zestawu rekordów lub z zestawu rekordów do źródła danych.
DoFieldExchange Obsługuje również uzyskiwanie informacji o elementach członkowskich danych pól za pomocą funkcji składowych IsFieldDirty i IsFieldNull .
Następujące DoFieldExchange zastąpienie dotyczy CSections klasy . Kreator zapisuje funkcję w pliku .cpp dla 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);
}
Zwróć uwagę na następujące kluczowe funkcje funkcji:
Ta sekcja funkcji jest nazywana mapą pól.
Wywołanie metody ,
CFieldExchange::SetFieldTypeza pośrednictwempFXwskaźnika. To wywołanie określa, że wszystkie funkcje RFX wywołuje do końcaDoFieldExchangelub następnego wywołania, abySetFieldTypeto kolumny wyjściowe. Aby uzyskać więcej informacji, zobacz CFieldExchange::SetFieldType.Kilka wywołań funkcji globalnej
RFX_Text— jeden na element członkowski danych pola (wszystkie z nich sąCStringzmiennymi w przykładzie). Te wywołania określają relację między nazwą kolumny w źródle danych a elementem członkowskim danych pól. Funkcje RFX wykonują rzeczywisty transfer danych. Biblioteka klas dostarcza funkcje RFX dla wszystkich typowych typów danych. Aby uzyskać więcej informacji na temat funkcji RFX, zobacz Wymiana pól rekordów: korzystanie z funkcji RFX.Uwaga
Kolejność kolumn w zestawie wyników musi być zgodna z kolejnością wywołań funkcji RFX w pliku
DoFieldExchange.Wskaźnik
pFXdo obiektu CFieldExchange , który struktura przechodzi po wywołaniuDoFieldExchangemetody . ObiektCFieldExchangeokreśla operację, któraDoFieldExchangema być wykonywana, kierunek transferu i inne informacje kontekstowe.
Konstruktor zestawu rekordów
Konstruktor zestawu rekordów, który pisze kreatory, zawiera dwie elementy związane z RFX:
Inicjowanie dla każdego elementu członkowskiego danych pól
Inicjowanie elementu członkowskiego danych m_nFields zawierającego liczbę składowych danych pól
Konstruktor przykładu CSections 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 ręcznie dodasz jakiekolwiek elementy członkowskie danych pól, tak jak w przypadku dynamicznego powiązania nowych kolumn, musisz zwiększyć m_nFieldswartość . W tym celu dołącz kolejny wiersz kodu, taki jak:
m_nFields += 3;
Jest to kod dodawania trzech nowych pól. Jeśli dodasz jakiekolwiek składowe danych parametrów, musisz zainicjować element członkowski danych m_nParams zawierający liczbę składowych danych parametrów. Umieść inicjację m_nParams poza nawiasami kwadratowymi.