254上位机VC MFC使用ODBC连接两数据库记录集
254上位机VC MFC使用ODBC连接两数据库记录集
功能展示
数据源内一般都有众多的表格,我们可以使用关键字把多张表联系到一起做成一个关系数据库,当前例程实现在一个视图中使用两个相关联的记录集以及记录的过虑及排序技术,效果如图;
要点提示
1.有一代码m_pSet->m_strFilter = “CourseID =?”;为什么记录集的m_strFilter过虑字符串中会有一个问号?这是因为我们例程中使用了参数化记录集的方法,在记录集的m_strFilter和m_strSort中可以使用问题作为参数使用,这样在使用过虑器的排序时可以更加灵活。在使用Requery或OPEN函数时问号“?”就会被我们例程中的m_pSet->m_CourseIDParam变量替代;
2.Crecordset有两个数据成员m_nFields,m_nParams分别用来统计域数据成员和参数数据成员的数目,前者由class wizard自动计数,后者由我们用户来维护,在我们例程中被设置为1因为只有一个参数数据成员; 实现功能 1.在新建工程前建立数据源,数据库文件在例程根目录,建立的过程已在前面例程视频演示,这里不重复; 2.新建基于单文档的派生于数据库视窗类的工程,数据源选择事先注册好的数据源完成工程的建立; 3.按照例程界面布局添加五个编辑框及一组合框,控件ID保持默认不变也可参照例程修改,依次给这些控件关联记录集的域数据成员,具体可参考源码或参看稍后的视频演示; 4.新建一个派生于CRecordset 的类CCourseSet,数据源及数据表设置选择后建立成功; 5.在默认的记录集类 CXXXSet 中添加变量CString m_CourseIDParam;并在其构造函数中初始化 m_CourseIDParam=“”;m_nParams=1;// number of RFX params;在其DoFieldExchange()函数中添加代码 pFX->SetFieldType(CFieldExchange::param); RFX_Text(pFX,"CourseIDParam", m_CourseIDParam);
6.在VIEW视窗类OnInitialUpdate()函数中初始化填充组合框内容 - void CGkbc8View::OnInitialUpdate()
- {
- GetDocument()->m_CourseSet.m_strSort = "CourseID";
- if (!GetDocument()->m_CourseSet.Open())
- return;
- m_pSet = &GetDocument()->m_gkbc8Set;
- m_pSet->m_strFilter = "CourseID = ?";
复制代码- m_pSet->m_CourseIDParam = GetDocument()->m_CourseSet.m_CourseID;
- m_pSet->m_strSort = "SectionNo";
- m_pSet->m_pDatabase = GetDocument()->m_CourseSet.m_pDatabase;
- CRecordView::OnInitialUpdate();
- //<> Fill the combo box with all of the courses
- m_CourseList.ResetContent();
- if (GetDocument()->m_CourseSet.IsOpen())
- {
- while (!GetDocument()->m_CourseSet.IsEOF())
- {
- m_CourseList.AddString(GetDocument()->m_CourseSet.m_CourseID);
- GetDocument()->m_CourseSet.MoveNext();
- }
- }
- m_CourseList.SetCurSel(0);
- //<>重新布局界面
- GetParentFrame()->RecalcLayout();
- ResizeParentToFit();
- }
复制代码7.添加组合框CBN_SELENDOK消息,另外记得文档头文件的添加 - void CGkbc8View::OnSelendokCourselist()
- {
- if (!m_pSet->IsOpen())
- return;
- m_CourseList.GetLBText(m_CourseList.GetCurSel(), m_pSet->m_CourseIDParam);
- m_pSet->Requery();
- if (m_pSet->IsEOF())
- {
- m_pSet->SetFieldNull(&(m_pSet->m_CourseID), FALSE);
- m_pSet->m_CourseID = m_pSet->m_CourseIDParam;
- }
- UpdateData(FALSE);
- }
复制代码我们来演示下功能实现的整个过程
|