热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

配置数据源,VC++ADO连接ACCESS详解

#includeiostream.h#importc:programfilescommonfilessystemadomsado15.dllno_namespacerename(EOF,adoEOF)ADO连接数据库所需的dll,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C头文件来定义ADO库注意这里的import一定要放

#i nclude iostream.h #import c:/program files/common files/system/ado/msado15.dll no_namespace rename (EOF, adoEOF) //ADO连接数据库所需的dll,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C头文件来定义ADO库 //注意这里的import一定要放

#i nclude
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename ("EOF", "adoEOF")
//ADO连接数据库所需的dll,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库
//注意这里的import一定要放在一行

int main(){

//该程序使用ADO连接ACCESS(装office的时候里面有)数据库 后缀为.mdb 运行平台vc6.0
//2003平台在写着
//---------------------------------------------------------------------------------

//ADO数据库连接分五步走,
//第一、获取连接(只到数据库在什么地方)
//第二、打开连接 open(必要的用户名和密码)
//第三、获取字符集 ResultSet(类似数组的数据存储对象),
//第四、显示数据
//第五、关闭数据集、关闭连接


//创建个连接对象

_ConnectionPtr m_pConnection;

//对连接进行初始化
CoInitialize(NULL);

//---------------------------------------------------------------------------------
//第一步、获取连接
//---------------------------------------------------------------------------------

//同过连接(Connection)创建并获取一个数据库连接实例,
//也可以把他看成句柄(电影门票)有里他就有资格使用数据库里的资源了 呵呵

m_pConnection.CreateInstance(__uuidof(Connection));

// 又于在数据库连接的时候有有可能会出现错误,比如数据源设置或用户名 密码错误等
//所以使用try{....}catch(){...}捕获try{}里的异常(错误)
//并把这些异常放到_com_error e 这个变量里,我们可以同过他获取错误的信息
//并且,在出错的时候程序一定回运行catch(){....}里的东西,我们看到如果连接错误的时候
//会执行cout<<"数据库连接失败,确认数据库mydb.mdb是否在当前路径下!"< // return FALSE; 之后推出程序 。如果不加try的话可以在程序出错的时候造成死机
//所以,try也可以看成一种出错的处理(异常处理)

try
{ //---------------------------------------------------------------------------------
//第二步、打开连接 参数用 ; 分开
//---------------------------------------------------------------------------------

//第一个是Provider=Microsoft.Jet.OLEDB.4.0; access的厂商
//Data Source=mydb.mdb","","",adModeUnknown 数据库名称 , 用户名(空) ,密码(空), 缺省连接模式
//对于该参数:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)
/*adModeUnknown:缺省。当前的许可权未设置
adModeRead:只读
adModeWrite:只写
adModeReadWrite:可以读写
adModeShareDenyRead:阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接
adModeShareExclusive:阻止其它Connection对象打开连接
adModeShareDenyNone:允许其它程序或对象以任何权限建立连接
*/
//通过这个语句我们的数据库连接真正得到实现了,m_pConnection有了内容了(被附&#20540;了)

m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=mydb.mdb","","",adModeUnknown);

}
catch(_com_error e) //捕捉异常
{
cout<<"数据库连接失败,确认数据库mydb.mdb是否在当前路径下!"< return FALSE;
}

//数据集对象
_RecordsetPtr m_pRecordset;
//实例化数据集
m_pRecordset.CreateInstance(__uuidof(Recordset));

//---------------------------------------------------------------------------------
//第三步、获取数据集
//---------------------------------------------------------------------------------

//虽然,前面连接上了,但连接的这个数据库里是不是有数据表(test表)还不能确定
//所以,这里同样要捕获可能出现的错误
try
{
m_pRecordset->Open("SELECT * FROM test", //是数据查询字符串(即所谓的SQL语句)
//通常这些语句分为 数据的查询(select),插入(insert)
//更新(update),删除(delect)
//是否能执行这个命令是由前面(1)确定的

m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针

adOpenDynamic, //动态光标。所有数据库的操作都会立即在各用户记录集上反应出来

adLockOptimistic, //乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之
//前仍然可以做数据的更新、插入、删除等动作


adCmdText); //查询出来的数据是显示在控制台里的
}
catch(_com_error *e)
{
cout<ErrorMessage()< }

_variant_t var;
char *ID,*name;

try//得到表,但表里不一定有数据
{
if(!m_pRecordset->BOF) //数据表里是是有数据
m_pRecordset->MoveFirst(); //将游标(数据集在数据库的叫法)移动到一第一条记录
else {
cout<<"表内数据为空"< return 1;
}


//--------------------------------------------------------------------------------------------------------------------------
// 第四步、显示数据
//---------------------------------------------------------------------------------------------------------------------------

while(!m_pRecordset->adoEOF) //和前面的rename ("EOF", "adoEOF") 想对应 这里使用的是
//adoEOF代替EOF (当然这里如果前面没有rename也可以使用EOF)
//判断游标是不是到达最后一条数据
{
var = m_pRecordset->GetCollect("ID"); //这是获取表中字段的一种方法“ID”为表字段名
if(var.vt != VT_NULL) //判断记录在该有没数据
ID= _com_util::ConvertBSTRToString((_bstr_t)var); //由于得到的数据可能不是字符传 这里要转换
//将他们转成字符串,从而可以在屏幕上显示


var = m_pRecordset->GetCollect("name");
if(var.vt != VT_NULL)
name=_com_util::ConvertBSTRToString((_bstr_t)var);

cout< //打印该记录

m_pRecordset->MoveNext(); //游标向走向下条记录
}
}
catch(_com_error *e) //捕获异常
{
cout<ErrorMessage()<//如有错误 ,将错误输出
}
//--------------------------------------------------------------------------------------
//关闭数据集
//-----------------------------------------------------------------------------------

m_pRecordset->Close();
m_pRecordset = NULL;

//--------------------------------------------------------------------------------------
//关闭数据库连接
//--------------------------------------------------------------------------------------
if(m_pConnection->State)
m_pConnection->Close();
m_pCOnnection= NULL;

//这两步是一定要做的,否则时间长内存可能会被用尽
return 0;
}

推荐阅读
  • 在开发过程中,遇到了一个关于UILabel的显示问题:当根据文字长度动态调整UILabel的尺寸时,边框偶尔会出现不必要的黑线。本文详细分析了这一问题的原因,并提供了有效的解决方案。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 本文介绍了一种在Oracle 19c数据库中恢复被误删除表数据的方法,包括启用行移动功能和使用闪回技术,适用于表结构未被删除但数据丢失的情况。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 数据库环境:SQLSERVER2005  有一个test表,其表结构及数据如下图1。其中,id是主键,mid是当前节点,pid是父节点。要求:查出每个节点的根节点,如图2所示。 ... [详细]
  • 本文介绍了如何在Laravel框架中使用Select方法进行数据库查询,特别是当需要根据传入的分类ID查询相关产品时的正确做法和注意事项。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • MySQL 8.0 新特性详解:免费视频教程上线
    本文介绍了一套在慕课网上发布的免费视频教程,深入解析 MySQL 8.0 的核心新功能,包括增强的安全性、用户管理、新的索引类型、CTE 和窗口函数等。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • SQL 数据恢复技巧:利用快照实现高效恢复
    本文详细介绍了如何在 SQL 中通过数据库快照实现数据恢复,包括快照的创建、使用及恢复过程,旨在帮助读者深入了解这一技术并有效应用于实际场景。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 详解MyBatis二级缓存的启用与配置
    本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ... [详细]
  • 利用Git GUI将本地项目同步至GitHub的方法
    GitHub作为开发者不可或缺的工具,不仅提供了丰富的开源项目资源,还极大地便利了个人项目的管理和版本控制。本文将详细介绍如何使用Git GUI工具将本地开发的项目上传至GitHub。 ... [详细]
  • 本文将详细探讨MySQL中较为特殊的三种数据类型:SQLTEXT、DATE以及SET,包括它们的基本用法、适用场景及一些高级特性。 ... [详细]
  • StoredProcedure “存储过程名” 的TextHeader 中存在语法错误
    修改存储过程的时候出现StoredProcedure“存储过程名”的TextHeader中存在语法错误出现这样的问题的解决方法(本人修改已成功)在创建存 ... [详细]
author-avatar
jeson1232
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有