乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      VC++ ADO連接ACCESS詳解

       啟蒙彩魂 2011-01-11
      VC++ ADO連接ACCESS詳解

      ·幻想~@@~ 發(fā)表于 2007-9-2 22:15:00

      數(shù)據(jù)庫下載

      第一、配置數(shù)據(jù)源

      控制面板 -> 管理工具 ->數(shù)據(jù)源(ODBC)

       

      為什么要設(shè)置數(shù)據(jù)源?

      設(shè)置數(shù)據(jù)源的目的是為了我們的程序可以很好的訪問數(shù)據(jù)庫資源。

      第二、代碼及解析:(建議運(yùn)行一下,這個(gè)代碼)

       #i nclude <iostream.h>
      #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")
      //ADO連接數(shù)據(jù)庫所需的dll,編譯的時(shí)候系統(tǒng)會(huì)為我們生成msado15.tlh,ado15.tli兩個(gè)C++頭文件來定義ADO庫
      //注意這里的import一定要放在一行

      int main(){

          //該程序使用ADO連接ACCESS(裝office的時(shí)候里面有)數(shù)據(jù)庫 后綴為.mdb 運(yùn)行平臺(tái)vc6.0
       //2003平臺(tái)在寫著
          //---------------------------------------------------------------------------------
         
       //ADO數(shù)據(jù)庫連接分五步走,
       //第一、獲取連接(只到數(shù)據(jù)庫在什么地方)
       //第二、打開連接 open(必要的用戶名和密碼)
       //第三、獲取字符集 ResultSet(類似數(shù)組的數(shù)據(jù)存儲(chǔ)對(duì)象),
       //第四、顯示數(shù)據(jù)
       //第五、關(guān)閉數(shù)據(jù)集、關(guān)閉連接

       
       //創(chuàng)建個(gè)連接對(duì)象

       _ConnectionPtr m_pConnection;

          //對(duì)連接進(jìn)行初始化
       CoInitialize(NULL);

       //---------------------------------------------------------------------------------
          //第一步、獲取連接
       //---------------------------------------------------------------------------------

       //同過連接(Connection)創(chuàng)建并獲取一個(gè)數(shù)據(jù)庫連接實(shí)例,
       //也可以把他看成句柄(電影門票)有里他就有資格使用數(shù)據(jù)庫里的資源了 呵呵

          m_pConnection.CreateInstance(__uuidof(Connection));

          // 又于在數(shù)據(jù)庫連接的時(shí)候有有可能會(huì)出現(xiàn)錯(cuò)誤,比如數(shù)據(jù)源設(shè)置或用戶名 密碼錯(cuò)誤等
       //所以使用try{....}catch(){...}捕獲try{}里的異常(錯(cuò)誤)
       //并把這些異常放到_com_error e 這個(gè)變量里,我們可以同過他獲取錯(cuò)誤的信息
       //并且,在出錯(cuò)的時(shí)候程序一定回運(yùn)行catch(){....}里的東西,我們看到如果連接錯(cuò)誤的時(shí)候
       //會(huì)執(zhí)行cout<<"數(shù)據(jù)庫連接失敗,確認(rèn)數(shù)據(jù)庫mydb.mdb是否在當(dāng)前路徑下!"<<endl;
          //       return FALSE;  之后推出程序 。如果不加try的話可以在程序出錯(cuò)的時(shí)候造成死機(jī)
       //所以,try也可以看成一種出錯(cuò)的處理(異常處理)

          try               
          {   //---------------------------------------------------------------------------------
              //第二步、打開連接  參數(shù)用 ; 分開
            //---------------------------------------------------------------------------------
        
        //第一個(gè)是Provider=Microsoft.Jet.OLEDB.4.0; access的廠商
        //Data Source=mydb.mdb","","",adModeUnknown 數(shù)據(jù)庫名稱 , 用戶名(空) ,密碼(空), 缺省連接模式
        //對(duì)于該參數(shù):~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)
        /*adModeUnknown:缺省。當(dāng)前的許可權(quán)未設(shè)置
                adModeRead:只讀
                adModeWrite:只寫
                adModeReadWrite:可以讀寫
                adModeShareDenyRead:阻止其它Connection對(duì)象以讀權(quán)限打開連接
                adModeShareDenyWrite:阻止其它Connection對(duì)象以寫權(quán)限打開連接
                adModeShareExclusive:阻止其它Connection對(duì)象打開連接
                adModeShareDenyNone:允許其它程序或?qū)ο笠匀魏螜?quán)限建立連接
               */
        //通過這個(gè)語句我們的數(shù)據(jù)庫連接真正得到實(shí)現(xiàn)了,m_pConnection有了內(nèi)容了(被附值了)

        m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=mydb.mdb","","",adModeUnknown);
            
          }
          catch(_com_error e) //捕捉異常
          {
              cout<<"數(shù)據(jù)庫連接失敗,確認(rèn)數(shù)據(jù)庫mydb.mdb是否在當(dāng)前路徑下!"<<endl;
              return FALSE;
          }

          //數(shù)據(jù)集對(duì)象
       _RecordsetPtr m_pRecordset;
          //實(shí)例化數(shù)據(jù)集
       m_pRecordset.CreateInstance(__uuidof(Recordset));

       //---------------------------------------------------------------------------------
       //第三步、獲取數(shù)據(jù)集
       //---------------------------------------------------------------------------------

          //雖然,前面連接上了,但連接的這個(gè)數(shù)據(jù)庫里是不是有數(shù)據(jù)表(test表)還不能確定
       //所以,這里同樣要捕獲可能出現(xiàn)的錯(cuò)誤
       try
          {  
              m_pRecordset->Open("SELECT * FROM test",   //是數(shù)據(jù)查詢字符串(即所謂的SQL語句)
                                                                                                 //通常這些語句分為 數(shù)據(jù)的查詢(select),插入(insert)
                                                                                                  //更新(update),刪除(delect)
                                                                                                 //是否能執(zhí)行這個(gè)命令是由前面(1)確定的
             
           m_pConnection.GetInterfacePtr(),        // 獲取庫接庫的IDispatch指針
             
        adOpenDynamic,                          //動(dòng)態(tài)光標(biāo)。所有數(shù)據(jù)庫的操作都會(huì)立即在各用戶記錄集上反應(yīng)出來
             
        adLockOptimistic,                       //樂觀鎖定方式。只有在你調(diào)用Update方法時(shí)才鎖定記錄。在此之
                                                //前仍然可以做數(shù)據(jù)的更新、插入、刪除等動(dòng)作

             
           adCmdText);                             //查詢出來的數(shù)據(jù)是顯示在控制臺(tái)里的
          }
          catch(_com_error *e)
          {
              cout<<e->ErrorMessage()<<endl;
          }  

          _variant_t var;
          char *ID,*name;
        
          try//得到表,但表里不一定有數(shù)據(jù)
          {
              if(!m_pRecordset->BOF) //數(shù)據(jù)表里是是有數(shù)據(jù)
                  m_pRecordset->MoveFirst(); //將游標(biāo)(數(shù)據(jù)集在數(shù)據(jù)庫的叫法)移動(dòng)到一第一條記錄
              else {
                  cout<<"表內(nèi)數(shù)據(jù)為空"<<endl;
                  return 1;
              }


               //--------------------------------------------------------------------------------------------------------------------------
              // 第四步、顯示數(shù)據(jù)
              //---------------------------------------------------------------------------------------------------------------------------
       

            while(!m_pRecordset->adoEOF) //和前面的rename ("EOF", "adoEOF") 想對(duì)應(yīng) 這里使用的是
                                 //adoEOF代替EOF (當(dāng)然這里如果前面沒有rename也可以使用EOF)
               //判斷游標(biāo)是不是到達(dá)最后一條數(shù)據(jù)
              {
                  var = m_pRecordset->GetCollect("ID"); //這是獲取表中字段的一種方法“ID”為表字段名
                  if(var.vt != VT_NULL)                //判斷記錄在該有沒數(shù)據(jù)
                      ID= _com_util::ConvertBSTRToString((_bstr_t)var); //由于得到的數(shù)據(jù)可能不是字符傳 這里要轉(zhuǎn)換
                                                             //將他們轉(zhuǎn)成字符串,從而可以在屏幕上顯示

                 
         var = m_pRecordset->GetCollect("name");
                  if(var.vt != VT_NULL)
                      name=_com_util::ConvertBSTRToString((_bstr_t)var);

                  cout<<ID<<" is "<<name<<endl;             //打印該記錄
            
                  m_pRecordset->MoveNext();                 //游標(biāo)向走向下條記錄
              }
          }
          catch(_com_error *e) //捕獲異常
          {
              cout<<e->ErrorMessage()<<endl; //如有錯(cuò)誤 ,將錯(cuò)誤輸出
          }
          //--------------------------------------------------------------------------------------
          //關(guān)閉數(shù)據(jù)集
       //-----------------------------------------------------------------------------------

          m_pRecordset->Close();
          m_pRecordset = NULL;  
        
       //--------------------------------------------------------------------------------------
          //關(guān)閉數(shù)據(jù)庫連接
          //--------------------------------------------------------------------------------------
          if(m_pConnection->State)
          m_pConnection->Close();
          m_pConnection= NULL;

       //這兩步是一定要做的,否則時(shí)間長(zhǎng)內(nèi)存可能會(huì)被用盡
          return 0;
      }

       

      ·閱讀全文(5837) | 回復(fù)(9) | 引用通告(0) | 編輯

    • 標(biāo)簽:ADO連接ACCESS詳解 
    •   Re:VC++ ADO連接ACCESS詳解

      ·訪客w06Evi(游客)發(fā)表評(píng)論于2009-8-21 12:12:28

      訪客w06Evi(游客)這是ODBC連接吧,ADO是不需要你這樣先配置數(shù)據(jù)源的.

      ·個(gè)人主頁 | 引用 | 返回 | 刪除 | 回復(fù)

        Re:VC++ ADO連接ACCESS詳解

      ·訪客0FVh8L(游客)發(fā)表評(píng)論于2009-5-9 12:41:00

      訪客0FVh8L(游客)CoInitialize(NULL);
      CString sql=_T("select * from Table");
      CString strPath=_T("provider =Microsoft.jet.oledb.4.0;data Source=port.mdb");
      _ConnectionPtr pCon;
      _RecordsetPtr pRes;
      try
      {
      pCon.CreateInstance("ADODB.Connection");
      HRESULT hr= pCon->Open((_bstr_t)strPath,"","",adModeUnknown);//運(yùn)行到這就出錯(cuò),為什么呢??希望給講解一下
      if (FAILED(hr))
      {
      MessageBox(_T(" connection error"));
      pRes->Close();
      pCon->Close();
      return;
      }
      pRes.CreateInstance("ADODB.Recordset");
      hr=pRes->Open((_variant_t) sql,pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
      if (FAILED(hr))
      {
      MessageBox(_T("open recordset error"));
      pRes->Close();
      pCon->Close();
      return;
      }
      }
      catch (_com_error *e)
      {
      MessageBox(e->ErrorMessage());
      pRes->Close();
      pCon->Close();
      }
      pRes->MoveFirst();
      while(pRes->adoEOF)
      {
      _variant_t vDk=pRes->Fields->GetItem("dk")->Value;
      vDk.ChangeType(VT_BSTR);
      CString strDk=vDk.bstrVal;
      int pos=strDk.Find('/');
      CString dk=strDk.Left(pos);
      CString lx=strDk.Right(pos);
      MessageBox(dk);
      }

      pRes->Close();
      pCon->Close();
      OnOK();

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多