zaiqian: 
    朋友, 你对 MFC的 CRecordset可能没有完全理解, 请仔细阅读如下的代码, 数据和变量是通过 void CBkClerkSet::DoFieldExchange(CFieldExchange* pFX) 函数实现的(由Wizard生成), 相信你一定能明白!
class CBkClerkSet : public CRecordset
{
public:
CBkClerkSet(CDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CBkClerkSet)// Field/Param Data
//{{AFX_FIELD(CBkClerkSet, CRecordset)
CString m_cEmpID;
CString m_cName;
CString m_cPwd;
CString m_cSex;
CString m_cTel;
CString m_cGrpID;
long m_iPriv;
CString m_cEnterBy;
CTime m_dCreate;
//}}AFX_FIELD
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CBkClerkSet)
public:
virtual CString GetDefaultConnect();    // Default connection string
virtual CString GetDefaultSQL();    // Default SQL for Recordset
virtual void DoFieldExchange(CFieldExchange* pFX);  // RFX support
//}}AFX_VIRTUAL// Implementation
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};
/////////////////////////////////////////////////////////////////////////////
// CBkClerkSetIMPLEMENT_DYNAMIC(CBkClerkSet, CRecordset)CBkClerkSet::CBkClerkSet(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CBkClerkSet)
m_cEmpID = _T("");
m_cName = _T("");
m_cPwd = _T("");
m_cSex = _T("");
m_cTel = _T("");
m_cGrpID = _T("");
m_iPriv = 0;
m_cEnterBy = _T("");
m_nFields = 9;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString CBkClerkSet::GetDefaultConnect()
{
return _T("ODBC;DSN=spm");
}CString CBkClerkSet::GetDefaultSQL()
{
return _T("[dbo].[tEmployees]");
}void CBkClerkSet::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CBkClerkSet)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[cEmpID]"), m_cEmpID);
RFX_Text(pFX, _T("[cName]"), m_cName);
RFX_Text(pFX, _T("[cPwd]"), m_cPwd);
RFX_Text(pFX, _T("[cSex]"), m_cSex);
RFX_Text(pFX, _T("[cTel]"), m_cTel);
RFX_Text(pFX, _T("[cGrpID]"), m_cGrpID);
RFX_Long(pFX, _T("[iPriv]"), m_iPriv);
RFX_Text(pFX, _T("[cEnterBy]"), m_cEnterBy);
RFX_Date(pFX, _T("[dCreate]"), m_dCreate);
//}}AFX_FIELD_MAP
m_cEmpID.TrimRight();
m_cPwd.TrimRight();}/////////////////////////////////////////////////////////////////////////////
// CBkClerkSet diagnostics#ifdef _DEBUG
void CBkClerkSet::AssertValid() const
{
CRecordset::AssertValid();
}void CBkClerkSet::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG