您的位置:首页 > 数据库

MFC ado操作mdb数据库

2016-12-19 11:48 288 查看
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.编译运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: