VC学习资料收集(13):单独使用CRecordSet

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
单独使用CRecordSet
闻怡洋 wyy_cq@21cn.com http://www.vchelp.net/

一般情况下AppWizard会在数据库应用程序中自动产生CRecordset的派生类,并将派生类和某个数据源中的表联系起来也可以和视图上的子窗口联系起来。但是有时这样做会影响到程序的灵活性,这时候我们可以单独使用CRecordSet类。利用CRecordSet类我们可以执行SQL语句,并可以读出结果集中数据。

首先我们需要包含头文件afxdb.h,可以将#include 添加到stdafx.h文件中。此外在使用CRecordset时必须有一个又一个CDatabase对象,该对象的作用是管理数据源连接。然后可以产生一个CRecordset对象,利用BOOL CRecordset::Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none )可以执行SQL语句。

但执行成功后,可以调用以下的函数滚动光标,读取数据。

MoveFirst移动光标到第一条记录处
MoveNext移动光标到后一条记录处
MovePrev移动光标到前一条记录处
MoveLast移动光标到最后一条记录处
IsBOF检测光标是否在第一条记录上
IsEOF检测光标是否在最后一条记录上
GetFieldValue得到结果中数据
下面是具体代码:
/*
假设CDatabase m_dbConn为成员变量
假设有一个表有如下SQL语句产生:CREATE TABLE table1(loc_id not null)
*/
void CYourClass::ConnectToDB()
{//连接数据库
	BOOL fOK = m_dbConn.Open("test");
	TRACE("connect fOK=%d/n",m_dbConn);
}

void CYourClass::Select()
{//执行SELECT语句
	CRecordset rec(&m_dbConn);
	BOOL fOK = rec.Open(CRecordset::forwardOnly,"select loc_id from table1 order by loc_id");
	TRACE("select fOK = %d/n",fOK);
	TRACE("返回的列数为:%d/n",rec.GetRowsetSize());
	CString szResult;
	while(!rec.IsEOF())
	{
		rec.GetFieldValue((int)0,szResult);
		rec.MoveNext();
		TRACE("fetch : %s/n",szResult);
	}
}

此外CRecordset::GetFieldValue有很多种原型,你可以通过指定列位置或是字段名来获取数据:

void GetFieldValue( LPCTSTR lpszName, CDBVariant& varValue, short nFieldType = DEFAULT_FIELD_TYPE );

void GetFieldValue( short nIndex, CDBVariant& varValue, short nFieldType = DEFAULT_FIELD_TYPE );

void GetFieldValue( LPCTSTR lpszName, CString& strValue );

void GetFieldValue( short nIndex, CString& strValue );

如果使用CDBVariant类型变量来获取结果,你可以得到任何类型的结果。在CDBVariant::m_dwType成员变量中记录了该变量所包含的数据类型,根据该变量的值你可以确定数据类型并引用CDBVariant对象中的相应成员变量。下载本文示范代码

提示工程三模式:思维链、角色扮演、示例驱动的实战生产力系统 提示工程不是技巧堆砌,而是人机协同的认知操作系统。其核心在于将模糊需求转化为可执行指令——通过Chain-of-Thought显性化推理路径,解决逻辑断层;借助Role-Playing锚定专业视角与知识边界,规避泛化输出;依托Few-Shot建立业务语境下的质量标尺,对齐真实效果。这三大模式共同构成面向职场高频任务的‘认知外挂’,适用于会议纪要生成、数据分析解读、营销文案批量产出、合规文档起草等强结果导向场景,无需RAG或微调即可实现输出质量可预测、可复制、可教学的跃升。 阅读详情

相关推荐

MFC仓库管理系统实战:数据库事务与界面优化全解析

MFC作为Windows桌面应用开发的经典框架,其核心价值在于紧贴Win32 API、调试直观、教学适配度高,特别适合课程设计与轻量级本地业务系统开发。理解CRecordset数据封装、CDatabase事务控制(BeginTrans/CommitTrans)、虚拟列表(LVS_OWNERDATA)性能优化等关键技术,是保障超市仓库类系统数据强一致性与交互流畅性的基础。结合ODBC数据库连接、DDX/DDV数据绑定、GDI打印等原生能力,MFC能以极低依赖实现入库单生成、库存联动更新、滞销预警等闭环业务逻辑

weixin_34034670的博客 480

CSqliteRecordSet类

Sqlite数据库类,用法与CRecordset基本类似,可以方便的转换用微软写的数据库操作代码到Sqlite数据库,此类还会不断完善。支持的函数如下: Open Close IsOpen IsEof IsBOF AddNew Update Delete MoveNext MovePrev MoveFirst

VC_MFC中CRecordset类详解

CRecordset类的详细说明和MFC中使用CRecordset类的详细方法

单独使用CRecordSet

闻怡洋 wyy_cq@21cn.com http://www.vchelp.net/ 一般情况下AppWizard会在数据库应用程序中自动产生CRecordset的派生类,并将派生类和某个数据源中的表联系起来也可以和视图上的子窗口联系起来。但是有时这样做会影响到程序的灵活性,这时候我们可以单独使用CRecordSet类。利用CRecordSet类我们可以执行SQL语句,并可

蝈蝈俊.net 3951

CRecordset类学习记录

这里写自定义目录标题CRecordset类简介快照和动态集的区别CRecordset类成员数据成员构造记录集属性记录集更新操作记录集定位操作其他记录集操作记录集重载函数 CRecordset类简介 CRecordset对象代表从一个数据源选择的一组记录的集合,被称作“记录集”。CRecordset对象可以以两种形式使用:动态集和快照。动态集是与其它用户的更新保持同步的动态数据集。快照是数据的静态视图。每一种形式都代表打开记录集时固定的一组记录。但是当滚动到动态集中的一个记录时,动态集将反映后来由其它用户或由

qq_44549547的博客 1497

CRecordset类的常用成员函数 成员变量 以及操作实例

CRecordset类的常用成员函数 成员变量 以及操作实例 Open() : 打开记录集,在CRecordse类负责的一个表中,将该表看做是一个记录集,即一个数据库中的表的元组对应一个记录,表的所有元组就是一个记录的集合。 AddNew():将一个新的记录插入到表中 Update()      完成AddNew() 或 Edit()操作之后,调用该函数在内存中的数据

jltjlt216的专栏 1176

_RecordsetPtr使用方法

_RecordsetPtr智能指针,它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。 要搞清楚:数据库和ADO的记录集是两个不同的概念, 是存在于不同物理位置的两个存储空间。 记录集相当于是实际数据的一份拷贝。 正因为记录集是相对脱离数据库而存在的, 所以才存在后面将要介绍的Open方法中涉及的光标类型和锁定类型这两个问题。

狼哥的专栏 2196

MFC ODBC 用法

主要内容: ? MFC ODBC将ODBC API封装在类CDatabase、CRecordSet、CFieldExchange、CRecordView和CDBException中 ? 使用MFC ODBC开发数据库应用程序的一般步骤 ? 使用AppWizard访问数据库使用类CDatabase连接数据库使用CRecordSet打开记录集、获取数据

g8gerrard的专栏 2736

VC的若干实用小技巧(=)

11:怎样快速生成一个与现有项目除了项目名外完全相同的新项目? 利用File菜单下生成新项目中的Custom AppWizard ,选择 An existing Project ,然后选择现有项目的项目文件名(*.dsp)Finish,编译后就生成一个可以生成与现有项目相同但可以重新取名的项目的AppWizard。你可以象用MFC AppWizard一样用它。如果不想用了,可以在VC 安装目录

1421

网络课设总结(三)——VC++应用技巧

<br />一、网站推荐<br />1、VC知识库:http://www.vckbase.com/<br />2、VC在线:http://www.vczx.com/<br />3、google、百度,呵呵,要善于利用网络资源,在l论坛上提问的时候要学会提问,具体可以看一篇文章《提问的艺术》,在我资源里面可以下载。<br />二、常用技巧<br />  1:使用vc开发项目时,常会遇到这种情况: <br />    即明明只改动了一个文件,却要把整个项目全部重新编译连接一次。刚刚连接好,一运行,又提示重新编译

阿杜的世界 1026

MFC数据库操作 - 获取数据库内容

//定义 _RecordsetPtr 型变量; HRESULT hr; _RecordsetPtr pRentRecordset; hr = pRentRecordset.CreateInstance(__uuidof(Recordset)); if (FAILED(hr)) { MessageBox(_T("创建记录集对象失败.")); return; } //调用其 Ope

编程、让你的生活变得更有乐趣。 2177

数据库编程总结

当前各种主流数据库有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。数据库编程是对数据库的创建、读写等一列的操作。数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端...

anchengshe9751的博客 690

CRecordSet类用法

要实现对结果集的数据操作,就要用到CRecordSet类。CRecordSet类定义了从数据库接收或者发送数据数据库的成员变量,CRecordSet类定义的记录集可以是表的所有列,也可以是其中的一列,这是由SQL语句决定的。 CRecordSet类的成员变量m_hstmt代表了定义该记录集的SQL语句句柄,m_nFields成员变量保存了记录集中字段的个数,m_nParams成员变量保存了

u011392772的专栏 4230

CRecordset

CRecordset类代表一个记录集,是MFC的ODBC类中最重要、功能最强大的类。 #include 1.      动态集、快照、光标和光标库 在多任务操作系统或网络环境中,多个用户可以共享同一个数据源。共享数据的一个主要问题是如何协调各个用户对数据源的修改。例如,当某一个应用改变了数据源中的记录时,别的连接至该数据源的应用应该如何处理。对于这个问题,基于MFC的ODBC应用程序可以采

elcoteq983的专栏 2万+

CRecordset::Open

virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,                    LPCTSTR lpszSQL = NULL,                    DWORD dwOptions = none                  );   throw( CDBException, CMemory

shizhandong50的专栏 3270

获取ResultSet集合查询出的字段名称

/** * 获取ResultSet集合查询出的字段名称 * @return */ public List&lt;String&gt; getColumnName(){ Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; List&lt;String&gt; cols = ...

草根 6304
上一篇: VC学习资料收集(12):VC小知识总结
下一篇: VC学习资料收集(14):用Visual C++开发数据库应用程序
CNBT
博客等级 码龄22年 6粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值