• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

直接通过DAO读写Access文件

mysql 搞代码 4年前 (2022-01-09) 26次浏览 已收录 0个评论

直接 利用DAO来创建、读写Access 文件 ,总的说来,对比上篇《 直接 通过 ODBC读、写Excel 文件 》来讲,要简单一些。在下面的示例中,我们将用到两种方法:SQL和DAO类函数来混合实现它们,这样做的目地,我想可以使大家更加方便灵活的运用它们来完成你想要

直接利用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);
  sPa本文来源gao@daima#com搞(%代@#码网th.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();
}
以上部分代码的具体实现的细节问题,可在下载实例代码后,仔细查看源码既可(内有详细注释)。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:直接通过DAO读写Access文件
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址