程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用ADO編寫數據庫應用程序

使用ADO編寫數據庫應用程序

編輯:關於C語言

使用DAO   
4.1    概述
Visual C++提供了對DAO的封裝,MFC DAO類封裝了DAO(數據庫訪問對象)的大部分功能,從面Visual C++程序就可以使用Visual C++提供的MFC DAO類方便的訪問Microsoft Jet 數據庫,編制簡潔、有Visaul C++特色的數據庫應用程序。
數據庫訪問對象(DAO)提供了一種通過程序代碼創建和操縱數據庫的機制。多個DAO對象構成一個體系結構,在這個結構裡,各個DAO對象協同工作。DAO支持以下四個數據庫選項:
1、 打開訪問數據庫(MDB文件)——MDB文件是一個自包含的數據庫,它包括查詢定義、安全信息、索引、關系,當然還有實際的數據表。用戶只須指定MDB文件的路徑名。
2、 直接打開ODBC數據源——這裡有一個很重要的限制。不能找開以Jet引擎作為驅動程序的ODBC數據源;只可以使用具有自己的ODBC驅動程序DLL的數據源。
3、 用Jet引擎找開ISAM型(索引順序訪問方法)數據源(包括dBase,FoxPro,Paradox,Btrieve,Excel或文本文件)——即使已經設置了ODBC數據源,要用Jet引擎來訪問這些文件類型中的一種,也必須以ISAM型數據源的方式來找開文件,而不是以ODBC數據源的方式。
4、 給ACCESS數據庫附加外部表——這實際上是用DAO訪問ODBC數據源的首選方法。首先使用ACCESS把ODBC表添加到一個MDB文件上,然後依照第一選項中介紹的方法用DAO找開這個MDB文件就可以了。用戶也可以用ACCESS把IASM文件附加到一個MDB文件上。
4.2    應用DAO編程
4.21    打開數據庫
CDaoWorkspace對象代表一個DAO Workspace對象,在MFC DAO體系結構中處於最高處,定義了一個用戶的同數據庫的會話,並包含打開的數據庫,負責完成數據庫的事務處理。我們可以使用隱含的workspace對象。
CDaoDatabase對象代表了一個到數據庫的連接,在MFC中,是通過CDaoDatabase封裝的。
在構造CDaoDatabase對象時,有如下兩種方法:
1、 創建一個CDaoDatabase對象,並向其傳遞一個指向一個已經找開的CdaoWorkspace對象的指針。
2、 創建一個CDaoDatabase對象,而不明確地指定使用的workspace,此時,MFC將創建一個新的臨時的CDaoWorkspace對象。
如下代碼所示:
CDaoDatabase  db;
db.Open(“test.mdb”,FALSE,FALSE,_T(“”);
其中參數一包括要打開的文件的全路徑名。
4.22    查詢記錄
一個DAO recordset對象,代表一個數據記錄的集合,該集合是一個庫表或者是一個查詢的運行結果中的全部記錄。CDaoRecorset對象有三種類型:表、動態集、快照。
通常情況下,我們在應用程序中可以使用CDaoRecordset的導出類,這一般是通過ClassWizard或AppWizard來生成的。但我們也可以直接使用CDaoRecordset類生成的對象。此時,我們可以動態地綁定recordset對象的數據成員。
如下代碼所示:
COleVariant var;
long id;
CString str;
CDaoRecordset m_Set(&db);
m_Set.Open(“查詢的SQL語句”);
while(!m_Set.IsEOF())
{
/*
      處理
      m_Set.GetFieldValue(“ID”,var);
      id=V_I4(var);
      m_Set.GetFieldValue(“Name”,var);
      str=var.pbVal;
*/
    m_Set.MoveNext();
}
m_Set.Close();
4.23    添加記錄
添加記錄用AddNew函數,此時用SetFieldValue來進行賦值。
如下代碼所示:
        m_pDaoRecordset->AddNew ();
        sprintf(strValue,"%s",>m_UserName  );
        m_pDaoRecordset->SetFieldValue ("UserName",strValue);
        sprintf(strValue,"%d",m_PointId  );
        m_pDaoRecordset->SetFieldValue ("PointId",strValue);
dataSrc.SetDateTime (m_UpdateTime .GetYear ),m_UpdateTime .GetMonth ),m_UpdateTime .GetDay (),
        m_UpdateTime .GetHour (),m_UpdateTime .GetMinute (),m_UpdateTime .GetSecond ());
        valValue=dataSrc;
        m_pDaoRecordset->SetFieldValue ("UpdateTime",valValue);
        sprintf(strValue,"%f",m_pRecordset->m_OldValue  );
        m_pDaoRecordset->SetFieldValue ("OldValue",strValue);
        sprintf(strValue,"%f",m_pRecordset->m_NewValue );
        m_pDaoRecordset->SetFieldValue ("NewValue",strValue);
        m_pDaoRecordset->Update ();
此時,要注意,日期時間型數據要用SetDataTime函數來賦值,這裡面要用到COleVariant類型數據,具體用法可以參考有關幫助。
4.24    修改記錄
修改記錄用Edit()函數,把記錄定位到要修改的位置,調用Edit函數,修改完成後,調用Update函數。
如下代碼所示:
m_Set.Edit();
m_Set.SetFieldValue(“列名”,”字符串”);
m_Set.Update();
4.25    刪除記錄
刪除記錄用Delete()函數,使用後不需調用Update()函數。
4.26    統計記錄
可以使用如下代碼來統計記錄數:
    COleVariant varValue;
    CDaoRecordset m_Set(&db);
    m_Set.Open(dbOpenDynaset,”SQL語句”);
    varValue=m_Set.GetFieldValue(0);
    m_lMaxCount=V_I4(&varValue);
    m_Set.Close();
如果是統計一張表中總記錄,可以使用CDaoTableDef對象,如下代碼所示:
    CDaoTableDef m_Set(&gUseDB);
  Count=m_Set.GetRecordCount();
  m_Set.Close();
不能用CDaoRecordset對象的GetRecordCount()來取得記錄數。
4.3    總結
使用DAO技術可以便我們方便的訪問Microsoft Jet引擎數據庫,由於Microsoft Jet不支持多線程,因此,必須限制調用到應用程序主線程的所有DAO。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved