VC++.NET 开发MFC数据库管理系统全记录[ADODC+DataGrid](2005-6-2)

这几天忙着没时间写Blog
一方面是在做毕业论文
一方面在公司做项目,学着用MFC连接数据库
以前从来没正儿八经地用MFC做过东西
然后上网找了半天,也找不到一篇令我满意的傻瓜式MFC数据库操作教程
所以,没办法
指望不到别人
只好自己摸索


在正式开始用MFC开发DBMS之前,先作几点说明
(1)为什么要用MFC,而不用.Net Framework
          几天前我就已经用VB.NET 写了一个小的数据库管理系统
          可以实现数据库中的操作
           但是我公司主流语言是VC++,而用VB.NET开发前端则接口不好处理 
           我不能改变世界,只好改变自己去适应世界emsmilep.gif
          所以没有办法,我只好学着用MFC开发DBMS
        
         另一方面,通过用MFC开发DBMS,能使一个程序员对数据库操作理解地更加深刻一些,因为你可以直接去查看一个类属性和方法的定义,而不仅仅局限在调用公用方法访问私用属性这一个层面上

(2)本文中出现的SQL语句不再说明,如果读者到现在仍不能自如地运用SQL或T-SQL,建议找本书去看看,我觉得这是比较基础的东西


(3)MFC开发DBMS有很多种方法:如OBDC、OLE-DB、DAO、ADO,这里我只说用ADODC+DataGrid的方法,其他的,我没用过,所以不敢妄言


(4)我这次用的数据库是ACCESS,其他的数据库道理相同


好,那么请各位读者跟我一起,打开手头上的VS.NET   2003 ,开发DBMS Step By Step


Step 1 ,新建一个VC++项目,MFC  对话框应用程序,这个过程不再介绍

Step 2,从资源视图中打开主对话框

Step 3,右击工具箱中的“对话框编辑器”,选择“添加-移除项”,在弹出的“自定义工具箱”中选择“COM组件”,添加“Microsoft ADO Data Control 6.0(SP4) (OLEDB)”和“Microsoft DataGrid Control 6.0(SP5)(OLEDB)”两个ActiveX控件,点“确定”就可以了。
            这时候“对话框编辑器”就多出了这两个控件,把它们拖到对话框中去。
            说明:1:如果COM组件中没有这两个控件,请单击“开始”->“所有程序”->“Microsoft 
                             Visual Studio.NET  2003”->         “Visual Studio .NET 工具”-> “Visual Studio.NET 2003 命
                              令提示”
                             输入:regsvr32 msadodc.ocxregsvr32 msdatgrd.ocx,即可以将这两个控件添加到工具箱中
                         2:如果拖这两个控件时出现“未能实例化控件******,因为这需要设计时授权”,请拿
                              出VS.NET 2003的安装盘,在 \VisualStudio2003Inst\Extras\VB6 Controls目录下应该能找到 
                               vb6controls.reg这个文件,双击它,把这个信息         添加到注册表中去,就可以了
Step 4     实现数据库绑定
                        在ADODC控件的属性中找到ConnectionString一项,打开,选择"General“->”Build“,在
              “提供程序”中选择“Microsoft Jet 4.0 OLE DB Provider”(因为我这里用的是Access 2003 数据
               库),在“连接”中选择一个“源数据库”,其他的都用默认值,就可以了。设定完连接字符
              串后打 开“RecordSource”属性,在“CommandType”中选择"1-adCmdText”,在Command Text
             (SQL)中输和"Select * from UserInfo”(视数据表不同而不同),点“确定”。
                        在DataGrid控件的属性中找到Data Source一项,选择“IDC_ADODC1”一项,设DataField为
             “ID”,就可以了
                      好,现在编译一下,可以看到了吧,DataGrid清清楚楚地显示了数据表里的内容。
                      体验到了MFC的强大了吧,哈,不需要自己写一行代码,就能实现这么强大的功能。

Step 5    引用ADODC和DataGrid类 
            这一步就比较容易了
            添加两个变量,m_Adodc和m_DataGrid
            就会自己包含这两个类的头文件

Step 6    实现搜索、插入、删除、修改功能 
            这一步也很容易做
            我只把Button的Click事件代码贴上
            详细内容就不表述了
            搜索:
            void CVCMFCDBDlg::OnBnClickedButtonSearch()
          {
         // TODO: 在此添加控件通知处理程序代码
         UpdateData(true);
         CString sql= (CString)"select * from UserInfo where ID='";
         sql = sql + (CString)m_csID ;
         sql = sql + (CString)"'";
         m_Adodc.CommandTypeEnum = CAdodc1::adCmdText;
         m_Adodc.put_RecordSource(sql);
         m_Adodc.Refresh();
         m_DataGrid.Refresh();
        UpdateData(false);
        }

        添加:
        void CVCMFCDBDlg::OnBnClickedButtonAddstudy()
        {
         // TODO: 在此添加控件通知处理程序代码
         UpdateData(true);
         CString sql= (CString)"Insert into StudyInfo(UserID,StudyTime,StudyContent,StudyGrade) Values('";
         sql = sql + (CString)m_csAddID;
         sql = sql + (CString)"','";
         sql = sql + (CString)m_csNewTime;
         sql = sql + (CString)"','";
         sql = sql + (CString)m_csNewContent;
         sql = sql + (CString)"',";
         sql = sql + (CString)m_csNewScore;
         sql = sql + (CString)")";
         m_Adodc.CommandTypeEnum = CAdodc1::adCmdText;
         m_Adodc.ConnectStringTypeEnum = CAdodc1::adConnectTypeOledb;
         m_Adodc.put_RecordSource(sql);
         m_Adodc.Refresh();
         m_DataGrid.Refresh();

       }
        
        删除:
        void CVCMFCDBDlg::OnBnClickedButtonDelstudy()
        {
         // TODO: 在此添加控件通知处理程序代码
 
         UpdateData(true);
         CString sqlconn,sql;
         sql= (CString)"delete from StudyInfo where StudyID =";
         sql = sql + (CString)m_csDelID;
         //sql = sql + (CString)"'";
         //m_Adodc.put_ConnectionString(sqlconn);
         //m_Adodc.CommandTypeEnum = CAdodc1::adCmdText;
         m_Adodc.put_RecordSource(sql);
         m_Adodc.Refresh();
         UpdateData(false);
        }

        修改功能类似

Step 7   本DBMS的一些不足 

        虽然好像已经实现了该实现的功能
        不过这个小DBMS仍然是有问题的
        问题1:调试结束的候会出现“VCMFCDB.exe 中的 0x77f33847 处未处理的异常: 用户断点 。”
                       不过在生成的.exe文件中不会有此错误
        问题2:添加和删除记录时会出现是“对象关闭时,不允许操作”,但仍可以正常改变数据库中的
                      记录
        这两个问题一直没能得到解决
         还希望知道的朋友能帮助我,不胜感激!








亲爱的朋友,阅读完本贴之后,请不要吝啬您的评论,无论赞扬或是批评,我都会深深地感谢您!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值