在MFC列表控件中实现动态操作数据库

上传人:s9****2 文档编号:501516595 上传时间:2023-03-18 格式:DOC 页数:10 大小:31KB
返回 下载 相关 举报
在MFC列表控件中实现动态操作数据库_第1页
第1页 / 共10页
在MFC列表控件中实现动态操作数据库_第2页
第2页 / 共10页
在MFC列表控件中实现动态操作数据库_第3页
第3页 / 共10页
在MFC列表控件中实现动态操作数据库_第4页
第4页 / 共10页
在MFC列表控件中实现动态操作数据库_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《在MFC列表控件中实现动态操作数据库》由会员分享,可在线阅读,更多相关《在MFC列表控件中实现动态操作数据库(10页珍藏版)》请在金锄头文库上搜索。

1、在MFC列表控件中实现动态操作数据库?48?ComputerEraNo.82004在MFC列表控件中实现动态操作数据库曾国洪.周汝威(广州市水利科学研究所,广东广州510220)摘要:本文以ADO数据库编程技术为例,介绍了在VCH与.NET集成开发的环境中,使用由MFC的CListCtrl类创建的列表控件作为子窗口,在子窗口中实现动态切换操作数据库记录集的方法.关键词:MFC;列表控件;动态操作;数据库1列表控件类CListCtrl列表控件类CListCtrl是MFC类库中基本窗口类CWnd的子类,除了本身特有的列表控件特性外,还继承了来自父类CWnd的基本特性.在对话框编程时可以直接从工具箱

2、中的ListControl拖至对话框界面资源中,并可可视化地直接定制其属性,也可在父窗口类中编写代码创建之,还可增加一些代码以根据父窗口的状态确定其在父窗口中的位置和大小.2使用VC+快速开发数据库应用程序的问题使用Vc+编程的好处是自由度很大,能编写各种各样的程序,但有一个不好的方面是编写的代码量较大,在开发一般的数据库应用程序时,不如其他快速开发工具效率高,如VB,PB等.软件开发商提供了大量的可以绑定并操作数据库的ActiveX列表控件,在VB环境中使用起来非常方便,但在Vc+环境中则较为繁琐,添加控件后会生成控件的类和多个相关类及子类,增加了多个项目文件,并要求开发者有COM方面的基础

3、知识,对开发者的要求较高.而且ActiveX控件每次只能绑定并显示一组数据(界面的大小是有限的),需要对另一组记录集进行操作时必须增加窗口界面并重新绑定,因此对内存资源的开销较大.一般的数据库应用程序是实现数据表的记录查询,检索,修改,删除及增加,而列表是显示并操作数据库记录集的一种常用方法.因此,如果在某一大小,行列数可变的界面中实现对多个数据库记录集的非绑定操作,即实现动态操作数据库,一方面可以节省程序代码量和内存资源开销,另一方面使得一般的Vc+编程者更容易,更快捷地开发数据库应用程序.以下就介绍如何编写功能强大而灵活小巧,可在同一列表控件界面中动态切换操作不同数据库记录集的方法.3实现

4、的过程3.1定义有关变量首先在父窗口类的头文件中定义成员列表控件对象:publicCListCtrlmctlListCtrl;/列表控件对象3.2创建列表控件假设父窗口类是由CView类衍生出的普通视图类CMyView,子窗口rn_ctlListCtrl对象由程序代码创建(不需要时可删除).intCMyView:OnCreate(LPCREATESTRUCTIpCreateStruct)if(CView:OnCreate(IpCreateStruct)=一1)retum一1:CRectrect;rect.SetRectEmIpty0;if(mctlListCtr1.Create(WS_CHIL

5、DIWSBORDERIWSVSCROLLILVSREPORT,rect,this,IDC_KELILISTCTRL)=一1)/创建控件return一1:m_ctlListCtrl,SetExtendedStyle(mctlListBox,GetExStyle()ILVs_EXFULLROWSELECTILVSEXGRIDLINES);/设置控件扩展风格mctlListCtr1.ShowWindow(SWSHOW);/显示控件return0:)跟随父窗口的状态动态调整列表控件的大小和位置,以适应不同窗口和分辨率的显示需要.voidCMyView:OnSize(UlNTnType,intCX,in

6、tcy)(CView:OnSize(nType,CX,cy):if(CX>0&&cy0)m_ctlListCtr1.MoveWindow(0,0,CX,cy):/改变列表控件的位置和大小)3.3初始化列表控件中的数据项在CMyView类中添加初始化列表控件数据项的成员函数ShowRecords(CString&strQuery),并可在列表控件构造完毕后的任意时间调用之,即可完成列表控件的数据库中表集数据的显示.函数实参CString对象的引用strQuery是打开数据表的SQL语句,OpenRecordSetO是自定义的打开数据表函数,其返回值是指向数据表集的指

7、针.不需要知道数据库中表的字段名称,只要传递不同的SQL语句串作为参数给该函数,就可列表显示不同的数据库记录集.以下代码中一RecordsetPtr和FieldsPtr是ADO数据库编程接口中定义的记录集和数据表字段指针类型.voidCMyView:ShowRecords(CString&strQuery)(try(一RecordsetPtrpSet=OpenRecordSet(strQuery);/打开数据集variant_tvTemp;if(pSet一>GetadoEOF0)/如果数据集为空(if(pSet一>State)/如果数据集处于打开状态计算机时代2004年第8

8、期?49?pSet->Close();/关闭数据集return;inti=O:CStringstr;mctlListCtd.DeleteAIIItems0;/清除列表控件所有的项目while(mcUListCtr1.DeleteColumn(0);/删除所有的列bstrtbstrFieldName;FieldsPtrpField=pSet->GetFields0;/取得字段指针longIFieldsCount=pField->GetCount0;/取得数据表的字段个数intnColumnWidth;for(._O:i<eIdsC0unt+),遍历所有的字段名bstrFi

9、eidName=pField->Getltem(_variant_t(1ong)i)->Name;|取碍军段皂str=(LPSTR)(bstrFieldName);/转换为串类格式nColumnWidth=20str.GetLength0;,计算显示字段名的宽度/以下将字段名按数据表中的顺序加入至列表控制的表头栏中mctlListBox.InsertColumn(i,str,LVCFMTLEFT,nColumnWidth);)intj=0;/列表控件行数while(!pSet->GetadoEOF0)/遍历所有记录vTemp=pSet->GetCoilect(_vari

10、ant_t(Iong)0);/取得表集中的值if(vTemp.vtI_,厂LNULL)mctlListCtr1.Insertltem(j,(_bst)vTemp);/插入第j行的头列数据值for(i=1;i<IFieIdsC0unt:i+)vTemp=pSet->GetCoUect(_variant_t(Iong)if(vTemp.vtl_,厂LNULL)mcUListBox.Setltem(j,i,LVIF_TEXT,(_bstr_t)vTemp-1,O,0,O):/改变第J行中各列数据值j+:/列表控件下一行pSet->MoveNext0;/下一条记录if(pSet-&g

11、t;State)pSet->Close();/关闭表集catch(_com_errore)/捕捉异常CStringerrormessage;enormessage.Format(显示错误!rn错误信:%s,e.ErrorMessage0);AfxMessageBox(errormessage);/显示错误信息)3.4对记录集进行操作在显示数据的列表控件中,记录集的每条记录的位置与列表控件行数之间存在一一对应的关系,利用这种索引关系就可以在列表控件中实现对记录集的操作.3.4.1获取记录的位置当记录集在列表控件中显示后,可使用鼠标或键盘的ti键移动至目标记录(突出显示),然后对目标记录实施

12、操作.以下函数是通过取得列表控件当前位置首栏数据即关键字段值,然后利用取得的关键字来检索目标记录.CStringCMyView:SelectRecord0POSITIONP=mctlListCtr1.GetFirstSelectedItemPosition();intnltem=-1:CStringstr;while(p)nltem=mctlListCtr1.GetNextSelectedltem(p);str=mcUListCtrlGetltemText(nltem,o);/取得关键字if(nltem<0):MessageBox(NULL,尚未选择记录!,AppName,MB_ICON

13、INFORMATION);returnCString0;returnstr;3_4.2删除记录voidCMyView:OnDeleteRecord()CStringstrQuery;strQuery=SelectRecord():/取得记录关键字,见3.4.1_f(strQuery.IsEmpty0)return;CStringstrTable,strHeadTiUe;/表名,关键字段名,通过其他途径获取,此处省略获取过程.strQuery.Format(SELECTFROM%sWHERE%s=%s.strTable,strHeadTitle,strQMery):/格式SQL语句串一Recor

14、dsetPtrpSet=OpenRecordSet(strQuery);/打开记录if(!pSet->GetadoEOF0)pSet->Delete(adAffectCurrent);/删除记录if(pSet->State)pSet->Close();/关闭记录3_4.3其他操作理解了列表控件行与记录位置之间的对应关系,同样的道理可以对数据实施修改,增加等操作.在设定的修改或增加消息事件响应函数中加入相应的代码,为方便观察和操作,一般情况是将数据传至弹出的对话框界面中,修改或输入数据完毕后关闭对话框保存数据即可,也可直接在列表控件中修改或增加(必须使焦点项处于可编辑状态),在数据项焦点移动消息处理函数中加入保存修改数据的代码,其使用效果如操作MSAccess数据表样.?50?ComputerEraNo.82004Windows环境下Fortran程序的调用焦俊婷,于霖冲(1.嘉应学院土木工程系,广东梅州514015;2.北京航空航天大学土木工程系,北京10083)摘要:将Fortran程序移植到Windows平台上,利用VB可视化开发语言与Fortran语言混合编程是一种简单有效的方法.本文介绍了如何用VB调用Fortran语言程序的实现方法.关键词:VB语言;Fortran程序;混合编程;Windows环境下的调

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号