MFC_如何连接Access数据库_读取出的数据显示在树上

本文介绍如何使用ADO在C++应用程序中连接Access数据库,并提供了一个具体的示例,展示如何通过递归方式遍历数据库中的层级数据。

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

第一部分:如何建立连接

1. stdafx.h中添加:

#import "c:\Program Files\\Common Files\\System\\ado\\msado15.dll" re_namespace ADODB \
rename("EOF","ADOEOF")
using namespace ADODB;
2. 在当前应用的cpp里定义(和theApp的定义放一起):

_ConnectionPtr m_pCon;
_RecordsetPtr m_pRecord;

3. 在当前应用的cpp里的InitInstance()里:

AfxOleInit(); //初始化COM
 
 m_pCon.CreateInstance("ADODB.Connection");
 m_pRecord.CreateInstance("ADBDB.Recordset");
 
 try
 {
  m_pCon->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=医药管理.mdb;Persist Security Info=False"; //这里表示当前目录下的“医药管理.mdb“
  m_pCon->Open("","","",-1);
 }
 catch(...)
 {
  AfxMessageBox("数据库连接失败.",0,0);
 }

第二部分:如何使用连接

这里会用到m_pCon和m_pRecord两个变量,设置为外部引用

1. 在使用的类中(如:dialog类中)先定义一个方法FindNode

/*************************************************************
功能描述: 利用递归遍历父节点下的所有子节点

  参数说明: h_parent标识父节点句柄,str标识父节点文本
*************************************************************/
void CConnAccessDBDlg::FindNode(HTREEITEM h_parent, CString str)
{
 _ConnectionPtr tempcon;
 _RecordsetPtr temprecord;
 
 tempcon.CreateInstance("ADODB.connection");
 temprecord.CreateInstance("ADODB.recordset");
 
 tempcon->ConnectionString = m_pCon->ConnectionString;
 tempcon->Open("","","",-1);
 
 CString sql;
 sql.Format("select * from leechdomkind where parenttype = '%s'",str);
 temprecord = tempcon->Execute((_bstr_t)sql,0,adCmdText);
 CString name;
 HTREEITEM h_temp;
 while (! temprecord->ADOEOF)
 {
  
  name =(TCHAR*)(_bstr_t) temprecord->GetFields()->GetItem("leechdomtype")->Value;
  h_temp = m_treectrl.InsertItem(name,0,1,h_parent);
  FindNode(h_temp,name);
  temprecord->MoveNext();
 }
 
}

2. 使用

 h_root = m_treectrl.InsertItem("医药管理",0,1);

 CString str;
 //查询父类药品名称
 m_pRecord = m_pCon->Execute("select * from leechdomkind where parenttype is null",0,adCmdText); //m_pRecord为多个记录,下面的while就是遍历出所有的记录
 
 HTREEITEM h_parent;
 while (! m_pRecord->ADOEOF)
 {
  str = (TCHAR*)(_bstr_t)m_pRecord->GetFields()->GetItem("leechdomtype")->Value;
  h_parent = m_treectrl.InsertItem(str,0,1,h_root);
  //将所有子节点添加到父节点下
  FindNode(h_parent,str); //找出当前节点下的所有字段
  m_pRecord->MoveNext();
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值