ITPub博客

首页 > 数据库 > 数据库开发技术 > 直接通过DAO读、写Access文件 (转)

直接通过DAO读、写Access文件 (转)

原创 数据库开发技术 作者:worldblog 时间:2007-12-12 14:00:34 0 删除 编辑
直接通过DAO读、写Access文件 (转)[@more@] 

直接通过DAO读、写Access文件

作者:徐景周

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

 

下载示例源码(http://www.copathway.com/itbookreview/view_paper.ASP?paper_id=383)

 

  直接利用DAO来创建、读写Access文件,总的说来,对比上篇<直接通过OdbC读、写excel文件>来讲,要简单一些。在下面的示例中,我们将用到两种方法:sql和DAO类涵数来混合实现它们,这样做的目地,我想可以使大家更加方便灵活的运用它们来完成你想要做的东西。在示例程序中默认指定创建数据库名为:Demo.mdb,内部表名为:DemoTable,写入两个字段:名字和年龄,采用和上一篇读写Excel类似的操作,你也可以根据自己需要来动态改变它们。示例程序运行界面如下所示:

 

下面让我们来简要看看它的实现步骤:

1.  首先,应确保包含进了afxdao.h头文件,可以在StdAfx.h文件中包含它,如下:

#include     //加入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();

}

 

 

以上部分代码的具体实现的细节问题,可在下载实例代码后,仔细查看源码既可(内有详细注释)。

 

联系方式:

地址:陕西省西安市劳动路2号院六单元

邮编:710082

作者EMail.NET">jingzhou_xu@163.net

未来工作室(Future Studio)

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992074/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2411235