【MFC学习笔记】MFC 操作Access数据库 显示在List Control

文章目录

  • 建立Access数据库
  • 建立MFC对话框窗体
  • 为IDC_BOOK_LIST添加变量
  • 设置IDC_BOOK_LIST格式
  • 建立ADO数据库连接

建立Access数据库

在Access中建立数据库如下图
保存为2002-2003数据库格式(.mdb后缀)
【MFC学习笔记】MFC 操作Access数据库 显示在List Control_第1张图片

要在一个MFC对话框窗体中,用List Control控件将数据表library的数据读取并显示

建立MFC对话框窗体

建立一个对话框项目ex3
在对话框窗体选择List control控件摆放。
【MFC学习笔记】MFC 操作Access数据库 显示在List Control_第2张图片
按图设置控件属性:
样式设置为Report
ID设置为IDC_BOOK_LIST

为IDC_BOOK_LIST添加变量

右键控件,选择添加变量,变量名为m_book,其他设置如下图。
【MFC学习笔记】MFC 操作Access数据库 显示在List Control_第3张图片

添加完成后,可以到Dlg.h头文件中看到该变量
在这里插入图片描述

设置IDC_BOOK_LIST格式

在Dlg.cpp文件中添加代码如下

    // TODO:  在此添加额外的初始化代码
    CRect rect;

    // 获取编程语言列表视图控件的位置和大小
    m_book.GetClientRect(rect);

    // 为列表视图控件添加全行选中和栅格风格   
    m_book.SetExtendedStyle(m_book.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

    // 为列表视图控件添加三列   
    m_book.InsertColumn(0, _T("ID"), LVCFMT_CENTER, rect.Width() / 5, 0);
    m_book.InsertColumn(1, _T("图书编码"), LVCFMT_CENTER, rect.Width() / 5, 0);
    m_book.InsertColumn(2, _T("图书名称"), LVCFMT_CENTER, rect.Width() / 5, 1);
    m_book.InsertColumn(3, _T("图书作者"), LVCFMT_CENTER, rect.Width() / 5, 2);
    m_book.InsertColumn(4, _T("出版社名"), LVCFMT_CENTER, rect.Width() / 5, 3);

建立ADO数据库连接

在stdafx.h头文件中添加代码

#import "c:\program files\common files\system\ado\msado15.dll"  no_namespace rename ("EOF", "adoEOF")

要确保msado15.dll文件的路径正确。
如果这里报错可以执行一次 生成 - 重新生成解决方案。

在Dlg.h头文件中设置连接句柄1

	_ConnectionPtr m_pConnection;

在Dlg.h头文件中设置记录集句柄

	//定义一个指向Recordset对象的指针
	_RecordsetPtr m_pRecordset;

在Dlg.h头文件中定义列名变量

	CString id, bm, mc, zz, cb;

在Dlg.cpp中进行数据库连接

	AfxOleInit();//初始化相应的Com环境
	AfxEnableControlContainer();
	m_pConnection = NULL;
    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pConnection->ConnectionString = "uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=F:/myData/library.mdb;";
    //F:/myData/library.mdb是之前建立的数据库的绝对路径。

    //连接字符串
    m_pConnection->Open(L"", L"", L"", adCmdUnspecified);      //打开本地Access库library.mdb 

利用Connection对象的Execute方法执行SQL命令
Execute方法的原型:
Execute (_bstr_t CommandText, VARIANT * RecordsAffected, long Options )
Execute执行完后返回一个指向记录集的指针,即m_pRecordset

    _bstr_t ha = "select * from library";    //查询ZRN表里的数据
    m_pRecordset = m_pConnection->Execute(ha, NULL, adCmdText);   //获取记录集
    int i = 0;
    while (!m_pRecordset->adoEOF)
    {
        id = (char*)(_bstr_t)m_pRecordset->GetCollect("ID");
        bm = (char*)(_bstr_t)m_pRecordset->GetCollect("图书编码");    //xm,dz,yb 分别为你自己数据库的列名
        mc = (char*)(_bstr_t)m_pRecordset->GetCollect("图书名称");     //把这一记录中数据库里dz列下的值给字符串dz
        zz = (char*)(_bstr_t)m_pRecordset->GetCollect("图书作者");
        cb = (char*)(_bstr_t)m_pRecordset->GetCollect("出版社名");
        m_book.InsertItem(i, _T(""));
        m_book.SetItemText(i, 0, id);     //添加到list Control 中的第i行的第一列下
        m_book.SetItemText(i, 1, bm);     //添加到list Control 中的第i行的第二列下
        m_book.SetItemText(i, 2, mc);     //添加到list Control 中的第i行的第三列下
        m_book.SetItemText(i, 3, zz);     //添加到list Control 中的第i行的第四列下
        m_book.SetItemText(i, 4, cb);     //添加到list Control 中的第i行的第五列下
        i += 1;   //下次循环指向第2行
        m_pRecordset->MoveNext();   //移动到下一个记录
    }

关闭连接

    m_pRecordset->Close();   //关闭记录集指针
    m_pConnection->Close(); //关闭数据库连接
    m_pRecordset = NULL;
    m_pConnection = NULL;
    ::CoUninitialize(); //收回COM

运行程序
【MFC学习笔记】MFC 操作Access数据库 显示在List Control_第4张图片
[1]: https://blog.csdn.net/qq_31209383/article/details/51198595


  1. ADO操作m_pConnection->Open和m_pRecordset->Open ↩︎

你可能感兴趣的:(MFC)