MFC连接Access

1. 导入dll,使用命名空间。


a.在stdafx.h里加入如下语句:

#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF","adoEOF"), rename("BOF","adoBOF")



b.在需要使用的文件里使用命名空间

using namespace ADODB;



c.在使用之前加上

CoInitialize(NULL);

使其初始化。否则提示空指针错误。

2. 连接。

a.新建一个_ConnectionPtr类型的变量

m_conn.CreateInstance(__uuidof(Connection));

b.connStr连接字符串书写:

?
//03使用
//conStr = _T("Provider=Microsoft.Jet.OLEDB.4.0;")
//   _T("Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;")
//   _T("Jet OLEDB:Database Password=");
     
//07
     conStr = _T( "Provider=Microsoft.ACE.OLEDB.12.0;" )
     _T( "Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;" )
     _T( "Jet OLEDB:Database Password=" );

  

c.调用Open函数,

m_conn->Open(connStr,"","",-1);



3. 查询并返回结果。

建立一个结果集变量

_RecordsetPtr Ptr = NULL;
Ptr.CreateInstance(__uuidof(Recordset));

构造sql语句:

CString sql = _T("SELECT* FROM GroupManage");
_bstr_t sqlToExecute = sql;//可直接转换!

执行sql语句:

Ptr = m_conn->Execute(sqlToExecute,NULL,adCmdText);

从结果集取数据:

_variant_t roader;
roader = Ptr->GetCollect(_T("gName"));

4. 关闭连接

m_conn.Close();

5. 需要注意的几个地方:


1. 连接与查询都需要使用try...catch...结构。
2. 错误信息的可以用MessageBox打印出来,代码如下:
3. Group是数据库保留的关键字,用来当表名的话会导致IDispatch error #3092的错误。

 

一个完整的过程如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//连接
  CString conStr;
 
  //03使用
  //conStr = _T("Provider=Microsoft.Jet.OLEDB.4.0;")
  //       _T("Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;")
  //       _T("Jet OLEDB:Database Password=");
  
  //07
  conStr = _T( "Provider=Microsoft.ACE.OLEDB.12.0;" )
           _T( "Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;" )
           _T( "Jet OLEDB:Database Password=" );
 
  try
  {
      m_conn.CreateInstance(__uuidof(Connection));
      _bstr_t conStr_=conStr;
      m_conn->Open(conStr_, "" , "" ,-1);
  }
  catch (_com_error& e)
  {
 
      CString errormessage;
      errormessage.Format(_T( "连接StatusT.mdb数据库失败!\r\n错误信息:%s" ),e.ErrorMessage());
      MessageBox(errormessage);
      return ;
  }
 
  //查询
  CString sql = _T( "SELECT* FROM GroupManage" );
  _bstr_t sqlToExecute = sql;
 
  //1.新建结果集,并将其值赋为空
  _RecordsetPtr Ptr = NULL;
 
  //2.try...catch...结构来进行读取数据
  try
  {
      Ptr.CreateInstance(__uuidof(Recordset));
      Ptr = m_conn->Execute(sqlToExecute,NULL,adCmdText);
      _variant_t roader;
      while (!Ptr->adoEOF) //读取gName字段,并依次弹出MsgBox显示
      {
          roader = Ptr->GetCollect(_T( "gName" ));
          if (roader.vt != VT_NULL)
          {
              MessageBox(( LPCTSTR )(_bstr_t)roader);
          }
          Ptr->MoveNext();
      }
      Ptr->Close();
  }
  catch (_com_error& e)
  {
      CString errorMsg;
      errorMsg.Format(_T( "错误信息是:%s" ),e.ErrorMessage());
      MessageBox(errorMsg);
      return ;
  }
 
  //关闭连接
  m_conn->Close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值