MFC ADO数据库_第1页
MFC ADO数据库_第2页
MFC ADO数据库_第3页
MFC ADO数据库_第4页
MFC ADO数据库_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 任务5 数据库编程 一、综合课程实习目的 1掌握模式Visual C+对于数据库的操作。 2掌握常用控件的使用方法。 3熟悉数据库操作语句(insert/delete/select)。 熟悉操作数据库的对象。4二、综合课程实习内容 创建一个MFC应用程序TeacherMIS,进行教师数据的显示。 三、综合课程实习指导 1. 新建对话框工程,命名为TeacherMIS,删除TeacherMIS对话框中除了“确定”按钮的所有控件,对话框的字体为:宋体9号 2. 导入ADO:在stdafx.h文件中添加:#import c:program filescommon filessystemadomsa

2、do15.dll no_namespace rename(EOF,adoEOF) 3. 在工程项目类CTeacherMISApp中添加连接和记录集变量: _RecordsetPtr m_pRec; _ConnectionPtr m_pConn; 4. 在CTeacherMISApp类的InitInstance函数中添加如下代码: :CoInitialize(NULL); try m_pConn.CreateInstance(_uuidof(Connection);/创建连接对象 m_pConn-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=

3、db1.mdb,adModeUnknown);/连接数据库 catch(_com_error e) !); 数据库连接失败晁?獥慳敧潂? return false; m_pRec.CreateInstance(_uuidof(Recordset); 5. 在CTeacherMISApp类中添加虚函数ExitInstance() 然后编辑代码 int CTeacherMISApp:ExitInstance() / TODO: Add your specialized code here and/or call the base class if(m_pConn-State) m_pConn-Cl

4、ose(); m_pConnection= NULL; return CWinApp:ExitInstance(); 6. 在CTeacherMISApp类的头文件中添加一个工程类对象: extern CTeacherMISApp theApp; 7. 在CTeacherMISDlg:OnOK()函数中要释放连接对象和记录集对象 void CTeacherMISDlg:OnOK() / TODO: Add extra validation here if(theApp.m_pConn-State) theApp.m_pRec-Close(); theApp.m_pRec.Release();

5、if(theApp.m_pConn-State) theApp.m_pConn-Close(); theApp.m_pConn.Release(); :CoUninitialize(); CDialog:OnOK(); 号9 8.添加一个“登陆”对话框:宋体对该对话框建立类向导,并在AppWizzard中添加两个编辑框和“登陆”“取消”按钮消息 ()消息:OnPain,()OnInitDialog以及 在OnPaint()函数中添加如下代码: void CLoginDlg:OnPaint() CFont NewFont; NewFont.CreateFont(30,0,0,0,700,TRUE

6、,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY?啁呌偟呉?彆坓卉?楷体); dc.SetBkMode(TRANSPARENT); CFont *pOldFont=dc.SelectObject(&NewFont); dc.SetTextColor(RGB(0,0,255); 捤吮硥佴瑵?尬教职工信息管理系统); dc.SelectObject(pOldFont); 在“登陆”按钮消息中添加如下代码: void CLoginDlg:OnOK() / TODO: Add extra valid

7、ation here UpdateData(true); _variant_t v_strQuery,v_strCount; v_strQuery=select count(*) from LoginUser where User_Name=+m_strUserName+ and User_Psw=+m_strUserPsw+; /select count(*) as CountUser from LoginUser where User_Name=+m_strUserName+ and User_Psw=+m_strUserPsw+; theApp.m_pRec-CursorType=adO

8、penStatic; theApp.m_pRec-CursorLocation=adUseClient; theApp.m_pRec-Open(v_strQuery,theApp.m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); v_strQuery=theApp.m_pRec-GetCollect(Expr1000); CString strCount=(char*)_bstr_t(v_strQuery); if(strCount!=) 敍獳条?硯尨用户名或密码错误尡尬登陆失败); theApp.m_pR

9、ec-Close(); theApp.m_pRec=NULL; return; CDialog:OnOK(); 在CTeacherMISApp的头文件中加入:椣据畬敤尠潌楧?杬栮,然后在InitInstance9. 函数中加入代码CLoginDlg类的对象并显示: 10. CLoginDlg dlglogin; 11. int ret = dlglogin.DoModal(); 12. if(ret=IDCANCEL) 13. return FALSE; 14. 建立教职工基本信息对话框:(宋体9号) 15. 对话框的ID为:IDD_DIALOG_BASEINFO;标题为:教职工基本信息 添加

10、控件: 控 件 ID 号 Caption或Data 连接变量 列表控件 IDC_LIST1 m_BaseInfoList(CListCtrl) 分组框IDC_STATIC 查询条件 静态文本 IDC_STATIC 按照 组合框IDC_COMBO_SEARCHKEY Data属性:职工号,姓名,部门,职称,学历 m_strSearchKey) (CString编辑框 IDC_EDIT_KEYVALUE m_strKeyValue (CString)命令按钮 IDC_BUTTON_SEARCH 查询 命令按钮 IDC_BUTTON_ADD 添加 命令按钮 IDC_BUTTON_MODIFY 修改

11、命令按钮 IDC_BUTTON_DEL 删除 然后对该对话框建立一个新类CBaseInfoDlg,其基类为CPropertyPage,继承方式为Public,然后添加连接变量(上表)和消息函数 Object IDs 消息Message 消息处理函数 IDC_BUTTON_SEARCH按钮BN_CLICKED OnButtonSearch() IDC_BUTTON_ADD 按钮BN_CLICKED OnButtonAdd() IDC_BUTTON_MODIFY按钮BN_CLICKED OnButtonModify() 按钮IDC_BUTTON_DELBN_CLICKED OnButtonDel(

12、) 对话框CbaseInfoDlgWM_INITDIALOG OnInitDialog() 16. 将该CPropertyPage加入到建立工程时默认对话框CTeacherMISDlg中,在CTeacherMISDlg类中添加变量: CBaseInfoDlg m_BaseInfoPage; CPropertySheet m_Sheet; 然后在CTeacherMISDlg的OnInitDialog()函数中添加如下代码: BOOL CTeacherMISDlg:OnInitDialog() m_Sheet.AddPage(&m_BaseInfoPage); m_Sheet.Create(thi

13、s,WS_CHILD|WS_VISIBLE,0); m_Sheet.ModifyStyleEx(0,WS_EX_CONTROLPARENT); m_Sheet.ModifyStyle(0,WS_TABSTOP); m_Sheet.SetWindowsPos(NULL,0,0,0,0,SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE); return TRUE; / return TRUE unless you set the focus to a control 17. 初始化对话框: BOOL CBaseInfoDlg:OnInitDialog() CProper

14、tyPage:OnInitDialog(); / TODO: Add extra initialization here m_BaseInfoList.ModifyStyle(0,LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS); m_BaseInfoList.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_HEADERDRAGDROP); m_BaseInfoList.SetTextColor(RGB(200,200,0); m_B

15、aseInfoList.SetBkColor(RGB(240,247,233); 彭慂敳湉潦楌瑳?獮牥?汯浵?职工编号); 彭慂敳湉潦楌瑳?獮牥?汯浵?职工姓名); 彭慂敳湉潦楌瑳?獮牥?汯浵?所在部门); 彭慂敳湉潦楌瑳?獮牥?汯浵?职工性别); 彭慂敳湉潦楌瑳?獮牥?汯浵?出生日期); 彭慂敳湉潦楌瑳?獮牥?汯浵?职称); 彭慂敳湉潦楌瑳?獮牥?汯浵?学历); ); 取得学历时间彭慂敳湉潦楌瑳?獮牥?汯浵? 彭慂敳湉潦楌瑳?獮牥?汯浵?毕业学校); 彭慂敳湉潦楌瑳?獮牥?汯浵?开始工作时间); 彭慂敳湉潦楌瑳?獮牥?汯浵?尬党员); RECT rectList; m_BaseInfoLis

16、t.GetWindowRect(&rectList); int width=(rectList.right-rectList.left)/11; for(int i=0;iState) theApp.m_pRec-Close(); theApp.m_pRec-Open(v_strSQL,theApp.m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); if(!theApp.m_pRec-BOF) theApp.m_pRec-MoveFirst(); while(!theApp.m_pRec-adoEOF) C

17、String strvalue; v_theValue=theApp.m_pRec-GetCollect(ID); strvalue=(char*)_bstr_t(v_theValue); /MessageBox(strvalue); m_BaseInfoList.InsertItem(i,strvalue); v_theValue=theApp.m_pRec-GetCollect(Name); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,1,strvalue); v_theValue=theApp.m_p

18、Rec-GetCollect(Depart); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,2,strvalue); v_theValue=theApp.m_pRec-GetCollect(Sex); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,3,strvalue); v_theValue=theApp.m_pRec-GetCollect(Birthday); strvalue=(char*)_bstr_t(v_the

19、Value); m_BaseInfoList.SetItemText(i,4,strvalue); v_theValue=theApp.m_pRec-GetCollect(Job); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,5,strvalue); v_theValue=theApp.m_pRec-GetCollect(Degree); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,6,strvalue); v_the

20、Value=theApp.m_pRec-GetCollect(GraduteDate); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,7,strvalue); v_theValue=theApp.m_pRec-GetCollect(School); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,8,strvalue); v_theValue=theApp.m_pRec-GetCollect(WorkDate); strva

21、lue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,9,strvalue); v_theValue=theApp.m_pRec-GetCollect(IsParty); strvalue=(char*)_bstr_t(v_theValue); m_BaseInfoList.SetItemText(i,10,strvalue); theApp.m_pRec-MoveNext(); catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); 19. 添加一个“添加教师基本信息对话框”

22、:IDD_DIALOG_BASEINFOADD,Caption属性 。CBaseInfoAddDlg为:添加教师基本信息;并建立类为: 同时建立该类控件的属性和连接变量 控件名称及需修改属性 (其余默认)ID号 职工号编辑框 IDC_EDIT_ID CString 姓名编辑框 IDC_EDIT_NAME CString 部门组合框IDC_COMBO_DEPART CString 单选按钮男;属性:Tab、Group IDC_RADIO_NAN int 单选按钮女;属性:Tab IDC_RADIO_NV 出生日期组合框年:Data:从1960至2000 IDC_COMBO_BIRTHYEAR C

23、String 出生日期组合框月:Data:112 IDC_COMBO_BIRTHMONTH CString 出生日期组合框日:Data:131 IDC_COMBO_BIRTHDAY CString 职称组合框:Data:助教,讲师,副教授,教授 IDC_COMBO_JOB CString 学历组合框:Data:中专,大专,本科,硕士,博士 IDC_COMBO_DEGREE CString 取得学历时间组合框年:2000 至Data:从1960IDC_COMBO_GRADUATEYEAR CString 取得学历时间组合框月:12 1Data:IDC_COMBO_GRADUATEMONTH CS

24、tring 取得学历时间组合框日:31 :1DataIDC_COMBO_GRADUATEDAY CString 毕业学校编辑框IDC_EDIT_SCHOOL CString 开始工作时间组合框年:2000 至1960:从DataIDC_COMBO_WORKYEAR CString 连接变m_strIDm_strNamem_strDepartm_nSexm_strBirthYearm_strBirthMonthm_strBirthDaym_strJobm_strDegreem_strGraduateDaym_strGraduatMonthm_strGraduatYearm_strSchoolm_

25、strWorkYear 开始工作时间组合框月:12 Data:1IDC_COMBO_WORKMONTH CString 开始工作时间组合框日:31 Data:1IDC_COMBO_WORKDAY CString 党员复选框 IDC_CHECK_PARTY BOOL m_strWorkMonthm_strWorkDaym_bParty 在该类中添加一个自定义的标识变量:int m_nDlgType, 然后针对“教职工基本信息管理(CPropertyPage)”对话框中的“添加”按钮编写代码: #include BaseInfoAddDlg.h void CBaseInfoDlg:OnButton

26、Add() / TODO: Add your control notification handler code here CBaseInfoAddDlg BaseDlg; BaseDlg.m_nDlgType=0; if(IDOK!=BaseDlg.DoModal() return; RefreshList(); 敍獳条?硯尨添加成功!); 针对“添加教师基本信息对话框(CBaseInfoAddDlg)”增加 “确定”按钮的代码: void CBaseInfoAddDlg:OnOK() / TODO: Add extra validation here UpdateData(true); i

27、f(m_strID.IsEmpty() 敍獳条?硯尨职工号不能为空!); return; if(m_strName.IsEmpty() 敍獳条?硯尨姓名不能为空!); return; if(theApp.m_pRec-State) theApp.m_pRec-Close(); _variant_t v_sqlID; v_sqlID=select * from BaseInfo where ID=+m_strID+; theApp.m_pRec-CursorType = adOpenStatic; theApp.m_pRec-CursorLocation = adUseClient; theAp

28、p.m_pRec-Open(v_sqlID,theApp.m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); if(0=m_nDlgType) if(theApp.m_pRec-GetRecordCount()!=0) theApp.m_pRec-Close(); 敍獳条?硯尨同一职工已经存在!); return; else theApp.m_pRec-Close(); CString sex,birth,graduate,work,party; if(m_nSex) 敳?女; else 敳?男; birth

29、=m_strBirthYear+-+m_strBirthMonth+-+m_strBirthDay; graduate=m_strGraduateYear+-+m_strGraduateMonth+-+m_strGraduateDay; work=m_strWorkYear+-+m_strWorkMonth+-+m_strWorkDay; if(m_bParty) 慰瑲?是; else 慰瑲?否; _variant_t v_insBaseInfo; CString str=insert into BaseInfo(ID,Name,Depart,Sex,Birthday,Job,Degree,G

30、raduateDate,School,WorkDate,IsParty) values(+m_strID+,+m_strName+,+m_strDepart+,+sex+,+birth+,+m_strJob+,+m_strDegree+,+graduate+,+m_strSchool+,+work+,+party+); v_insBaseInfo=str; if(theApp.m_pRec-Open(v_insBaseInfo,theApp.m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText) 敍獳条?硯尨添加记

31、录成功!); m_strID=m_strName=m_strDepart=; UpdateData(false); else _variant_t v_strModifyRecord; CString strsex,strbirth,strgraduate,strwork,strparty; if(m_nSex) 瑳獲硥尽女; else 瑳獲硥尽男; strbirth=m_strBirthYear+-+m_strBirthMonth+-+m_strBirthDay; strgraduate=m_strGraduateYear+-+m_strGraduateMonth+-+m_strGradua

32、teDay; strwork=m_strWorkYear+-+m_strWorkMonth+-+m_strWorkDay; if(m_bParty) 瑳灲牡祴尽是; else 瑳灲牡祴尽否; _variant_t v_ModifyRecord; v_ModifyRecord=Update BaseInfo set Name=+m_strName+,Depart=+m_strDepart+,Sex=+strsex+, Birthday=+strbirth+,Job=+m_strJob+,Degree=+m_strDegree+,GraduateDate=+strgraduate+,WorkDat

33、e=+strwork+,IsParty=+strparty+ where ID like +m_strID+; if(theApp.m_pRec-State) theApp.m_pRec-Close(); if(theApp.m_pRec-Open(v_ModifyRecord,theApp.m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText) 敍獳条?硯尨修改记录成功!); CDialog:OnOK(); 20. “教职工基本信息管理(CPropertyPage)”对话框中的“修改”按钮,添加一个int类型 的

34、m_nDlgType变量,并添加一个CBaseInfoAddDlg:OnInitDialog() 成员函数,再在该函数中添加如下代码: BOOL CBaseInfoAddDlg:OnInitDialog( () CDialog:OnInitDialog(); / TODO: Add extra initialization here if(m_nDlgType=0) 敓坴湩潤呷硥?添加教师基本信息); GotoDlgCtrl(GetDlgItem(IDC_EDIT_ID); else if(m_nDlgType=1) 敓坴湩潤呷硥?修改教师基本信息); GetDlgItem(IDC_EDIT_

35、ID)-EnableWindow(false); GotoDlgCtrl(GetDlgItem(IDC_EDIT_NAME); return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE 21. “教职工基本信息管理(CPropertyPage)”对话框中的“修改”按钮的代码: void CBaseInfoDlg:OnButtonModify() / TODO: Add your control notification

36、handler code here int i=m_BaseInfoList.GetSelectionMark(); if(-1=i) 敍獳条?硯尨请选中一条记录!); return; CBaseInfoAddDlg BaseDlg; BaseDlg.m_nDlgType=1; BaseDlg.m_strID=m_BaseInfoList.GetItemText(i,0);/MessageBox(BaseDlg.m_strID); BaseDlg.m_strName=m_BaseInfoList.GetItemText(i,1); BaseDlg.m_strDepart=m_BaseInfoL

37、ist.GetItemText(i,2); 晩洨?獡?普?獩?敇?整呭硥?男) BaseDlg.m_nSex=1; else BaseDlg.m_nSex=0; CString strBirth=m_BaseInfoList.GetItemText(i,4); BaseDlg.m_strBirthYear=strBirth.Left(4); BaseDlg.m_strBirthMonth=strBirth.Mid(5,2); BaseDlg.m_strBirthDay=strBirth.Right(2); BaseDlg.m_strJob=m_BaseInfoList.GetItemText(

38、i,5); BaseDlg.m_strDegree=m_BaseInfoList.GetItemText(i,6); CString strgradute=m_BaseInfoList.GetItemText(i,7); BaseDlg.m_strGraduateYear=strgradute.Left(4); BaseDlg.m_strGraduateMonth=strgradute.Mid(5,2); BaseDlg.m_strGraduateDay=strgradute.Right(2); BaseDlg.m_strSchool=m_BaseInfoList.GetItemText(i,8); CString strwork=m_BaseInfoList.GetItemText(i,9); BaseDlg.m_strWorkYear=strgradute.Left(4); BaseDlg.m_strWor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论