用VC++设计基于ODBC的数据库管理系统
CRecordView本身提供了对下面四个命令的支持:
CRecordView提供了OnMove()成员函数处理ID_RECORD_FIRST(滚动到记录集的第一个记录)、ID_RECORD_LAST(滚动到记录集的最后一个记录)、ID_RECORD_NEXT(前进一个记录)、ID_RECORD_PREV(后退一个记录)这四个命令消息,OnMove函数()对用户是透明的OnMove()函数的源代码如下:
BOOL CRecordView::OnMove(UINT nIDMoveCommand) { CRecordset* pSet = OnGetRecordset(); if (pSet->CanUpdate()) { pSet->Edit(); if (!UpdateData()) return TRUE; pSet->Update(); } switch (nIDMoveCommand) { case ID_RECORD_PREV: pSet->MovePrev(); if (!pSet->IsBOF()) break; case ID_RECORD_FIRST: pSet->MoveFirst(); break; case ID_RECORD_NEXT: pSet->MoveNext(); if (!pSet->IsEOF()) break; if (!pSet->CanScroll()) { // clear out screen since we're sitting on EOF pSet->SetFieldNull(NULL); break; } case ID_RECORD_LAST: pSet->MoveLast(); break; default: // Unexpected case value ASSERT(FALSE); } // Show results of move operation UpdateData(FALSE); return TRUE; } |
在函数的开头先调用CRecordset::Edit()进入编辑模式,接着调用UpdateData()将控件中的数据更新到记录集对象的域数据成员中,然后调用CRecordset::Update()将域数据成员的值写入数据源,这说明OnMove()函数在滚动记录的同时会完成对原来记录的修改。
在函数的中间有一个分支语句用来处理四个不同的命令,在这个分支语句中调用了CRecordset的各种用于滚动记录的成员函数,这些函数在滚动到一个新的记录时会把该记录的内容设置到域数据成员中。在函数的末尾调用UpdateData(FALSE)把新的当前记录的内容设置到表单的控件中。由此可见,OnMove()函数一来一回完成了两次表单控件和数据源的数据交换过程,通过分析该函数,读者可以学会在浏览记录时如何控制DDX和DFX数据交换。
二、编程步骤
1、启动Visual C++6.0,生成一个单文档视图结构的应用程序,将该程序命名为"Enroll"。在MFC AppWizard的第一步选择Single document,在MFC AppWizard的第二步选择Database view without file support,然后点击Data Source...按钮,在Database Options对话框中的ODBC组合框中选择Student Registration数据源,则会打开一个Select Database Table对话框,在该对话框中选择数据库中的Section表按OK按钮退出,在MFC AppWizard的第六步中,将类CEnrollSet改名为CSectionSet,将类CEnrollView改名为CSectionForm;
2、接下来的任务设计应用程序的界面(具体设置请参见原代码部分),并用ClassWizard把表单中的控件与记录集的域数据成员连接起来,以实现控件与当前记录的DDX数据交换。请读者按如下步骤操作:进入ClassWizard,选择Member Variables页并且选择CSectionForm类。在变量列表中双击IDC_CAPACITY项,则会显示Add Member Variable对话框。注意该对话框的Member variable name栏显示的是一个组合框,而不是平常看到的编辑框。在组合框的列表中选择m_pSet->m_Capacity并按OK按钮确认。其它控件依此类推。
3、对于组合框控件IDC_COURSELIST项,除在Add Member Variable对话框的组合框中选择m_pSet->m_CourseID外,还要再次双击IDC_COURSELIST,并为CSectionForm类加入一个名为m_ctlCourseList的CComboBox类成员。
4、使用Class Wizard为IDC_COURSELIST组合框加入CBN_SELENDOK通知消息处理函数,函数名为OnSelendokCourselist。该函数负责响应用户在组合框中选择的变化。
天极yesky