DAO在MFC中的应用实例

数据库DAO3.6接口被废弃。在DAO不能使用之前,寻找出替代方案 问题 数据库DAO3.6接口被废弃。在DAO不能使用之前,寻找出替代方案。 写作时间 Zilu ZHENG 10/06/2020 摘要 本文详细解释了现有程序使用的数据库和接口。给出了解决这个问题的两大步骤,寻找与CDAO功能类似的库,更换底层的文件系统Access。但是现阶段无法找到与CDAO功能完全一致的库。ODBC接口无法完全覆盖CDAO的功能。ACEDAO接口可以覆盖CDAO,但需要函数方法的使用不一致需要转换,说明文档是VB,使用不方便。 环境描述 程序是C++程序,x86环境(未来不会升级x64 阅读详情

本文介绍使用MFC DAO访问数据库的一个实例,其中实例来源于网络。

 

 
实例同样实现了对数据库的基本操作:添加、修改、删除和遍历。与ODBC实例中不同的是,ODBC使用过程中添加了一个从CRecordset派生而来的CBook类,负责成员数据与数据表字段的关联,而本实例则是直接使用CDaoRecordset类。无论是使用ODBC还是DAO访问数据库都可以使用这两种方法,本实例采用后者来实现。

 

 

 

下面就来介绍这个实例的实现细节。

1) 定义数据库对象,并连接到指定数据库。

// 定义成员变量

        CDaoDatabase db ;

// 在主对话框初始化过程中连接数据库

        this->db.Open ( L"book.mdb", FALSE, FALSE, NULL ) ;

2) 添加记录功能实现如下。
void CDAOSampleDlg::OnBnClickedAdd()

{

      // 检测数据库是否已连接

      if(this->db.IsOpen () == FALSE )

     {

           this->MessageBox ( L"未连接数据库!" ) ;

           return ;

      }

      / / 定义记录集对象,打开记录集

      CDaoRecordset Record ( &this->db ) ;

      Record.Open ( dbOpenDynaset, L"SELECT * FROM BOOK" ) ;

      // 定义对话框对象,并设置为"添加"模式

      CMyDlg AddBookDlg ;

      AddBookDlg.SetMode ( TRUE ) ;

      if(AddBookDlg.DoModal() == IDOK )

     {

            // 使用CDaoRecordset::AddNew函数表明要开始添加新记录

            Record.AddNew () ;

            // 设置新记录Record.SetFieldValue ( 1, AddBookDlg.GetBookName().GetBuffer() ) ;

            Record.SetFieldValue ( 2, AddBookDlg.GetAuthor().GetBuffer() ) ;

            Record.SetFieldValue ( 3, AddBookDlg.GetPublish ().GetBuffer() ) ;

            CString szTempStr ;

            szTempStr.Format ( L"%d", AddBookDlg.GetPrice() ) ;

            Record.SetFieldValue ( 4, szTempStr.GetBuffer() ) ;

            // 只有在执行CDaoRecordset::Update函数后才会写入到数据库

            Record.Update () ;

            // 关闭记录集

            Record.Close () ;

            // 刷新界面列表控件数据显示

            this->OnBnClickedFlush () ;

     }

}
3) 修改记录功能实现如下。
 void CDAOSampleDlg::OnBnClickedModify()

{

      // 检测数据库是否已连接

      if(this->db.IsOpen () == FALSE )

      {

             this->MessageBox ( L"未连接数据库!" ) ;

             return ;

       }

      // 检测是否选择书目

      int nCurSel = this->BookList.GetNextItem ( -1,LVNI_SELECTED) ;

      if(nCurSel == -1 )

      {

              this->MessageBox ( L"没有选择书目!" ) ;

              return ;

       }

       // 定义记录集对象,并移动指针到指定位置

       CDaoRecordset Record ( &this->db ) ;

       Record.Open ( dbOpenDynaset, L"SELECT * FROM BOOK" ) ;

       Record.Move ( nCurSel ) ;

       // 定义对话框对象,并设置为"修改"模式

       CMyDlg ModBookDlg ;ModBookDlg.SetMode ( FALSE ) ;

       // 把当前记录信息设置到对话框

       COleVariant OleVariant ;

       Record.GetFieldValue ( 1, OleVariant ) ;

       ModBookDlg.SetBookName ( OleVariant.bstrVal ) ;

       Record.GetFieldValue ( 2, OleVariant ) ;

       ModBookDlg.SetAuthor ( OleVariant.bstrVal ) ;

       Record.GetFieldValue ( 3, OleVariant ) ;

       ModBookDlg.SetPublish ( OleVariant.bstrVal ) ;

       Record.GetFieldValue ( 4, OleVariant ) ;

       ModBookDlg.SetPrice ( OleVariant.uintVal ) ;

       if(ModBookDlg.DoModal () == IDOK )

      {

               // 使用CDaoRecordset::Edit函数表明要开始修改当前记录

               Record.Edit () ;

                // 修改当前记录成员

               Record.SetFieldValue ( 1, ModBookDlg.GetBookName().GetBuffe() ) ;

               Record.SetFieldValue ( 2, ModBookDlg.GetAuthor().GetBuffer() ) ;

               Record.SetFieldValue ( 3, ModBookDlg.GetPublish ().GetBuffer() ) ;

               CString szTempStr ;

               szTempStr.Format ( L"%d", ModBookDlg.GetPrice() ) ;

               Record.SetFieldValue ( 4, szTempStr.GetBuffer() ) ;

               // 只有在执行CDaoRecordset::Update函数后才会修改数据库记录

               Record.Update () ;

               // 关闭记录集

               Record.Close () ;

              // 刷新界面列表控件数据显示

               this->OnBnClickedFlush () ;

       }

}
 
4) 删除记录功能实现如下。
void CDAOSampleDlg::OnBnClickedDel()

{

       // 检测数据库是否已连接

       if(this->db.IsOpen () == FALSE )

      {

             this->MessageBox ( L"未连接数据库!" ) ;

             return ;

       }

       // 检测是否已选择书目

       int nCurSel = this->BookList.GetNextItem ( -1,LVNI_SELECTED) ;

       if(nCurSel == -1 )

       {

             this->MessageBox ( L"没有选择书目!" ) ;

             return ;

        }

       // 定义记录集对象,并移动指针到指定位置

       CDaoRecordset Record ( &this->db ) ;

       Record.Open ( dbOpenDynaset, L"SELECT * FROM BOOK" ) ;

       Record.Move ( nCurSel ) ;

       // 删除当前记录Record.Delete () ;

       // 关闭记录集Record.Close () ;

       // 刷新界面列表控件数据显示this->OnBnClickedFlush () ;

}   
 
5) 遍历记录功能实现如下。
void CDAOSampleDlg::OnBnClickedFlush()

{

       // 检测数据库是否已连接

       if(this->db.IsOpen () == FALSE )

      {

            this->MessageBox ( L"未连接数据库!" ) ;

            return ;

       }

       UINT nIndex = 0 ;

       CString TempStr ;

       COleVariant OleVariant ;

       // 删除列表控件所有记录

       this->BookList.DeleteAllItems () ;

       // 定义记录集对象,并打开记录集

       CDaoRecordset Record ( &this->db ) ;

       Record.Open ( dbOpenDynaset, L"SELECT * FROM BOOK" ) ;

       // 移动到第一条记录

       Record.MoveFirst () ;

       while( !Record.IsEOF() )

       {

               // 在列表控件添加记录

               TempStr.Format ( L"%d", nIndex+1 ) ;

               this->BookList.InsertItem ( nIndex, TempStr ) ;

               for(int i = 1; i <= 3; i++ )

              {

                      Record.GetFieldValue ( i, OleVariant ) ;

                      this->BookList.SetItemText ( nIndex, i, OleVariant.bstrVal ) ;

              }

              Record.GetFieldValue ( 4, OleVariant ) ;

              TempStr.Format ( L"%d", OleVariant.uintVal ) ;

               this->BookList.SetItemText ( nIndex, 4, TempStr ) ;

               // 移到下一条记录Record.MoveNext () ;nIndex++ ;

         }

        // 关闭记录集

        Record.Close () ;

}
6) 关闭数据库连接实现如下。
 this->db.Close ();

 

 

 

 

 

 

 

MFC DAO数据库编程  10.3 MFC DAO数据库编程DAO(Database Access Object,数据访问对象)使用Microsoft Jet数据库引擎来访问数据库。MFC DAO封装了DAO的大部分功能,可以很方便地使用Microsoft Jet引擎访问数据库。本节就来介绍如何使用MFC DAO开发数据库应用程序。10.3.1 MFC DAO概述DAO适用于单系统应用程序或小范围本地分布 阅读详情

相关推荐

深入理解MFC数据库编程:ODBC与DAO技术

本文深入探讨了MFC(Microsoft Foundation Classes)在数据库编程中的应用,特别是ODBC(Open Database Connectivity)和DAO(Data Access Objects)API的使用。通过实例分析,展示了如何利用MFC的文档/视图架构与ODBC和DAO包装类来创建一个地址簿应用程序,包括获取数据、更新应用程序变量、以及如何通过AppWizard简化开发过程。

weixin_36019375的博客 359

VC++ ADO开发实践之五

一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的

zswzwy的专栏 1807

MFC DAO编程函数一览

这是我自己总结的MFC DAO编程中,CDaoWorkspace CDaoDatabase CDaoTableDef CDaoQueryDef CDaoRecordset五个类的成员函数,比较全。

通过vc中的CDatabase类来直接通过ODBC读写Excel表格文件

CDatabase对象表示到数据源的连接,通过它可以操作数据源。数据源是位于一些数据库管理系统(DBMS)的数据的指定实例,包括MicrosoftSQLServer,MicrosoftAccess,BorlanddBASE和xBASE。在应用中可以同时使一个或多个CDatabase对象活动。 注意: 如果在处理数据访问对象(DAO)类而不是开放数据库连接(ODBC)类,可使用类CDaoData

ccx_john的专栏 4193

vc6程序:DAO控制本地MDB文件

DAO控制本地MDB文件,jet驱动,这应该是VC6最简单的连接本地数据库的方法了

演示如何用MFC和DAO(数据访问对象)写一个CGI扩展服务器,程序动

演示如何用MFC和DAO(数据访问对象)写一个CGI扩展服务器,程序动态生成一个网页显示数据库中的前三条记录(8KB)

CDaoDatabase操作access数据库

由于 CDaoDatabase对一些高版本的编译环境会发生4995警告,可以去除这种警告#pragma warning(disable : 4995)CDaoDatabase daoDataBase; daoDataBase.Open(_T("UploadInfor.mdb")); CDaoRecordset daoRecordset(&daoDataBase); daoRecordset

一个爱编程的人专栏 2775

DAO涉及模式实例,源码

DAO涉及模式实例,DAO涉及模式实例,DAO涉及模式实例

DAO简介(MFC)

1 DAO简介       DAO(数据访问对象)是一种应用程序编程接口(API),存在于微软的Visual Basic中,它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。在VC中,它是从Visual C++4.0版开始引入的。 2 D

MannHello的专栏 2235

mfc DAO连接access数据库

mfc DAO连接access数据库 可添加,删除记录!

【遥感数字图像处理(朱文泉)】第一章 数字图像基础

关于图像的定义、类型、模拟图像和数字图像

甜子yu的博客 4404

DAO在MFC中的应用实例 .

本文介绍使用MFC DAO访问数据库的一个实例,其中实例来源于网络。    实例同样实现了对数据库的基本操作:添加、修改、删除和遍历。与ODBC实例中不同的是,ODBC使用过程中添加了一个从CRecordset派生而来的CBook类,负责成员数据与数据表字段的关联,而本实例则是直接使用CDaoRecordset类。无论是使用ODBC还是DAO访问数据库都可以使用这两种方法,本实例采用后者来实现...

weixin_33704234的博客 142

深入CRSF协议数据包:手撕STM32代码,教你像调试串口一样分析ELRS遥控数据流

本文深入解析CRSF协议数据包,通过手撕STM32代码,教你如何像调试串口一样分析ELRS遥控数据流。从硬件准备到数据包捕获状态机设计,再到高级数据分析技巧和实战应用,全面覆盖CRSF协议的解析与优化,帮助开发者构建稳定可靠的通信系统。

weixin_29194693的博客 338

MFC中使用DAO来打开数据库

最近在学习MFC中数据库的使用,在之前写过一篇使用使用Access技术连接数据库。在这个项目中打开的是.mdb数据库文件。ODBC是数据库的连接接口,他不管连接是何种数据库,在程序运行过程中都会提供选定数据库的引擎。点击打开MDB文件后,选择要打开的MDB文件,然后显示数据库中的表,如图所示。这个例子的思路是:在文档类中打开数据库,并读取其中的数据,然后保存起来。这个例子中其中CDAOTestView继承于一个自定义的CRowView,这个CRowView的试图类是一个纯虚类,负责数据的处理和显示。

weixin_45144862的博客 1294

Ubuntu22.04系统安装及配置

下载Ubuntu22.04系统镜像(下载地址:链接:https://caiyun.139.com/m/i?提取码:fLRJ),结合rufus和系统镜像制作USB启动盘,在物理机服务器上通过USB启动盘进行安装;或通过Esxi虚拟化平台创建虚拟机,然后在虚拟机中使用系统镜像进行安装。

cheagoun的博客 8万+

Emotion-LLaMA实战指南:从零构建多模态情感识别系统(附Python代码)

本文提供了Emotion-LLaMA多模态情感识别系统的实战指南。通过详细的步骤,指导读者从零搭建开发环境、运行本地Demo、理解模型架构,并完成数据处理与模型训练。该创新模型融合视觉、听觉与文本信息,实现更精准、接近人类理解的情感分析与推理,并附有完整的Python代码实现。

weixin_29094775的博客 418

DAO and MFC

DAO and MFCThis article describes MFCs implementation of Microsoft Data Access Objects (DAO). Topics covered include: How MFC Encapsulates DAO Mapping of DAO objects to MFC classes

小发猫 1374

PyTorch复现EEG-TCNet踩坑记:从BCI IV2a数据到TCN块缺失的完整解决方案

本文详细解析了使用PyTorch复现EEG-TCNet模型的全过程,重点解决了BCI IV2a数据集预处理和TCN模块缺失的技术难题。通过标准化数据流程、跨受试者验证策略以及三种因果卷积实现方案,为运动想象分类任务提供完整解决方案,帮助研究者高效实现模型复现与优化。

weixin_30699955的博客 319

SQL Server MFC DAO类和MFC ODBC类

转自:http://www.verybc.com/a/shujuku/20091125/9828.html时间:2009-11-25 00:26来源:作者:点击:347次内容概要:大多数 mfc 开发人员都熟悉开放式数据库连接 (odbc) 数据库类 - 它们早在三年半以前就出现了。在 mfc 4.2 中,对这些类有一些重要的 大多数 mfc 开发都熟悉开放式数据库连接 (odbc) 数据库类 - 它们早在三年半以前就出现了。在 mfc 4.2 中,对这一些类有一些很重要的改进。<br />身为 c++ 开

Nicholas的专栏 QQ1295794532 1129

科研绘图系列:基因突变瀑布图统计以及可视化

科研绘图系列:基因突变瀑布图统计以及可视化

专注生信领域 1656

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

java中dao_java中的Dao类是什么意思?

展开全部DAO(Data Access Object)数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet数据库引擎(由62616964757a686964616fe58685e5aeb931333366303062 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access ...

weixin_36329071的博客 4321

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 912

mfc和mysql连接 dao_DAO简介(MFC) .

1 DAO简介DAO(数据访问对象)是一种应用程序编程接口(API),存在于微软的Visual Basic中,它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。在VC中,它是从Visual C++4.0版开始引入的。2 DAO和ODBC的比较2.1 ...

weixin_35064481的博客 294

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: DAO简介(MFC)
下一篇: Visual Studio 2010中C++的四大变化(转)
mannhello
博客等级 码龄18年 64粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值