共用方式為


資料錄欄位交換:精靈程式碼的使用

這個主題說明 [MFC 應用程式精靈] 和 [加入類別] (如加入 MFC ODBC 消費者中所說明的) 寫入支援 RFX 的程式碼,以及您要變更程式碼的方法。

注意事項注意事項

這個主題適用於未實作大量資料列擷取的 CRecordset 衍生物件。 如果您要使用大量資料列擷取,就實作大量資料錄欄位交換 (Bulk RFX)。 Bulk RFX 類似 RFX。 若要了解兩者間的差異,請參閱資料錄集:擷取 大量資料錄 (ODBC)

當您使用 [MFC 應用程式精靈] 或 [加入類別] 來建立資料錄集類別,精靈會根據資料來源、資料表和您在精靈中選取的資料行來為您撰寫下列之與 RFX 相關的項目:

  • 資料錄集類別內之資料錄集欄位資料成員的宣告。

  • CRecordset::DoFieldExchange 的覆寫函式。

  • 資料錄集類別建構函式裡的資料錄集欄位資料成員的初始化。

欄位資料成員宣告

精靈會在 .h 檔內寫入資料錄集類別的宣告,類似下列 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

};

如果您要加入您自己繫結的參數資料成員或新的欄位資料成員,請在精靈先產生一個後再將其加入。

此外,請注意精靈會覆寫 CRecordset 類別的 DoFieldExchange 成員函式。

DoFieldExchange 覆寫函式

DoFieldExchange 是 RFX 的主要部分。 架構會在任何需要於資料來源和資料錄集間移動資料的時候,呼叫 DoFieldExchangeDoFieldExchange 也支援透過 IsFieldDirtyIsFieldNull 成員函式,來取得欄位資料成員的資訊。

下列是 CSections 類別的 DoFieldExchange 覆寫函式。 精靈會為您的資料錄集類別將此函式寫入 .cpp 檔。

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);
}

請注意以下的此函式主要功能:

  • 這個部分的函式稱為欄位對應。

  • 透過 pFX 指標呼叫 CFieldExchange::SetFieldType。 這個呼叫會指定 RFX 函式呼叫到 DoFieldExchange 的結尾,或對 SetFieldType 的下一個呼叫是輸出資料行。 如需詳細資訊,請參閱 CFieldExchange::SetFieldType

  • 幾個 RFX_Text 全域函式的呼叫;每個欄位資料成員一個 (範例中的全都是 CString 變數)。 這些呼叫指定資料來源上的資料行名稱和欄位資料成員間的關聯性。 RFX 函式會實際的資料傳輸。 類別庫為所有通用資料型別提供 RFX 函式。 如需有關 RFX 函式的詳細資訊,請參閱資料錄欄位交換:RFX 函式的使用

    注意事項注意事項

    在您的結果集 (Result Set) 內的資料行順序,必須與在 DoFieldExchange 內 RFX 函式呼叫順序相符。

  • 當架構呼叫 DoFieldExchange 時,pFX 指標會指向架構傳遞的 CFieldExchange 物件。 CFieldExchange 物件指定 DoFieldExchange 要執行的作業、傳輸方向和其他內容資訊。

資料錄集建構函式

精靈寫入的資料錄集建構函式包含兩件與 RFX 相關的事:

  • 每個欄位資料成員的初始化。

  • 包含欄位資料成員數目的 m_nFields 資料成員的初始化。

CSections 資料錄集的建構函式範例看起像是:

CSections::CSections(CDatabase* pdb)
   : CRecordset(pdb)
{
   m_strCourseID = "";
   m_strInstructorID = "";
   m_strRoomNo = "";
   m_strSchedule = "";
   m_strSectionNo = "";
   m_nFields = 5;
}
注意事項注意事項

如果您手動加入欄位資料成員,且您可以動態的繫結新增的資料行,就必須遞增 m_nFields。 您可以附加其他的程式碼行來達成,諸如:

m_nFields += 3;

這是一個加入三個新增的欄位時之程式碼。 如果您加入了任何的參數資料成員,就必須初始化包含參數資料成員數目的 m_nParams 資料成員。 在方括弧外放置 m_nParams 初始化。

請參閱

概念

資料錄欄位交換 (RFX)