VS2015 MFC对access2010数据库的增删改查
特点:1,把access内容导入list control后,可以实现双击修改list control的同时,修改数据库,也可以通过子弹窗修改数据库
2,查询可以通过combo—box实现便捷查询
3,删除可以通过单击listcontrol中的任意一行实现删除,如果单击到空白处,会提示
首先准备vs2015与access2010;
先连接数据库:网上方法有很多,我的office是64位的,所以debug,x64。!!!!!!否则连不上,如果你的机子上是32位的office,那就x86。
下面展示 连接数据库
的代码。
try {
CoInitialize(NULL);
m_pConnection = _ConnectionPtr(__uuidof(Connection));
m_pConnection->ConnectionTimeout = 5; //设置超时时间为5秒
m_pConnection->ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=access.accdb;";
m_pConnection->Open("", "", "", adConnectUnspecified);
/*_variant_t RecordsAffected;
CString strSql;
BSTR bstrSQL;
strSql = _T("CREATE TABLE acces(ID INTEGER,图书编码 REAL,图书名称 REAL,图书作者 REAL,出版社名 REAL )");//INTEGER
bstrSQL = strSql.AllocSysString();
m_pConnection->Execute(bstrSQL, &RecordsAffected, adCmdText);*/
AfxMessageBox(_T("数据库连接成功"));
}
catch (_com_error e) {
//m_pConnection->ConnectionTimeout = 5; //设置超时时间为5秒
AfxMessageBox(_T("数据库连接失败!"));
return FALSE;
}
一定要分清数据库和表,我这里在工程目录下放置数据库,我的数据库名字是access,数据库可以有很多表,我这次操作的表名是acces,(少一个s)。当然你可以任意名字。
下面展示 创建list control表头的代码
。
CoUninitialize();
// TODO: 在此添加额外的初始化代码
CRect rect;
// 获取编程语言列表视图控件的位置和大小
m_list.GetClientRect(rect);
// 为列表视图控件添加全行选中和栅格风格
m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
// 为列表视图控件添加三列
m_list.InsertColumn(0, _T("ID"), LVCFMT_CENTER, rect.Width() / 5, 0);
m_list.InsertColumn(1, _T("图书编码"), LVCFMT_CENTER, rect.Width() / 5, 0);
m_list.InsertColumn(2, _T("图书名称"), LVCFMT_CENTER, rect.Width() / 5, 1);
m_list.InsertColumn(3, _T("图书作者"), LVCFMT_CENTER, rect.Width() / 5, 2);
m_list.InsertColumn(4, _T("出版社名"), LVCFMT_CENTER, rect.Width() / 5, 3);
下面展示把access内容导入list control的代码
。
izengjia=1;//每次导入都置1,这个变量也是为了减少bug
m_list.DeleteAllItems();//清空列表
_variant_t RecordsAffected;
CString ha;
try {
ha = "select * from acces"; //查询ZRN表里的数据
m_pRecordset = m_pConnection->Execute(ha.AllocSysString(), &RecordsAffected, 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_list.InsertItem(i, _T(""));
m_list.SetItemText(i, 0, id); //添加到list Control 中的第i行的第一列下
m_list.SetItemText(i, 1, bm); //添加到list Control