• MFC使用ADO对象开发数据库应用程序


    MFC使用ADO对象开发数据库应用程序

     

    需要一个List Constrol控件设置为

    其步骤一般分为:

    (1) 引入ADO动态库文件

    (2) 初始化COM环境

    (3) 连接数据库操作数据表

    说明:本数据库使用acess2000制作,名字为“shujuku.mdb”。内含一个表,命名为“表1”。

     

    stdafx.h添加以下代码引入ADO动态库文件

     

    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\

     rename("EOF","adoEOF")rename("BOF","adoBOF")

     

    初始化COM环境

     

    ::CoInitialize(NULL);   //app类中的InitInstance函数中添加

    ::CoUninitialize();       //app类中的InitInstance函数最后return之前添加释放COM环境

     

     

    首先先在dlg头文件中先声明这两个智能指针,通过这些指针可以很容易的创建和删除ADO对象。

    _ConnectionPtr m_pConnection;

    _RecordsetPtr m_pRecordset;

     

    接下来在dlg类中添加函数void OnInitADOConn()

    void CMy1Dlg::OnInitADOConn()

    {

    try

    {

    //创建连接对象实例

    m_pConnection.CreateInstance("ADODB.Connection");

    //设置连接字符串2000的在代码中有!

    CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\

    uid=;pwd=;DBQ=shujuku.mdb;";

    //使用Open方法连接数据库

    m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);  

    }

    catch(_com_error e)

    {

    AfxMessageBox(e.Description());

    }

    }

    dlg类中在添加void ExitConnect()函数

    void CMy1Dlg::ExitConnect()

    {

    //关闭记录集和连接

    if(m_pRecordset!=NULL)

    m_pRecordset->Close();

    m_pConnection->Close();

    }

    dlg类的OnInitDialog函数中添加如下代码,设置列表视图的风格和标题(写在最后)

     

    m_Grid.SetExtendedStyle(LVS_EX_FLATSB

    |LVS_EX_FULLROWSELECT

    |LVS_EX_HEADERDRAGDROP

    |LVS_EX_ONECLICKACTIVATE

    |LVS_EX_GRIDLINES);

    m_Grid.InsertColumn(0,"编号",LVCFMT_LEFT,110,0);

    m_Grid.InsertColumn(1,"姓名",LVCFMT_LEFT,110,1);

    m_Grid.InsertColumn(2,"性别",LVCFMT_LEFT,110,2);

    m_Grid.InsertColumn(3,"学历",LVCFMT_LEFT,110,3);

    AddToGrid();

     

    dlg类中添加void AddToGrid()函数

     

    void CMy1Dlg::AddToGrid()

    {

    //连接数据库

    OnInitADOConn();

    //设置查询字符串

    _bstr_t bstrSQL = "select * from 1 order by 编号 desc";

    //创建记录集指针对象实例

    m_pRecordset.CreateInstance(__uuidof(Recordset));

    //打开记录集

    m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,

    adLockOptimistic,adCmdText);

    while(!m_pRecordset->adoEOF)

    {

    m_Grid.InsertItem(0,"");

    m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("编号"));

    m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("姓名"));

    m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("性别"));

    m_Grid.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("学历"));

    //将记录集指针移动到下一条记录

    m_pRecordset->MoveNext();

    }

    //断开数据库连接

    ExitConnect();

     

    }

    接下来为四个edit控件和一个list constrol控件关联变量,在资源中右键点击选择classwizar里的Member variables,分别为它们设置变量为m_ID,m_Name,m_Sex,m_Culture,m_Grid.dlg类的头文件部分自动会生成

    CStringm_ID;

    CStringm_Name;

    CStringm_Sex;

    CStringm_Culture;

    CListCtrl m_Grid;

     

    Dlg类构造函数中

    m_ID = _T("");

    m_Name = _T("");

    m_Sex = _T("");

    m_Culture = _T("");

    dlg类的DoDataExchange()函数中

    DDX_Text(pDX, IDC_EDIT1, m_ID);

    DDX_Text(pDX, IDC_EDIT2, m_Name);

    DDX_Text(pDX, IDC_EDIT3, m_Sex);

    DDX_Text(pDX, IDC_EDIT4, m_Culture);

     

    接下来双击那四个功能按钮和一个列表控件的点击响应功能,分别生成各自的响应函数

     

    //记录数据添加功能

    void CMy1Dlg::OnButton1() 

    {

    UpdateData(TRUE);

    if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Sex.IsEmpty() || m_Culture.IsEmpty())

    {

    MessageBox("基础信息不能为空!");

    return;

    }

    OnInitADOConn();

    _bstr_t sql;

    sql = "select * from 1";

    m_pRecordset.CreateInstance(__uuidof(Recordset));

    m_pRecordset->Open(sql,m_pConnection.GetInterfacePtr(),adOpenDynamic,

    adLockOptimistic,adCmdText);

    try

    {

    m_pRecordset->AddNew(); //添加新行

    m_pRecordset->PutCollect("编号",(_bstr_t)m_ID);

    m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name);

    m_pRecordset->PutCollect("性别",(_bstr_t)m_Sex);

    m_pRecordset->PutCollect("学历",(_bstr_t)m_Culture);

    m_pRecordset->Update(); //更新数据表

    ExitConnect();

    }

    catch(...)

    {

    MessageBox("操作失败");

    return;

    }

    MessageBox("添加成功");

    m_Grid.DeleteAllItems(); //删除列表控件

    AddToGrid();

    }

     

    //dlg类头文件声明一个long型变量,用来保存用户单击的记录在列表控件的位置为列表,该变量定义在dlg的类内。

    //控件的NM_CLICK消息添加消息处理函数(即双击资源框里的list constrol控件就会生成)

    void CMy1Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 

    {

    long pos = m_Grid.GetSelectionMark();

    m_ID = m_Grid.GetItemText(pos,0);

    m_Name = m_Grid.GetItemText(pos,1);

    m_Sex = m_Grid.GetItemText(pos,2);

    m_Culture = m_Grid.GetItemText(pos,3);

    UpdateData(FALSE);

    *pResult = 0;

    }

    //修改数据功能

    void CMy1Dlg::OnButton2() 

    {

    UpdateData(TRUE);

    if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Sex.IsEmpty() || m_Culture.IsEmpty())

    {

    MessageBox("基础信息不能为空!");

    return;

    }

    OnInitADOConn();

    _bstr_t sql;

    sql = "select * from 1";

    m_pRecordset.CreateInstance(__uuidof(Recordset));

    m_pRecordset->Open(sql,m_pConnection.GetInterfacePtr(),adOpenDynamic,

    adLockOptimistic,adCmdText);

    long pos = m_Grid.GetSelectionMark();

    try

    {

    m_pRecordset->Move((long)pos,vtMissing);

    m_pRecordset->PutCollect("编号",(_bstr_t)m_ID);

    m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name);

    m_pRecordset->PutCollect("性别",(_bstr_t)m_Sex);

    m_pRecordset->PutCollect("学历",(_bstr_t)m_Culture);

    m_pRecordset->Update();

    ExitConnect();

    }

    catch(...)

    {

    MessageBox("操作失败");

    return;

    }

    MessageBox("修改成功");

    m_Grid.DeleteAllItems();

    AddToGrid();

    }

    //删除数据功能

    void CMy1Dlg::OnButton3() 

    {

    OnInitADOConn();

    _bstr_t sql;

    sql = "select * from 1";

    m_pRecordset.CreateInstance(__uuidof(Recordset));

    m_pRecordset->Open(sql,m_pConnection.GetInterfacePtr(),adOpenDynamic,

    adLockOptimistic,adCmdText);

    long pos = m_Grid.GetSelectionMark();

    try

    {

    m_pRecordset->Move((long)pos,vtMissing);

    m_pRecordset->Delete(adAffectCurrent);

    m_pRecordset->Update();

    ExitConnect();

    }

    catch(...)

    {

    MessageBox("操作失败");

    return;

    }

    MessageBox("删除成功");

    m_Grid.DeleteAllItems();

    AddToGrid();

    }

    //清除功能

    void CMy1Dlg::OnButton4() 

    {

    m_ID = "";

    m_Name = "";

    m_Sex = "";

    m_Culture = "";

    UpdateData(FALSE);

    }

    源码下载地址:http://www.kuaipan.com.cn/file/id_4553283809050696.htm 

  • 相关阅读:
    CSS学习笔记之(1):文档流、块级元素、内联元素
    java nio纯理论
    CSS权重计算
    JS闭包(转载)
    [Journal]我是如何DIY博客的
    [CodeForces]Codeforces Round #428 (Div. 2)
    [Data Structure][线段树]BZOJ3211 花神游历各国
    [Journal]有一种感动叫ACM——记WJMZBMR在成都赛区开幕式上的讲话
    美团面试失败(Java开发)
    继承的初始化过程
  • 原文地址:https://www.cnblogs.com/yaowen/p/2848356.html
Copyright © 2020-2023  润新知