• MFC使用Access数据库


    注册数据源

    首先,用Access新建一个数据库文件,例如:StudentInfo.mdb

    然后注册。

    1)依次【控制面板】-》【管理工具】-》【数据源】,将弹出”ODBC数据库管理器“。注意,win7默认的是建立64位的注册(右键属性可以看到目标C:WindowsSystem32odbcad32.exe),之后用VC6.0的MFC连接会出现不匹配。要自己找到目录 C:WindowsSysWOW64odbcad32.exe 双击

    双击win7默认的”数据源(ODBC)“快捷键,会是下图

    点击添加后,

    默认这种,我的出现问题,提示错误: 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配

    要用下面的方法,自己找到目录:C:WindowsSysWOW64odbcad32.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);
    }
    

      

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    利用SuperMap Deskpro进行Peking 54到WGS84的转换
    远程序列化xml文件(可用于自动更新程序中版本号的比较,更新文件的读取等)
    [转]C#导出到EXCEL
    [转]常用数学公式
    CLR Via C#系列学习笔记之委托
    黑马程序员C#语言中的三种循环:while 循环、dowhile 循环、for 循环。
    .net2005中GridView或者Datalist等超級流行的分頁
    Array.splice()删除数组中重复的数据
    .net中常需对文件夹以及常用的操作方法
    文件的上传下载示例
  • 原文地址:https://www.cnblogs.com/htj10/p/10162221.html
Copyright © 2020-2023  润新知