1. 程式人生 > >vs2012 MFC連線及操作access(2007)資料庫(ADO)

vs2012 MFC連線及操作access(2007)資料庫(ADO)

最近想寫個圖書管理軟體,用到了資料庫,但是由於是小白,弄了好半天才把資料庫搞明白。雖然網上有一些教程,但大多都是長長的文字敘述,所以想寫一個圖文版的連線教程並把這兩天的經驗記錄下來。

1、首先開啟access(本人用的是2007版本),新建一個空白的資料庫,並填入資訊,如下圖:


關閉此表,並重命名(例如test)。

2、開啟vs2012,新建一個mfc工程名為managetest,在視覺化介面中新增兩個Edit control 控制元件,用來顯示資料庫中的資訊,新增一個button按鈕,用來觸發。如下圖。


3、在標頭檔案stdafx.h中新增下面語句來支援ADO的元件型別庫

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace  rename ("EOF", "adoEOF1")//adoEOF可以改成別的,不同的專案裡面最好改成不一樣的。


ps:如果stdafx.h加載出錯,解決辦法 http://blog.csdn.net/lphbtm/article/details/50730807

4、切換到managetest.cpp中的BOOL CBookManageApp::InitInstance()函式中新增一下程式碼,用以初始化COM。

if(!AfxOleInit())
    {
        AfxMessageBox(_T("OLE初始化出錯!"));
        return FALSE;
    }

5、切換到managetestDlg.cpp,在步驟2中的按鈕控制元件的回撥函式中新增一下程式碼。

   _ConnectionPtr m_pConnection;//ConnectionPtr指標用於開啟、關閉一個庫連線或用它的

Execute方法來執行一個不返回結果的命令語句
    _RecordsetPtr m_pRecordset;//_RecordsetPtr智慧指標,可以用來開啟庫內資料表,並可以對錶內的記錄、欄位等進行各種操作
    CString csSQLstr;
    CString bookid;
    CString bookname;
     csSQLstr ="SELECT * FROM test";//test 為步驟一種資料庫新建的表名。
    try                 
    {
        m_pConnection.CreateInstance(__uuidof(Connection));//建立ADO連線
        m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Database1.accdb","","",adModeUnknown);   
        //將資料庫檔案放在與程式碼檔案相同的目錄下,data source的賦值即可寫成上面語句中的形式,

       //具體provider 與 data source的值可參考http://blog.csdn.net/u012388338/article/details/39393105
    }
    catch(_com_error e)
    {
        AfxMessageBox(_T("資料庫連線失敗,確認資料庫db.mdb是否在當前路徑下!"));
        return;
    }
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    try
    {
        m_pRecordset->Open((_bstr_t)csSQLstr,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText);

        //開啟一個記錄集(test表),通過這個記錄我們可以進行查詢,插入,刪除等操作。

    }
    catch(_com_error *e)
    {
        AfxMessageBox(e->ErrorMessage());
    }
    bookid=m_pRecordset->GetCollect("BookID");

       //得到test表中BookID的第一個值,這是由於開啟資料集後,指標在這個記錄集的開頭,

        //可以通過movefist,movelast,movenext操作移動指標位置,getcollect可以讀取記錄集中的資訊。
    bookname = m_pRecordset->GetCollect("BookName");
    SetDlgItemText(IDC_BookID,bookid); //將得到的資訊顯示在文字框中
    SetDlgItemText(IDC_BookName,bookname);
    m_pRecordset->Close();//關閉記錄集
    m_pRecordset = NULL;
    m_pConnection->Close();//斷開資料庫連線
    m_pConnection= NULL;

6、執行,點選顯示,得到結果


7、說明

本文只是簡單介紹了下mfc與access的連線及簡單操作。對於其中有些東西的解釋不是很完整,也沒有能力解釋,望見諒。

參考:

除文中提到的兩篇外,

http://blog.csdn.net/chaoguodong/article/details/7663877 mfc連線access資料庫 ,介紹了ADO的概念,新增庫的說明及ADO的操作程式碼

http://blog.sina.com.cn/s/blog_6da8e3ef0101fzyo.html   ADO操作ACCESS資料庫的一些心得

http://www.csdn123.com/html/itweb/20130826/81725_81723_81707.htm  MFC利用ADO連線ACCESS資料庫及其操作資料庫的方法,展示了插入,刪除等操作的詳細程式碼