MFC使用ADO对象开发数据库应用程序

简介:

MFC使用ADO对象开发数据库应用程序

 

需要一个List Constrol控件设置为

其步骤一般分为:

(1) 引入ADO动态库文件

(2) 初始化COM环境

(3) 连接数据库操作数据表

说明:本数据库使用acess2000制作,名字为“shujuku.mdb”。内含一个表,命名为“表1”。

 

stdafx.h添加以下代码引入ADO动态库文件

 

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\

 rename("EOF","adoEOF")rename("BOF","adoBOF")

 

初始化COM环境

 

::CoInitialize(NULL);   //app类中的InitInstance函数中添加

::CoUninitialize();       //app类中的InitInstance函数最后return之前添加释放COM环境

 

 

首先先在dlg头文件中先声明这两个智能指针,通过这些指针可以很容易的创建和删除ADO对象。

_ConnectionPtr m_pConnection;

_RecordsetPtr m_pRecordset;

 

接下来在dlg类中添加函数void OnInitADOConn()

void CMy1Dlg::OnInitADOConn()

{

try

{

//创建连接对象实例

m_pConnection.CreateInstance("ADODB.Connection");

//设置连接字符串2000的在代码中有!

CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\

uid=;pwd=;DBQ=shujuku.mdb;";

//使用Open方法连接数据库

m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);  

}

catch(_com_error e)

{

AfxMessageBox(e.Description());

}

}

dlg类中在添加void ExitConnect()函数

void CMy1Dlg::ExitConnect()

{

//关闭记录集和连接

if(m_pRecordset!=NULL)

m_pRecordset->Close();

m_pConnection->Close();

}

dlg类的OnInitDialog函数中添加如下代码,设置列表视图的风格和标题(写在最后)

 

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();

 

dlg类中添加void AddToGrid()函数

 

void CMy1Dlg::AddToGrid()

{

//连接数据库

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();

 

}

接下来为四个edit控件和一个list constrol控件关联变量,在资源中右键点击选择classwizar里的Member variables,分别为它们设置变量为m_ID,m_Name,m_Sex,m_Culture,m_Grid.dlg类的头文件部分自动会生成

CStringm_ID;

CStringm_Name;

CStringm_Sex;

CStringm_Culture;

CListCtrl m_Grid;

 

Dlg类构造函数中

m_ID = _T("");

m_Name = _T("");

m_Sex = _T("");

m_Culture = _T("");

dlg类的DoDataExchange()函数中

DDX_Text(pDX, IDC_EDIT1, m_ID);

DDX_Text(pDX, IDC_EDIT2, m_Name);

DDX_Text(pDX, IDC_EDIT3, m_Sex);

DDX_Text(pDX, IDC_EDIT4, m_Culture);

 

接下来双击那四个功能按钮和一个列表控件的点击响应功能,分别生成各自的响应函数

 

//记录数据添加功能

void CMy1Dlg::OnButton1() 

{

UpdateData(TRUE);

if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Sex.IsEmpty() || m_Culture.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_Culture);

m_pRecordset->Update(); //更新数据表

ExitConnect();

}

catch(...)

{

MessageBox("操作失败");

return;

}

MessageBox("添加成功");

m_Grid.DeleteAllItems(); //删除列表控件

AddToGrid();

}

 

//dlg类头文件声明一个long型变量,用来保存用户单击的记录在列表控件的位置为列表,该变量定义在dlg的类内。

//控件的NM_CLICK消息添加消息处理函数(即双击资源框里的list constrol控件就会生成)

void CMy1Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 

{

long pos = m_Grid.GetSelectionMark();

m_ID = m_Grid.GetItemText(pos,0);

m_Name = m_Grid.GetItemText(pos,1);

m_Sex = m_Grid.GetItemText(pos,2);

m_Culture = m_Grid.GetItemText(pos,3);

UpdateData(FALSE);

*pResult = 0;

}

//修改数据功能

void CMy1Dlg::OnButton2() 

{

UpdateData(TRUE);

if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Sex.IsEmpty() || m_Culture.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_Culture);

m_pRecordset->Update();

ExitConnect();

}

catch(...)

{

MessageBox("操作失败");

return;

}

MessageBox("修改成功");

m_Grid.DeleteAllItems();

AddToGrid();

}

//删除数据功能

void CMy1Dlg::OnButton3() 

{

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();

}

//清除功能

void CMy1Dlg::OnButton4() 

{

m_ID = "";

m_Name = "";

m_Sex = "";

m_Culture = "";

UpdateData(FALSE);

}




本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/archive/2013/01/06/2848356.html,如需转载请自行联系原作者

相关文章
|
12天前
|
存储 安全 搜索推荐
酒店管理系统的数据库的应用以及选择
酒店管理系统数据库关乎运营效率和服务质量。数据库用于数据存储、管理、分析及客户关系管理,确保房态与预订精准。选择时重视性能稳定性、数据安全、易用性、可扩展性和成本效益。合适的数据库能提升酒店运营效率并优化客户体验。
21 2
|
1月前
|
存储 监控 关系型数据库
数据库核心术语解析与应用
数据库核心术语解析与应用
61 0
|
1月前
|
存储 运维 关系型数据库
数据的力量:构筑现代大型网站之数据库基础与应用
数据的力量:构筑现代大型网站之数据库基础与应用
49 0
|
2天前
|
SQL 存储 关系型数据库
数据库开发之图形化工具以及表操作的详细解析
数据库开发之图形化工具以及表操作的详细解析
16 0
|
2天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
10 0
|
7天前
|
存储 数据库连接 数据处理
NumPy与数据库的结合应用探索
【4月更文挑战第17天】本文探讨了NumPy与数据库结合在数据处理和分析中的应用,阐述了结合使用的必要性,包括数据提取、转换、处理与分析及结果存储。通过Python数据库连接库提取数据,转化为NumPy数组进行高效计算,适用于金融等领域的数据分析。结合应用的优势在于高效性、灵活性和可扩展性,但也面临数据转换、性能优化和安全性挑战。
|
14天前
|
存储 传感器 监控
数据库的应用
数据库广泛应用于电子商务、物流、酒店管理、医疗、航空、教育、政府和物联网等领域,用于高效存储和管理商品信息、订单数据、医疗记录、航班详情等各类数据,提升效率和服务质量。随着技术进步,其应用场景将持续扩展。
11 1
|
21天前
|
NoSQL 大数据 数据挖掘
现代数据库技术与大数据应用
随着信息时代的到来,数据量呈指数级增长,对数据库技术提出了前所未有的挑战。本文将介绍现代数据库技术在处理大数据应用中的重要性,并探讨了一些流行的数据库解决方案及其在实际应用中的优势。
|
1月前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。
|
1月前
|
前端开发 Java 数据库
基于Springboot的漫画网站22(程序+数据库+论文)可帮忙远程调试
基于Springboot的漫画网站22(程序+数据库+论文)可帮忙远程调试

热门文章

最新文章