MFC对话框连接Access数据库实例——同学录

先看成品:

 

 系统和Access软件都是64位的,通过安装accessdatabaseengine_x64.exe驱动(包含在文件当中)的实现将数据库的内容显示在MFC对话框控件上,并对数据库内容的增、删、改、查:

增加:增加一条与现有数据编号不同的数据;

删除:根据四个内任意数量的筛选条件的并集,对数据库内的数据进行删除;

修改:根据编号为数据进行修改;、

查询:根据四个内任意数量的筛选条件的并集,对数据库内的数据进行查询。

案例中的同学录的包含四项数据:姓名、籍贯、年龄。

MFC listcontrol控件加载内容代码如下

void CclassmatesDlg::DispBySql(CString sql)
{
	CRecordset rs(&m_classmates);
	rs.Open(CRecordset::dynaset, sql, CRecordset::none);

	//获取列的数目
	short sFieldCount = rs.GetODBCFieldCount();//获取filed的数量,有多少列
	if (sFieldCount <= 0)
	{
		return;
	}

	//清空列表框中的数据,并重绘
	m_list.DeleteAllItems();//删除所有的行
	while (m_list.GetHeaderCtrl()->GetItemCount() > 0)//获取列的标题,获得列的数目
	{
		m_list.DeleteColumn(m_list.GetHeaderCtrl()->GetItemCount() - 1);//删除所有的列
	}
	m_list.SetRedraw(TRUE);
	m_list.Invalidate();
	m_list.UpdateWindow();

	LV_COLUMN lvcolumn;
	CRect rect;//列表空间的宽高信息
	m_list.GetClientRect(&rect);//获取列表空间的宽高信息
	for (short column = 0; column < sFieldCount; column++)
	{
		CODBCFieldInfo fInfo; //表头信息
		rs.GetODBCFieldInfo(column, fInfo);
		//MessageBox(fInfo.m_strName);
		//设置 文本对齐方式|文本类型|列宽
		lvcolumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
		lvcolumn.fmt = LVCFMT_LEFT;//文本左对齐
		lvcolumn.pszText = fInfo.m_strName.GetBuffer(fInfo.m_strName.GetLength());//根据要求的数据类型进行传输
		fInfo.m_strName.ReleaseBuffer();//释放内存
		lvcolumn.iSubItem = column;
		lvcolumn.cx = rect.Width() / sFieldCount;//将列宽进行平均分配

		m_list.InsertColumn(column, &lvcolumn);//插入列表框的标题
	}

	LV_ITEM lvitem;
	CDBVariant var;
	CString value;

	while (!rs.IsEOF())
	{
		for (short column = 0; column < sFieldCount; column++)
		{
			rs.GetFieldValue(column, var);//获取字段的值
			switch (var.m_dwType)
			{
			case DBVT_STRING:
				value.Format(_T("%s"), var.m_pstring->GetBuffer(var.m_pstring->GetLength()));
				break;
			case DBVT_WSTRING:
				value.Format(_T("%s"), var.m_pstring->GetBuffer(var.m_pstringW->GetLength()));
				break;
			case DBVT_LONG:
				value.Format(_T("%ld"), var.m_lVal);
				break;
			case DBVT_SHORT:
				value.Format(_T("%ld"), var.m_iVal);
				break;
			default:
				value = _T("");
				break;

			}
			
			if (column == 0)
			{
				lvitem.mask = LVFIF_TEXT;
				lvitem.iItem = m_list.GetItemCount();
				lvitem.iSubItem = column;

				lvitem.pszText = value.GetBuffer(value.GetLength());//id 1,2,3
				value.ReleaseBuffer();
				lvitem.cchTextMax = value.GetLength();

				m_list.InsertItem(&lvitem);//添加行数据的第一列,插入
			}
			else
			{
				lvitem.mask = LVFIF_TEXT;
				lvitem.iItem = m_list.GetItemCount()-1;//插入的第一行是从0开始的,要减1
				lvitem.iSubItem = column;//获得正处于第几列

				lvitem.pszText = value.GetBuffer(value.GetLength());//id 1,2,3
				value.ReleaseBuffer();
				lvitem.cchTextMax = value.GetLength();
				m_list.SetItem(&lvitem);//添加行数据的第2到第n列,设置
			}
		}
		rs.MoveNext();//移到第下一行进行
	}
}

完整的项目文件在:MFC对话框连接Access数据库实例——同学录-Access文档类资源-CSDN下载 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值