C++ 操作Office的Access數據庫

    與我的另外一篇文章相呼應,在那片文章裏面,使用的是C++ 操作xml的方法。下面的代碼是操作一個access數據庫的範例:

     CoInitialize(NULL);
    //定義兩個對象指針。
    _ConnectionPtr m_pConnection_circle;
    _RecordsetPtr m_pRecordset_circle;
    _ConnectionPtr m_pConnection_rectangle;
    _RecordsetPtr m_pRecordset_rectangle;
    m_pConnection_circle.CreateInstance(__uuidof(Connection));//創建對象。
    m_pRecordset_circle.CreateInstance(__uuidof(Recordset));
    m_pConnection_rectangle.CreateInstance(__uuidof(Connection));
    m_pRecordset_rectangle.CreateInstance(__uuidof(Recordset));
    //連接數據庫。
    try
    {
        m_pConnection_circle->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\testADOproj\\Database4.mdb;Persist Security Info=False"), _T(""), _T(""),adModeUnknown);
        m_pConnection_rectangle->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\testADOproj\\Database3.mdb;Persist Security Info=False"), _T(""), _T(""),adModeUnknown);
    }
    catch(_com_error e)
    {
        AfxMessageBox(e.ErrorMessage());
        CString errorSee="連接數據庫出錯。";
        AfxMessageBox(errorSee);
    }
    //利用connection對象的excute函數執行SQL命令。執行完之後返回一個指向記錄集Recordset的指針。
    //執行語句:在表circle中選擇ID的全部
    try
    {
        CString strSql= _T("select * from Circle where ID>0");//注意字段的數據類型
        m_pRecordset_circle->Open((LPCTSTR)strSql, (IDispatch*)m_pConnection_circle, adOpenStatic, adLockOptimistic, adCmdUnknown);
        CString strSql2= _T("select * from rectangle1 where pc_ID>0");//注意字段的數據類型
        m_pRecordset_rectangle->Open((LPCTSTR)strSql2, (IDispatch*)m_pConnection_rectangle, adOpenStatic, adLockOptimistic, adCmdUnknown);
    }
    catch(_com_error e2)
    {
        CString errorSee2= "SQL語句執行出錯!";
        AfxMessageBox(errorSee2);
        AfxMessageBox(e2.ErrorMessage());
    }
    //將獲得的數據放到tree中節點。
    while(!m_pRecordset_circle->adoEOF)
    {
        _bstr_t circle_radius = m_pRecordset_circle->Fields->GetItem("CircleRadius")->Value;
        //AfxMessageBox(circle_radius);
        addtoItem(circle_radius);
        m_pRecordset_circle->MoveNext();
    }
    
    while (!m_pRecordset_rectangle->adoEOF)
    {
        _bstr_t rec_long = m_pRecordset_rectangle->Fields->GetItem("rec_long")->Value;
        _bstr_t rec_wigth = m_pRecordset_rectangle->Fields->GetItem("rec_weight")->Value;
        //AfxMessageBox(rec_long);
        //AfxMessageBox(rec_wigth);
        addtoItem(rec_long,rec_wigth);
        m_pRecordset_rectangle->MoveNext();
    }
    m_pRecordset_circle->Close();//關閉記錄集指針。
    m_pConnection_circle->Close();//關閉連接對象指針。
    m_pRecordset_rectangle->Close();//關閉記錄集指針。
    m_pConnection_rectangle->Close();//關閉連接對象指針。
    m_pRecordset_circle = NULL;
    m_pConnection_circle = NULL; 
    m_pRecordset_rectangle = NULL;
    m_pConnection_rectangle = NULL; 
    
    if((m_pRecordset_circle==NULL)&&(m_pConnection_circle = NULL)&&(m_pRecordset_rectangle==NULL)&&(m_pConnection_rectangle = NULL))
    {
        CoUninitialize();//釋放COM資源。
        return TRUE;
    }
    else
    {
        m_pRecordset_circle = NULL;
        m_pConnection_circle = NULL; 
        m_pRecordset_rectangle = NULL;
        m_pConnection_rectangle = NULL; 
        CoUninitialize();//釋放COM資源。
        return TRUE;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章