MFC ado操作mdb数据库

本文介绍如何在MFC对话框应用中利用ADO进行数据库操作,包括连接数据库、添加、修改、删除记录及数据显示等功能实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.新建基于对话框应用程序

找到stdafx.h文件 在末尾加入

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

2.找到对话框app类初始化函数InitInstance()其中加入

::CoInitialize(NULL);
::CoUninitialize();//在return之前
3.在对话框.h文件中定义

_ConnectionPtr m_pConnection;
	_RecordsetPtr m_pRecordset;
并在.h给对话框添加方法(函数)

void OnInitADOConn(void);
	void ExitConnect(void);
	void AddToGrid(void);
4.在对话框中添加list control控件设置auto arrange为true 。alignment为top 。 no label wrap 为true。 view 为 report(报表) sort为none。
添加四个edit控件分别用作学生编号,姓名,性别,学号。四个button控件添加,修改,删除,清空。

list控件添加控制变量m_Grid     edit添加字符串值变量分别为

CString m_ID;
	CString m_Name;
	CString m_Sex;
	CString m_StuID;
5.找到控制面板,管理工具(查看方式小图标就有了),数据源odbc。在这里新建mdb数据库到工程debug里,命名为shujuku.mdb。

6.双击添加按钮写入

UpdateData(TRUE);
	if(m_ID.IsEmpty()||m_Name.IsEmpty()||m_Sex.IsEmpty()||m_StuID.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_StuID);
		m_pRecordset->Update();
		//更新数据表
		ExitConnect();
	}
	catch(...)
	{
		MessageBox("操作失败");
		return;
	}
	MessageBox("添加成功");
	m_Grid.DeleteAllItems();
	//删除列表控件
	AddToGrid();
双击修改按钮写入

UpdateData(TRUE);
	if(m_ID.IsEmpty()||m_Name.IsEmpty()||m_Sex.IsEmpty()||m_StuID.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_StuID);
		m_pRecordset->Update();
		ExitConnect();
	}
	catch(...)
	{

	MessageBox("操作失败");
	return;
	}
	MessageBox("修改成功");
	m_Grid.DeleteAllItems();
	AddToGrid();
双击删除按钮写入

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();
双击清除按钮写入

m_ID="";
	m_Name="";
	m_Sex="";
	m_StuID="";
	UpdateData(FALSE);
写函数AddToGrid

void CMDBDlg::AddToGrid(void)
{
	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();
}
写函数oninitadoconn  exitconnect
void CMDBDlg::OnInitADOConn(void)
{
	try{//创建连接对象实例
		m_pConnection.CreateInstance("ADODB.Connection");
		TCHAR pszFileName[MAX_PATH];  
		GetModuleFileName(NULL,pszFileName,MAX_PATH);  
		CString psFileName;  
		psFileName=pszFileName;
		psFileName=psFileName.Left(psFileName.ReverseFind('\\'));  
		CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};uid=;pwd=;DBQ=";
		strConnect+=psFileName;
		strConnect+="\\shujuku.mdb;";
		//使用Open方法连接数据库 
		m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
		//AfxMessageBox("数据库连接成功!");
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.Description());
	}
}


void CMDBDlg::ExitConnect(void)
{
	if(m_pRecordset!=NULL)
		m_pRecordset->Close();
	m_pConnection->Close();
}
在对话框.cpp初始化函数中添加代码

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();
7.编译运行。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值