MFC连接Access

来源:互联网 发布:python零基础书籍 编辑:程序博客网 时间:2024/05/16 04:46

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();
原创粉丝点击