您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> ACCESS >> 辅导 >> 正文    
  直接通过DAO读写Access文件 【注册男护士专用博客】          

直接通过DAO读写Access文件

www.nanhushi.com     佚名   不详 

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

直接通过DAO读写Access文件(图一)  

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

  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();
}
以上部分代码的具体实现的细节问题,可在下载实例代码后,仔细查看源码既可(内有详细注释)。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。