首页 数据库 mysql教程 在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

Jun 07, 2016 pm 03:37 PM
access mfc 使用 微软 数据库 访问

ADO是硬盘上的表现形式是 一个名为msado15.dll的动态链接库。 第一步:在VS2010 中 创建一个对话框MFC程序。 第二步:在stdafx.h 添加一句代码 (添加位置是在#include afxdisp.h // MFC 自动化类 后面) #import C:\Program Files\Common Files\System\ADO\



ADO是硬盘上的表现形式是 一个名为 msado15.dll的动态链接库。


第一步:在VS2010 中 创建一个对话框MFC程序。


第二步:在stdafx.h 添加一句代码 (添加位置是在#include        // MFC 自动化类 后面)


#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace  rename("EOF", "EndOfFile")


下面解释一个上面代码的意思。

#import 这个没啥话说 就是引入的意思,  "C:\Program Files\Common Files\System\ADO\msado15.dll"  就是说一个全路径,就是msado15.dll

这个文件在硬盘中的位置。   如果你的系统没有做过刻意的更改 ,那么这个路径应该就是他了。


no_namespace , 这是啥意思? 翻译过来就是不使用命名空间      就是不使用 ADO这个组件自己命名空间  不然你在后面使用ADO的一些 接口的时候


就需要在前面加东西(加啥? 我也不知道 ,我也是停别人这么说的)

rename("EOF", "EndOfFile") 这句话 即使重命名  EOF  ,为啥要重新命名呢?  这是因为是在MFC里面有EOF这个字眼 但是意思和ADO里面的 EOF不是


一个意思 所以需要重新命名 不然ADO这货就疯了。  你可以任意命名 这要不和已有的 名字重复就好了     这个改名字为EndOfFile(有些哥们呢 喜欢命名为ADOEOF)

#import语句实际上相当于执行了API涵数LoadTypeLib()#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。

××××××××××××××××××××××××××××××××××××转 ××××××××


好了第二步说完了 ,开始说第三步了。



第三步:如同世界上的其他组件库一样  使用前要初始化 使用后卸载(这句话是老师说的   谁能就此展开)

如何初始化呢。

在程序初始过程中需要初始化组件,一般可以用CoInitialize(NULL);实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();实现。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示:

AfxOleInit()


为了让程序更完美 建议这样写

if(!AfxOleInit())//这就是初始化COM库 

AfxMessageBox("OLE初始化出错!"); 
return FALSE; 
}


这个函数可以放置在TheApp对象的初始化函数:InitInstance()中。  

PS:如果你不知道theapp的初始化函数 请 点击网页的右上角的X号  因为这篇文章不适合你



第四步:做这么多准备工作 终于可以可以说哦那个ADO了。

首先看一看 ADO的那些东西我我们可以使用

ADO包含一些顶层的对象:
连接(Connection),代表到数据库的连接
记录集(Recordset),代表数据库记录的一个集合
命令(Command),代表一个SQL命令
记录(Record),代表数据的一个集合
流(Stream),代表数据的顺序集合
错误(Error),代表数据库访问中产生的意外
字段(Field),代表一个数据库字段
参数(Parameter),代表一个SQL参数
属性(Property),保存对象的信息


通常来说我用到了 前三个对象。其他东西我不熟。


第五步:在MFC的对话框程序创建三个对象  ,就是那三个智能指针的对象。

这个对象(其实是否可以称之为对象 我也不清楚 姑且称之吧)输入对话框类

下图是我创建的结果

在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

第六步: 刚才那三个智能指针对象 被我创建出来了。

既然创建出来了 就可以用了。在哪里用呢?既然这三个对象属于对话框类,那么在对话框类的实例化对象中 就可以使用了。

注意以下内容是核心代码。

首先说一下核心代码的整体思路。

A:链接数据库 B:打开记录集 相当于用数据库里面的表给 记录集赋值  至此 表就存在于 内存中了 

C:使用ADO的相关函数 对记录集进行增删改查           D:关掉记录集  E:断开链接 

至此完成一次轮回。  


第七步: 建立和数据库的链接

打开数据库 也可以称之为 链接数据库

由于数据的操作带有很强的不确定性,所以对数据库的操作大都有错误抓取 就是 Try Catch

 HRESULT hr;
try
{
//先创建连接实例
hr = m_pConnection.CreateInstance(__uuidof(Connection));//创建Connection对象
if (SUCCEEDED(hr))
{
m_pConnection->ConnectionTimeout=600;//  链接数据库时间限制 
m_pConnection->CommandTimeout=120;//  也许是SQL语句执行时间限制
//然后打开数据库  OPEN函数的参数是很有讲究的
//Open 方法可打开一个到数据源的连接。当连接打开时,您可以对数据源执行命令
//一个包含有关连接的信息的字符串值。该字符串由一系列被分号隔开的 parameter=value 语句组成的。
//一个字符串值,包含建立连接时要使用的用户名称。
//一个字符串值,包含建立连接时要使用的密码。
//一个 ConnectOptionEnum 值,确定应在建立连接之后(同步)还是应在建立连接之前(异步)返回本方法。
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Home.mdb","","",adModeUnknown);// 
//ConnectionString 属性有 5 个参数:
//Provider---》用于连接的提供者的名称。
//File Name---》提供者特有的文件(例如,持久保留的数据源对象)的名称,这些文件中包含预置的连接信息。
//Remote Provider--》当打开客户端连接时使用的提供者的名称。(仅限于远程数据服务。)
//Remote Server--》当打开客户端连接时使用的服务器的路径名称。(仅限于远程数据服务。)
//url---》标识资源(比如文件或目录)的绝对 URL。
//打开模式
/*
adModeUnknown = 0,
adModeRead = 1,
adModeWrite = 2,
adModeReadWrite = 3,
adModeShareDenyRead = 4,
adModeShareDenyWrite = 8,
adModeShareExclusive = 12,
adModeShareDenyNone = 16,
adModeRecursive = 4194304
*/


}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);/// 
}
AfxMessageBox("成功打开数据库");


第八步:创建记录集


m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset->CursorLocation = adUseClient;  //需要把数据传输给本地,应用举例是断开数据库进行Recordset操作,即内存中操作
//而不是写入远端数据库。相反的有 adUseServer 是指直接在数据库中操作。
m_pRecordset->Open("SELECT * FROM Jianghu",//SQL 语句  
m_pConnection.GetInterfacePtr(), 
adOpenDynamic,//游标类型
adLockOptimistic,//乐观锁
adCmdText);//命令类型
/*
当您首次打开一个 Recordset 时,当前记录指针将指向第一个记录,同时 BOF 和 EOF 属性为 False。如果没有记录,BOF 和 EOF 属性为 True


*/
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());

m_MyDataGrid.putref_DataSource(m_pRecordset);//将对象和DataGrid控件链接在一起的函数。 在VC6 是 SetRefDataSource
AfxMessageBox("成功打开记录集");

第九步:给表增加行

// 数据库操作之:增  
//特别需要游标的位置 和 数据库主键不可以重复 不然报错
//第一步:定义四个字符串 用于获取 Edit控件中数据
CString ID ="2";
CString Name ="风清";
CString XingBie ="男";
CString ZhaoShu ="独孤九剑";
m_CEdit_ID.GetWindowTextA(ID);//获取编辑框文本,记录在szText变量中
m_CEdit_Name.GetWindowTextA(Name);
m_CEdit_Xingbie.GetWindowTextA(XingBie);
m_CEdit_ZhaoShu.GetWindowTextA(ZhaoShu);
 


//第二步:正是开始库的操作
try
{

//A :选择游标位置
m_pRecordset->MoveFirst();//新建的数据会添加到DataGrid的最后一条 但在数据库里面是第一条。
//B:提醒系统我要增肌数据了
m_pRecordset->AddNew();
//C: 调用函数PutCollect 修改数据
m_pRecordset->PutCollect("ID",_variant_t(ID));
m_pRecordset->PutCollect("NameGsz",_variant_t(Name));
m_pRecordset->PutCollect("XinBie",_variant_t(XingBie));
m_pRecordset->PutCollect("ZhaoShu",_variant_t(ZhaoShu));
//D: 更新数据库 也可以理解为写入数据库
m_pRecordset->Update();
}
catch (_com_error e)
{
AfxMessageBox("增加数据库失败!");///显示错误信息
}
AfxMessageBox("增加数据库成功");




未完待续


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

MySQL:世界上最受欢迎的数据库的简介 MySQL:世界上最受欢迎的数据库的简介 Apr 12, 2025 am 12:18 AM

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

为什么要使用mysql?利益和优势 为什么要使用mysql?利益和优势 Apr 12, 2025 am 12:17 AM

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

apache怎么配置zend apache怎么配置zend Apr 13, 2025 pm 12:57 PM

如何在 Apache 中配置 Zend?在 Apache Web 服务器中配置 Zend Framework 的步骤如下:安装 Zend Framework 并解压到 Web 服务器目录中。创建 .htaccess 文件。创建 Zend 应用程序目录并添加 index.php 文件。配置 Zend 应用程序(application.ini)。重新启动 Apache Web 服务器。

如何利用Debian Apache日志提升网站性能 如何利用Debian Apache日志提升网站性能 Apr 12, 2025 pm 11:36 PM

本文将阐述如何通过分析Debian系统下的Apache日志来提升网站性能。一、日志分析基础Apache日志记录了所有HTTP请求的详细信息,包括IP地址、时间戳、请求URL、HTTP方法和响应代码等。在Debian系统中,这些日志通常位于/var/log/apache2/access.log和/var/log/apache2/error.log目录下。理解日志结构是有效分析的第一步。二、日志分析工具您可以使用多种工具分析Apache日志:命令行工具:grep、awk、sed等命令行工具可

apache服务器是什么 apache服务器是干嘛的 apache服务器是什么 apache服务器是干嘛的 Apr 13, 2025 am 11:57 AM

Apache服务器是强大的Web服务器软件,充当浏览器与网站服务器间的桥梁。1. 它处理HTTP请求,根据请求返回网页内容;2. 模块化设计允许扩展功能,例如支持SSL加密和动态网页;3. 配置文件(如虚拟主机配置)需谨慎设置,避免安全漏洞,并需优化性能参数,例如线程数和超时时间,才能构建高性能、安全的Web应用。

如何在Debian上监控Nginx SSL性能 如何在Debian上监控Nginx SSL性能 Apr 12, 2025 pm 10:18 PM

本文介绍如何在Debian系统上有效监控Nginx服务器的SSL性能。我们将使用NginxExporter将Nginx状态数据导出到Prometheus,再通过Grafana进行可视化展示。第一步:配置Nginx首先,我们需要在Nginx配置文件中启用stub_status模块来获取Nginx的状态信息。在你的Nginx配置文件(通常位于/etc/nginx/nginx.conf或其包含文件中)中添加以下代码段:location/nginx_status{stub_status

MySQL遇到' Access denied for user ”问题的解决办法 MySQL遇到' Access denied for user ”问题的解决办法 Apr 11, 2025 pm 05:36 PM

解决 MySQL“Access denied for user”错误的办法:1. 检查用户连接数据库权限;2. 重新设置密码;3. 允许远程连接;4. 刷新权限;5. 检查数据库服务器配置(bind-address、skip-grant-tables);6. 检查防火墙规则;7. 重启 MySQL 服务。提示:备份数据库后进行更改。

如何配置Debian Apache日志格式 如何配置Debian Apache日志格式 Apr 12, 2025 pm 11:30 PM

本文介绍如何在Debian系统上自定义Apache的日志格式。以下步骤将指导您完成配置过程:第一步:访问Apache配置文件Debian系统的Apache主配置文件通常位于/etc/apache2/apache2.conf或/etc/apache2/httpd.conf。使用以下命令以root权限打开配置文件:sudonano/etc/apache2/apache2.conf或sudonano/etc/apache2/httpd.conf第二步:定义自定义日志格式找到或

See all articles