⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap10_7.htm

📁 非常好的应用vc++6.0进行相关网络程序开发的教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    <p ALIGN="center"></font><img src="T10_9.gif" alt="T10_9.tif (159244 bytes)" WIDTH="424" HEIGHT="349"><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">10.9 
    Add Member Variable</font><font SIZE="3">对话框</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">CSectionForm</font><font SIZE="3">类的定义内可以找到下面一行:</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CSectionSet* m_pSet;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">可见</font><font FACE="Times New Roman" SIZE="3">m_pSet</font><font SIZE="3">是</font><font FACE="Times New Roman" SIZE="3">CSectionForm</font><font SIZE="3">类的成员,它指向一个</font><font FACE="Times New Roman" SIZE="3">CSectionSet</font><font SIZE="3">对象。用</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">可以把控件与象记录集这样的“外部数据”连接起来,这是</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">在数据库编程方面的一个特殊应用。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">编译并运行</font><font FACE="Times New Roman" SIZE="3">Enroll</font><font SIZE="3">,读者会惊奇的发现</font><font FACE="Times New Roman" SIZE="3">Enroll</font><font SIZE="3">居然是一个相当不错的记录浏览器,并且用户可以对记录进行修改。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">现在,让我们来分析一下</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">为</font><font FACE="Times New Roman" SIZE="3">Enroll</font><font SIZE="3">干了哪些事情。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在文档类</font><font FACE="Times New Roman" SIZE="3">CEnrollDoc</font><font SIZE="3">的定义中,有如下一行:</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CSectionSet m_sectionSet;</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">可见</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">CEnrollDoc</font><font SIZE="3">类中嵌入了一个</font><font FACE="Times New Roman" SIZE="3">CSectionSet</font><font SIZE="3">对象。这相当于调用了构造函数</font><font FACE="Times New Roman" SIZE="3">CSectionSet(NULL)</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">CSectionSet</font><font SIZE="3">类的构造函数的声明如下:<br>
    </font><font FACE="Times New Roman" SIZE="3">CSectionSet(CDatabase* pDatabase = NULL);</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">函数的定义在清单</font><font FACE="Times New Roman" SIZE="3">10.5</font><font SIZE="3">中列出。可以看出,构造函数调用了基类的构造函数,并对域数据成员进行了初始化。通过</font><font FACE="Times New Roman" SIZE="3">10.5.4</font><font SIZE="3">我们知道,若传递</font><font FACE="Times New Roman" SIZE="3">NULL</font><font SIZE="3">参数给</font><font FACE="Times New Roman" SIZE="3">CRecordset</font><font SIZE="3">的构造函数,那么</font><font FACE="Times New Roman" SIZE="3">CRecordset::Open</font><font SIZE="3">函数将自动构建一个</font><font FACE="Times New Roman" SIZE="3">CDatabase</font><font SIZE="3">对象,并根据</font><font FACE="Times New Roman" SIZE="3">CRecordset:: GetDefaultConnect</font><font SIZE="3">返回的连接字符串建立与数据源的连接。</font><font FACE="Times New Roman" SIZE="3">CSectionSet</font><font SIZE="3">提供了虚拟函数</font><font FACE="Times New Roman" SIZE="3">GetDefaultConnect</font><font SIZE="3">的新版本,如清单</font><font FACE="Times New Roman" SIZE="3">10.6</font><font SIZE="3">所示,在该函数中提供了数据源</font><font FACE="Times New Roman" SIZE="3">Student Registration</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">10.5 CSectionSet</font><font SIZE="3">的构造函数</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CSectionSet::CSectionSet(CDatabase* pdb)</p>
    <p ALIGN="JUSTIFY">: CRecordset(pdb)</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">//{{AFX_FIELD_INIT(CSectionSet)</p>
    <p ALIGN="JUSTIFY">m_CourseID = _T(&quot;&quot;);</p>
    <p ALIGN="JUSTIFY">m_SectionNo = _T(&quot;&quot;);</p>
    <p ALIGN="JUSTIFY">m_InstructorID = _T(&quot;&quot;);</p>
    <p ALIGN="JUSTIFY">m_RoomNo = _T(&quot;&quot;);</p>
    <p ALIGN="JUSTIFY">m_Schedule = _T(&quot;&quot;);</p>
    <p ALIGN="JUSTIFY">m_Capacity = 0;</p>
    <p ALIGN="JUSTIFY">m_nFields = 6;</p>
    <p ALIGN="JUSTIFY">//}}AFX_FIELD_INIT</p>
    <p ALIGN="JUSTIFY">m_nDefaultType = snapshot;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">10.6 </font><font SIZE="3">派生类的</font><font FACE="Times New Roman" SIZE="3">GetDefaultConnect</font><font SIZE="3">函数</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CString CSectionSet::GetDefaultConnect()</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">return _T(&quot;ODBC;DSN=Student Registration&quot;);</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">至于记录集的建立,实际上是在</font><font FACE="Times New Roman" SIZE="3">CRecordView:: OnInitialUpdate</font><font SIZE="3">中完成的,这部分代码对用户是透明的,这里在清单</font><font FACE="Times New Roman" SIZE="3">10.7</font><font SIZE="3">中列出。在该函数中调用</font><font FACE="Times New Roman" SIZE="3">CRecordset::Open</font><font SIZE="3">来建立记录集。在函数的开头调用了</font><font FACE="Times New Roman" SIZE="3">OnGetRecordset</font><font SIZE="3">函数来获取与记录视图相连的记录集对象。</font><font FACE="Times New Roman" SIZE="3">CSectionForm</font><font SIZE="3">提供了虚拟函数</font><font FACE="Times New Roman" SIZE="3">OnGetRecordset</font><font SIZE="3">的新版本,如清单</font><font FACE="Times New Roman" SIZE="3">10.8</font><font SIZE="3">所示,该函数把</font><font FACE="Times New Roman" SIZE="3">m_pSet</font><font SIZE="3">提交给调用者。至于</font><font FACE="Times New Roman" SIZE="3">m_pSet</font><font SIZE="3">的初始化,则是在</font><font FACE="Times New Roman" SIZE="3">CSectionForm::OnInitialUpdate</font><font SIZE="3">函数中完成的,如清单</font><font FACE="Times New Roman" SIZE="3">10.9</font><font SIZE="3">所示。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">10.7 CRecordView:: 
    OnInitialUpdate</font><font SIZE="3">函数</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">void CRecordView::OnInitialUpdate()</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">CRecordset* pRecordset = OnGetRecordset();</p>
    <p ALIGN="JUSTIFY">// recordset must be allocated already</p>
    <p ALIGN="JUSTIFY">ASSERT(pRecordset != NULL);</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">if (!pRecordset-&gt;IsOpen())</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">CWaitCursor wait;</p>
    <p ALIGN="JUSTIFY">pRecordset-&gt;Open();</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CFormView::OnInitialUpdate();</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">10.8 </font><font SIZE="3">派生类的</font><font FACE="Times New Roman" SIZE="3">OnGetRecordset</font><font SIZE="3">函数</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CRecordset* CSectionForm::OnGetRecordset()</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">return m_pSet;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -