MFC编程实例之MFC使用Access数据库
沉沙 2018-12-29 来源 : 阅读 940 评论 0

摘要:本篇教程探讨了MFC编程实例之MFC使用Access数据库,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇教程探讨了MFC编程实例之MFC使用Access数据库,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

MFC编程实例之MFC使用Access数据库

<

注册数据源
首先,用Access新建一个数据库文件,例如:StudentInfo.mdb
然后注册。
1)依次【控制面板】-》【管理工具】-》【数据源】,将弹出”ODBC数据库管理器“。注意,win7默认的是建立64位的注册(右键属性可以看到目标C:\Windows\System32\odbcad32.exe),之后用VC6.0的MFC连接会出现不匹配。要自己找到目录 C:\Windows\SysWOW64\odbcad32.exe 双击
双击win7默认的”数据源(ODBC)“快捷键,会是下图
点击添加后,
默认这种,我的出现问题,提示错误: 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配。
要用下面的方法,自己找到目录:C:\Windows\SysWOW64\odbcad32.exe
-----------------------------
自己找的ODBC,双击后,
点击添加后
 -------------------------------------------------------------------------------------------------------------------
2)如上图选择Microsoft Access Driver(*.mdb),点击”完成“。出现下图
点击”确定“,完成数据源的注册。
 
建立MFC工程连接数据源 
新建工程,使用MFC AppWizard向导,在第二步时选择 Database view without file support 选项。然后Data Source 按钮变为可用,点击此按钮,弹出Database Options 对话框。如下图,点击OK后,选择Tables,点击OK。其他MFC AppWizard步骤默认,完成即可。
 
1. 除了在新建工程的时候指定数据源和数据源中的数据表,还可以自己连接数据源。更灵活。
 
/*   1、新建一个基于对话框的MFC工程
     2、添加编辑控件,并关联CString类型的变量
     3、在CxxxDlg.h中,加入 #include "Afxdb.h"//支持数据库
         在CxxxDlg.h中,添加成员变量 CDatabase m_DB; CRecordset m_pSet;
     4、添加一个按钮IDC_CONNECT,并双击添加按钮的函数OnConnect()如下
*/
void CAccessExample10Dlg::OnConnect()
{
    m_pSet = new CRecordset(&m_DB);
    if(!m_DB.OpenEx(_T("DSN=StudentInfo"),0)) //链接数据源
    {
        MessageBox("打开数据源失败!","提示");
        return;
    }
    if(!m_pSet->IsOpen())
    {
        m_pSet->Open(CRecordset::dynaset, _T("Select * from tb_clientInfo")); //打开数据库中的表tb_clientInfo
    }
    if(m_pSet->IsEOF())
    {
        MessageBox("记录集没有记录!","提示");
        return;
    }
    //把第一个记录显示
    m_pSet->MoveFirst();
    m_pSet->GetFieldValue((short)0,m_StuID);
    m_pSet->GetFieldValue((short)1,m_StuName);
    m_pSet->GetFieldValue((short)2,m_StuGradYear);
    UpdateData(FALSE);
}
  添加,第一条记录、最后一条记录、下一条记录、上一条记录的按钮,并分别添加函数,如下
void CAccessExample10Dlg::OnRecordFirst()
{
    // TODO: Add your control notification handler code here
    m_pSet->MoveFirst();
    m_pSet->GetFieldValue((short)0,m_StuID);
    m_pSet->GetFieldValue((short)1,m_StuName);
    m_pSet->GetFieldValue((short)2,m_StuGradYear);
    UpdateData(FALSE);
}
 
void CAccessExample10Dlg::OnRecordNext()
{
    // TODO: Add your control notification handler code here
    m_pSet->MoveNext(); 
    if(m_pSet->IsEOF())
    {
        MessageBox("已经到达最后一条记录!","提示");
        m_pSet->MovePrev();
        return;
    }
 
    m_pSet->GetFieldValue((short)0,m_StuID);
    m_pSet->GetFieldValue((short)1,m_StuName);
    m_pSet->GetFieldValue((short)2,m_StuGradYear);
    UpdateData(FALSE);
}
 
void CAccessExample10Dlg::OnRecordPrev()
{
    // TODO: Add your control notification handler code here
    m_pSet->MovePrev();
    if(m_pSet->IsBOF()) // 判断记录集是否已经定位在第一个记录前
    {
        MessageBox("已经到达第一条记录!","提示");
        m_pSet->MoveNext();
        return;
    }
    m_pSet->GetFieldValue((short)0,m_StuID);
    m_pSet->GetFieldValue((short)1,m_StuName);
    m_pSet->GetFieldValue((short)2,m_StuGradYear);
    UpdateData(FALSE);
}
 
void CAccessExample10Dlg::OnRecordLast()
{
    // TODO: Add your control notification handler code here
    m_pSet->MoveLast();
    m_pSet->GetFieldValue((short)0,m_StuID);
    m_pSet->GetFieldValue((short)1,m_StuName);
    m_pSet->GetFieldValue((short)2,m_StuGradYear);
    UpdateData(FALSE);
}    

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程