程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 直接通過DAO讀寫Access文件

直接通過DAO讀寫Access文件

編輯:關於VC++

直接利用DAO來創建、讀寫Access文件,總的說來,對比上篇《直接通過ODBC讀、寫Excel文件》來講,要簡單一些。在下面的示例中,我們將用到兩種方法:SQL和DAO類函數來混合實現它們,這樣做的目地,我想可以使大家更加方便靈活的運用它們來完成你想要做的東西。在示例程序中默認指定創建數據庫名為:Demo.mdb,內部表名為:DemoTable,寫入兩個字段:名字和年齡,采用和上一篇讀寫Excel類似的操作,你也可以根據自己需要來動態改變它們。示例程序運行界面如下所示:

下面讓我們來簡要看看它的實現步驟:

1. 首先,應確保包含進了afxdao.h頭文件,可以在StdAfx.h文件中包含它,如下:

#include <afxdao.h>         //加入DAO數據庫支持

2. 聲明DAO庫及其記錄集變量,可在你的實現文件中加入下面代碼: CDaoDatabase db;          //數據庫
CDaoRecordset RecSet(&db);    //記錄集
3. 接著,先讓我們來實現它的創建及寫入操作void CRWAccessDlg::OnWriteAccess()
{
  //獲取主程序所在路徑,存在sPath中
  CString sPath;
  GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
  sPath.ReleaseBuffer ();
  int nPos;
  nPos=sPath.ReverseFind (''\\'');
  sPath=sPath.Left (nPos);
  //默認創建數據名:Demo.mdb,內部表名:DemoTable,表內有二個字段:姓名、年齡
  CString lpszFile = sPath + "\\Demo.mdb";
  
  CFileFind fFind;
  BOOL bSuccess;
  bSuccess=fFind.FindFile(lpszFile);
  fFind.Close ();
  //是否已有創建好的Demo.mdb文件,沒有則創建它
  if(!bSuccess)
  {
    db.Create(lpszFile);
    CString SqlCmd = "CREATE TABLE DemoTable(Name VARCHAR(20),Age VARCHAR(3));";
    db.Execute(SqlCmd);
  
    //打開已創建的數據表
    RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,
      "SELECT * FROM DemoTable", 0);
    //加入第一個記錄,用SQL語句
    db.Execute("INSERT INTO DemoTable (Name,Age) VALUES (''徐景周'',26)");
    
    //加入第二個記錄,用DAO涵數
    RecSet.AddNew();
    RecSet.SetFieldValue("Name","徐志慧");
    RecSet.SetFieldValue("Age","21");
    RecSet.Update();
    
    //加入第三個記錄,用DAO涵數
    RecSet.AddNew();
    RecSet.SetFieldValue("Name","郭徽");
    RecSet.SetFieldValue("Age","27");
    RecSet.Update();
    
    //關閉記錄集及庫
    RecSet.Close();
    db.Close();
    AfxMessageBox("Access文件寫入成功!");
  }
  else
    AfxMessageBox("Demo.mdb數據庫已經創建!");
  
}
4. 最後,讓我們來實現它的讀取操作。void CRWAccessDlg::OnReadAccess()
{
  COleVariant var;    // 字段類型
  var.ChangeType(VT_BSTR, NULL);
  CString strName,strAge,strFile;
  //清空列表框
  m_AccessList.ResetContent();
  //獲取主程序所在路徑,存在sPath中
  CString sPath;
  GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
  sPath.ReleaseBuffer ();
  int nPos;
  nPos=sPath.ReverseFind (''\\'');
  sPath=sPath.Left (nPos);
  strFile = sPath + "\\demo.mdb";
  db.Open(strFile);    // 打開已創建的demo數據庫及DamoTable表
  RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DemoTable",NULL);
  while(!RecSet.IsEOF())  // 有沒有到表結尾
  {
    RecSet.GetFieldValue("Name",var);
    strName = (LPCSTR)var.pbstrVal;
    RecSet.GetFieldValue("Age",var);
    strAge = (LPCSTR)var.pbstrVal;
    m_AccessList.AddString( strName + " --> "+strAge );
    RecSet.MoveNext();
  }
  //關閉記錄集及庫
  RecSet.Close();
  db.Close();
}
以上部分代碼的具體實現的細節問題,可在下載實例代碼後,仔細查看源碼既可(內有詳細注釋)。

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