📄 chap10_7.htm
字号:
<html>
<head>
<title>10.7 学习Enroll例程</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body link="#3973DE" alink="#3973DE">
<font SIZE="5"><b><div align="center"><center>
<table border="0" width="615" cellspacing="0" cellpadding="0">
<tr>
</b><td><div align="center"><center><table border="0" width="615" cellpadding="0" cellspacing="0" height="20">
<tr>
<td width="377" bgcolor="#15397D" height="20"></td>
<td width="238" bgcolor="#000000" height="20"><p align="right"></font><span style="text-decoration: none"><a href="../../index.htm"><font color="#FFFFFF">电脑报Visual
C++网络教程</font></a></span></td>
</tr>
</table>
</center></div><b><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER"></font></b><font FACE="Times New Roman" size="4" color="#3973DE">10.7 </font><font size="4" color="#3973DE">学习</font><font FACE="Times New Roman" size="4" color="#3973DE">Enroll</font><font size="4" color="#3973DE">例程</font><font FACE="Times New Roman" size="4"></p>
<p ALIGN="JUSTIFY"></font><font FACE="Times New Roman" SIZE="3">Visual C++</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">MFC</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">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">MFC</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">AppWizard</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">AppWizard</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">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">Enroll</font><font SIZE="3">以前,请读者先从</font><font FACE="Times New Roman" SIZE="3">Visual C++ 5.0</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">samples \ mfc \ tutorial \ 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">Access</font><font SIZE="3">数据库</font><font FACE="Times New Roman" SIZE="3">STDRED32.MDB</font><font SIZE="3">,该文件在</font><font FACE="Times New Roman" SIZE="3">VC5.0</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">Stdreg</font><font SIZE="3">例程中(在</font><font FACE="Times New Roman" SIZE="3">samples \ mfc \ database \ stdreg</font><font SIZE="3">目录下),请读者将该例子也拷贝到硬盘上.</font><font FACE="Times New Roman" SIZE="3"></p>
<b><p ALIGN="JUSTIFY"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">10.7.1
</font><font SIZE="3" color="#3973DE">注册数据源</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">ODBC</font><font SIZE="3">应用程序不能直接使用数据库,用户必需为要使用的数据库注册数据源.注册数据源的工作由</font><font FACE="Times New Roman" SIZE="3">ODBC</font><font SIZE="3">管理器完成,该管理器位于</font><font FACE="Times New Roman" SIZE="3">Windows 95</font><font SIZE="3">控制面板的</font><font FACE="Times New Roman" SIZE="3">32</font><font SIZE="3">位</font><font FACE="Times New Roman" SIZE="3">ODBC</font><font SIZE="3">内.现在让我们为</font><font FACE="Times New Roman" SIZE="3">Access</font><font SIZE="3">数据库</font><font FACE="Times New Roman" SIZE="3">STDREG32.MDB</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">32</font><font SIZE="3">位</font><font FACE="Times New Roman" SIZE="3">ODBC</font><font SIZE="3">”图标,则会显示一个“</font><font FACE="Times New Roman" SIZE="3">ODBC</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">DSN</font><font SIZE="3">”页,用户</font><font FACE="Times New Roman" SIZE="3">DSN</font><font SIZE="3">只对用户可见而且只能用户当前机器。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="center"></font><font SIZE="3"><img src="T10_5.gif" alt="T10_5.tif (174104 bytes)" WIDTH="460" HEIGHT="355"></font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="center"></font><font size="2">图<font FACE="Times New Roman">10.5 ODBC</font>数据源管理器<font FACE="Times New Roman"></p>
</font></font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><font SIZE="3">点击“添加”按钮,则会弹出一个“创建新数据源”对话框。在该对话框中选择</font><font FACE="Times New Roman" SIZE="3">Microsoft Access Driver(*.mdb)</font><font SIZE="3">,然后按完成按钮。接下来会显示一个</font><font FACE="Times New Roman" SIZE="3">ODBC Microsoft Access 97 Setup</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">Data Source Name:</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">Select...</font><font SIZE="3">按钮,在随后弹出的对话框中找到并选择</font><font FACE="Times New Roman" SIZE="3">STDREG32.MDB</font><font SIZE="3">。连按两个</font><font FACE="Times New Roman" SIZE="3">OK</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="center"></font><font SIZE="3"><img src="T10_6.gif" alt="T10_6.tif (156780 bytes)" WIDTH="471" HEIGHT="312"></font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">10.6
ODBC Microsoft Access 97 Setup</font><font SIZE="3">对话框</font><font FACE="Times New Roman" SIZE="3"></p>
</font><font SIZE="3"><b><div align="center"><center><table border="2" cellpadding="2" cellspacing="0" width="100%" bgcolor="#80D6FF">
<tr>
<td width="100%"></b>提示:如果要为</font><font FACE="Times New Roman" SIZE="3">dBase</font><font SIZE="3">或</font><font FACE="Times New Roman" SIZE="3">FoxPro</font><font SIZE="3">数据库注册数据源,则应该选择一个目录而不是文件作为数据源。这是因为在</font><font FACE="Times New Roman" SIZE="3">Access</font><font SIZE="3">中,一个</font><font FACE="Times New Roman" SIZE="3">MDB</font><font SIZE="3">文件可以包含多张表,因此可以认为一个</font><font FACE="Times New Roman" SIZE="3">MDB</font><font SIZE="3">文件就是一个数据库。而在</font><font FACE="Times New Roman" SIZE="3">dBase</font><font SIZE="3">或</font><font FACE="Times New Roman" SIZE="3">FoxPro</font><font SIZE="3">中,一个</font><font FACE="Times New Roman" SIZE="3">DBF</font><font SIZE="3">文件只能对应一张表,一个数据库可能会包含好几个</font><font FACE="Times New Roman" SIZE="3">DBF</font><font SIZE="3">文件,所以可以认为某一个包含了若干</font><font FACE="Times New Roman" SIZE="3">DBF</font><font SIZE="3">文件的目录是一个数据库。<b></b></font></td>
</tr>
</table>
</center></div><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">10.7.2 Enroll</font><font SIZE="3" color="#3973DE">的第一个版本</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">Enroll</font><font SIZE="3">第一个版本如图</font><font FACE="Times New Roman" SIZE="3">10.3</font><font SIZE="3">所示,该程序具有浏览记录集和修改记录这两个基本功能。在修改了表单中的记录后,移动到一个新的记录上就可以保存对原记录的修改。注意在表单中</font><font FACE="Times New Roman" SIZE="3">Course</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">Section</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">STDREG32.MDB</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">Section</font><font SIZE="3">表,该表是一张课程表,其内容如表</font><font FACE="Times New Roman" SIZE="3">10.2</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">AppWizard</font><font SIZE="3">来完成</font><font FACE="Times New Roman" SIZE="3">Enroll</font><font SIZE="3">程序框架的建立,请读者按下面几步进行:</p>
<blockquote>
<p ALIGN="JUSTIFY">启动<font FACE="Times New Roman" SIZE="3">AppWizard</font>,指定一个名为<font FACE="Times New Roman" SIZE="3">Enroll</font>的<font FACE="Times New Roman" SIZE="3">MFC</font>工程。</p>
<p ALIGN="JUSTIFY">在<font FACE="Times New Roman" SIZE="3">MFC AppWizard</font>的第一步选择<font FACE="Times New Roman" SIZE="3">Single document</font>。</p>
<p ALIGN="JUSTIFY">在<font FACE="Times New Roman" SIZE="3">MFC AppWizard</font>的第二步选择<font FACE="Times New Roman" SIZE="3">Database view without file support</font>,然后点击<font FACE="Times New Roman" SIZE="3">Data Source...</font>按钮,在<font FACE="Times New Roman" SIZE="3">Database Options</font>对话框中的<font FACE="Times New Roman" SIZE="3">ODBC</font>组合框中选择<font FACE="Times New Roman" SIZE="3">Student Registration</font>数据源,如图<font FACE="Times New Roman" SIZE="3">10.7</font>所示。然后按“<font FACE="Times New Roman" SIZE="3">OK</font>”按钮,则会打开一个<font FACE="Times New Roman" SIZE="3">Select Database Table</font>对话框,如图<font FACE="Times New Roman" SIZE="3">10.8</font>所示。在该对话框中选择<font FACE="Times New Roman" SIZE="3">Section</font>表。按<font FACE="Times New Roman" SIZE="3">OK</font>按钮退出。</p>
<p ALIGN="JUSTIFY">在<font FACE="Times New Roman" SIZE="3">MFC AppWizard</font>的第六步中,将类<font FACE="Times New Roman" SIZE="3">CEnrollSet</font>改名为<font FACE="Times New Roman" SIZE="3">CSectionSet</font>,将类<font FACE="Times New Roman" SIZE="3">CEnrollView</font>改名为<font FACE="Times New Roman" SIZE="3">CSectionForm</font>。</p>
<p ALIGN="JUSTIFY">按<font FACE="Times New Roman" SIZE="3">Finish</font>按钮,建立<font FACE="Times New Roman" SIZE="3">Enroll</font>工程。</p>
</font><font FACE="Times New Roman" SIZE="3">
</blockquote>
<p ALIGN="center"></font><img src="T10_7.gif" alt="T10_7.tif (155892 bytes)" WIDTH="470" HEIGHT="248"><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">10.7
Database Options</font><font SIZE="3">对话框</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="center"></font><font SIZE="3"><img src="T10_8.gif" alt="T10_8.tif (135432 bytes)" WIDTH="452" HEIGHT="279"></font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">10.8
Select Database Table</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">CSectionSet</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">CRecordset</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">CRecordView</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">CSectionSet</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">ID</font><font SIZE="3">为</font><font FACE="Times New Roman" SIZE="3">IDD_ENROLL_FORM</font><font SIZE="3">的对话框模板,该模板将被记录视图用来显示表单。清除该模板中的所有控件,并把模板的尺寸扩大到</font><font FACE="Times New Roman" SIZE="3">183</font><font SIZE="3">×</font><font FACE="Times New Roman" SIZE="3">110</font><font SIZE="3">,然后按图</font><font FACE="Times New Roman" SIZE="3">10.3</font><font SIZE="3">的式样放置控件。这里可以采取一个偷懒的方法:打开</font><font FACE="Times New Roman" SIZE="3">VC5.0</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.rc)</font><font SIZE="3">,找到并打开</font><font FACE="Times New Roman" SIZE="3">IDD_ENROLL_FORM</font><font SIZE="3">对话框模板,按住</font><font FACE="Times New Roman" SIZE="3">Ctrl</font><font SIZE="3">键并用鼠标选择模板中的所有控件,然后按</font><font FACE="Times New Roman" SIZE="3">Ctrl+Insert</font><font SIZE="3">键拷贝所选的控件。切换到自己的</font><font FACE="Times New Roman" SIZE="3">IDD_ENROLL_FORM</font><font SIZE="3">对话框模板,然后按</font><font FACE="Times New Roman" SIZE="3">Shift+Insert</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">ClassWizard</font><font SIZE="3">把表单中的控件与记录集的域数据成员连接起来,以实现控件与当前记录的</font><font FACE="Times New Roman" SIZE="3">DDX</font><font SIZE="3">数据交换。请读者按如下步骤操作:</p>
<blockquote>
<p ALIGN="JUSTIFY">进入<font FACE="Times New Roman" SIZE="3">ClassWizard</font>,选择<font FACE="Times New Roman" SIZE="3">Member Variables</font>页并且选择<font FACE="Times New Roman" SIZE="3">CSectionForm</font>类。</p>
<p ALIGN="JUSTIFY">在变量列表中双击<font FACE="Times New Roman" SIZE="3">IDC_CAPACITY</font>项,则会显示<font FACE="Times New Roman" SIZE="3">Add Member Variable</font>对话框。注意该对话框的<font FACE="Times New Roman" SIZE="3">Member variable name</font>栏显示的是一个组合框,而不是平常看到的编辑框。如图<font FACE="Times New Roman" SIZE="3">10.9</font>所示,在组合框的列表中选择<font FACE="Times New Roman" SIZE="3">m_pSet->m_Capacity</font>。按<font FACE="Times New Roman" SIZE="3">OK</font>按钮确认。</p>
<p ALIGN="JUSTIFY">仿照第<font FACE="Times New Roman" SIZE="3">2</font>步,为其他控件连接记录集的域数据成员。根据控件的<font FACE="Times New Roman" SIZE="3">ID</font>,不难确定对应的域数据成员。</p>
</font><font FACE="Times New Roman" SIZE="3">
</blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -