加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在VisualC++6.0中访问Access数据库

(2013-10-03 19:11:00)
分类: Windows编程
    今天突发奇想,想试试在应用程序中访问本机中的某个数据库,看看电脑装了VC6.0,同事还有office access于是想
从VC6.0中访问本地的Access数据库文件,结果居然成功了,故事是这样的:
    第一步:建立数据库
    首先,我打开office access 2007 新建立了一个数据库文件,student.accdb, 我准备用它来管理学生的学号、姓名,然后我从应用程序中去检索这些信息。我在数据库中建立了一个表叫“class1”表示一班的同学,不懂数据库的问度娘去,class1的内容我编辑如下:

    注意:“ID”表示学号,是数字类型, “姓名”和“爱好”是文本类型;
    仅仅实验一下而已,所以就一个表“class1”就行了,保存好这个数据库;
    第二步:配置ODBC数据源
    ODBC就是“Open Database Connevtivity”的意思,即开放式数据库连接,具体的还是去问度娘吧。那么如果要在windows应用程序中动态加载数据源,就要利用到windows中的ODBC数据源管理器。你要问数据源管理器是什么?我的理解是,它是windows操作系统提供的一项服务,它负责为应用程序管理和加载数据源,为开发者屏蔽一些繁琐的工作。在windowsODBC数据源管理器中加入数据源的步骤如下:
    “控制面板”-> “管理工具”-> "ODBC数据源管理器", 弹出界面...
    在“用户DSN”面板中单击“添加”按钮,在弹出的界面中选择Microsoft Access Driver(*.mdb, *.accdb)那一项;

    注意.mdb,和.accdb都是access数据库文件,只是accdb是较新版本access的格式....
    单击“完成”弹出如下界面:
    数据源名输入你喜欢的名字即可,建议和你建立的数据库文件同名;
    然后点击“选择”按钮,定位到先前建立的“Student.accdb”数据库文件;
    最后点击“确定”退出此管理器,配置就完成了。
    第三步:建立VisualC++6.0 MFC工程
    为了好看,还是用MFC搭个框架吧。
    1.新建一个MFC工程,命名为“StudentManager";
    2.MFC向导第一步选择”Single Document“,即单文档应用程序;
    3.MFC向导第二步选择”Database view wiht file support“;
    4.点击”Data source“弹出界面,在ODBC下拉框中选择前面配置的Student数据源,且”Recordset type“
      选择Dynaset,即动态的,如果没有找到Student,说明你配置有问题,重来一遍,仔细点.............
    5.点击”OK“又弹出一个界面,让你选择数据库中具体的表,这里就一个,”calss1“,选中确定.....
    6.MFC向导第三步,取消”ActiveX Control“;
    7.MFC向导第四步取消”Printing and print preview“
    8.MFC向导第五步和第六步全部默认,然后点击”Finish“完成工程的创建;
      打开工程的源码,你会发现有一个CStudentManagerSet类,并且该类有m_ID,m_column1,m_column2三个变量,这些就对应class1表中的”学号“、”姓名“和”爱好“,该类在其成员函数DoFieldExchange中完成这三个变量到数据库表class1中内容的绑定,自己打开看吧....
    第四步:代码编写
    1.首先设置下主界面,如下

        其中”学号“、”姓名“、”爱好“是三个静态文本框;
        右上方三个编辑框(Edit Box)的ID号分别是"ID_EDIT_NUMBER"、"ID_EDIT_NAME"、"ID_EDIT_HOBBY";
        下两个按钮(Button)的ID号分别是"ID_BUTTON_PREV","ID_BUTTON_NEXT";
        (不知道我在说什么的人,自己找本VC6.0的书看看去吧........O(∩_∩)O哈哈~)
    2.打开MFC类向导,为三个编辑框(Edit Box)分别关联三个变量,如下(点击”Add Variable“添加....):

    3.在左边的类视图一栏中,点选CStudentManagerView类,为其添加一个成员函数,如下(右键,”Add member function“...):

    4.补充函数RefreshData的内容如下:
void CStudentManagerView::RefreshData()
{
    char tmp[10] = "";
    itoa(m_pSet->m_ID, tmp, 10);//将数字格式的学号转换成文本格式
 
    m_str_number = tmp;
    m_str_name = m_pSet->m_column1;
    m_str_hobby = m_pSet->m_column2;
 
    UpdateData(FALSE);
}
 
    5.打开CStudentManagerView类的函数OnInitialUpdate,编辑如下:
void CStudentManagerView::OnInitialUpdate()
{
    m_pSet = &GetDocument()->m_studentManagerSet;
    CRecordView::OnInitialUpdate();
    GetParentFrame()->RecalcLayout();
    ResizeParentToFit();
 
    try
    {
        //创建并打开数据集
        m_pSet = new CStudentManagerSet();
        m_pSet->Open();
    }
    catch(CDBException * pe)
    {
        //如果发生数据库异常则报告错误
        AfxMessageBox(pe->m_strError);
        pe->Delete();
    }
 
    RefreshData();
}
到这个时候,按”F5“编译并运行,已经可以出现如下效果了:
在VisualC++6.0中访问Access数据库
哇塞,居然看到数据库中的内容了.....是不是很激动啊,接着往下看。。。!!
下面为连个按钮(BUTTON)”下一个“和”上一个“实现响应函数,使得能够查看上一个或下一个学生信息....
    6.回到主界面的资源编辑状态,双击按钮”上一个“,弹出对话框要求为响应函数输入名称,我们默认即可, 这样就建立了一个按钮的响应函数,同样的方法为”下一个“也建立一个响应函数...
    7."上一个"的响应函数CStudentManagerView::OnButtonPrev内容编辑如下:
void CStudentManagerView::OnButtonPrev()
{
    // TODO: Add your control notification handler code here
    if(m_pSet->IsBOF())
    {
        AfxMessageBox("已经到最前一项!");
        return;
    }
 
    m_pSet->MovePrev();
    RefreshData();
}
 
”下一个“的响应函数CStudentManagerView::OnButtonNext内容编辑如下:
void CStudentManagerView::OnButtonNext()
{
    // TODO: Add your control notification handler code here
    if(m_pSet->IsEOF())
    {
        AfxMessageBox("已经到最后一项!");
        return;
    }
 
    m_pSet->MoveNext();
    RefreshData();
}
    
    8.让我们再按下”F5“运行吧,这时,你已经可以通过点击按钮来逐个查看学生的信息了...
        至于还能干出什么激动人心的是,自己发挥去吧!
 
总结:
        CStudentManagerSet类是继承自类CRecordSet, CRecordSet是微软为我们提供的支持类,利用它可以方便 对数据库中的表项进行编辑,查询等操作。整个过程最关键的步骤在于ODBC数据源的配置,和类CRecordSet的使用,当然中间诸多细节也很重要。看到这里,对于能够举一反三的同学,已经足够了...嗨嗨...

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有