- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用Visual C++开发数据库应用程序
3、使用MFC访问ODBC数据源
3.1概述
VisualC++的MFC类库定义了几个数据库类。在利用 ODBC编程时,经常要使 用到CDatabase数据库类,CRecordSet记录集类和CRecordView(可视记录集类。其 中:
CDatabase类对象提供了对数据源的连接,通过它你可以对数据源进行操作。
CRecordView类对象能以控制的形式显示数据库记录。这个视图是直接连到一
个CRecordSet对象的表视图。
CRecordSet类对象提供了从数据源中提取出的记录集。CRecordSet对象通常 用于两种形式:动态行集(dynasets和快照集(snapshots动态行集能
保持与其他用户所做的更改保持同步。快照集则是数据的一个静态视图。每一 种形式在记录集被打开时都提供一组记录,所不同的是,当你在一个动态行集
里滚动到一条记录时,由其他用户或是你应用程序中的其他记录集对该记录所 做的更改会相应地显示出来。
Visual C++提供了几种记录集,可以用来定制应用程序的工作方式。查看这些不 同选项的最快方式要兼顾速度和特征。你会发现,在很多情况下,如果想添加
特征,就必须付出程序执行速度降低的代价。下面告诉你一些可以自由支配的
记录集选项。更重要的是,要告诉你从这个选项可以获得更快的速度还是更多
的特征。
1、Snap shot快照这个选项要Visual C++在一次快照中下载整个查询。换
言之,及时快速地给数据库内容拍照,并把它作为未来工作的基础。这种方法 有三个缺点。第一,你看不到别人在网络上做的更新,这可能意味着你的决定 是建立在老信息的基础上。第二,一次就下载所有这些记录,这意味着在下载 期间给网络增加了沉重的负担。第三,记录下载时用户会结束等待,这意味着 网络的呼叫性能变得更低。然而这种方法也有两个优点。第一 ,记录一旦被下
载,该工作站所需的网络活动几乎就没有了棗这为其它请求释放了带宽。总之
你会看到网络的吞吐量增大了。第二,因为所有被申请的记录都在用户的机器
上,所以用户实际上会得到应用程序更佳的总体性能。你可能想把快照的方法 限制在较小的数据库上使用,原因在于快照适用于用户请求信息而不适用于数 据编辑会话。
2、Dynaset动态集使用这个选项时,Visual C++创建指向所请求的每个记 录的实际指针。另外,只有填充屏幕时实际需要的记录是从服务器上下载来
的。
这种方法的好处很明显。几乎马上就能在屏幕上看到记录。而且还会看到其它 用户对数据库所做的更改。最后,其它用户也会看到你做的更改,因为动态集 在你更改记录时被上载到服务器上。很明显,这种方法要求对服务器的实时访 问,它减小了网络总吞吐量并降低了应用程序的性能。这个选项适合于创建用 户要花费很多时间来编辑数据的应用程序。同时,它也是大型数据库的最佳选 择,原因在于只需下载用户实际需要的信息。
3.2应用ODBC编程
可以应用AppWizard来建立一个ODBC的应用程序框架,也可以直接使用
ODBC来进行数据库编程,这时,应包括头文件afxdb.h。
应用ODBC编程两个最重要的类是CDatabase和CRecordSet但在应用程序中
不应直接使用CRecordSet类,而必须从CRecordSet类产生一个导出类,并添加相应 于数据库表中字段的成员变量。随后,重载CRecordset类的成员函数 DoFieldExchange该函数通过使用RFX函数完成数据库字段与记录集域数据成员变 量的数据交换,RFX函数同对话框数据交换(DDX机制相类似,负责完成数据库与成 员变量间的数据交换。
下面举例说明在VisualC++环境中ODBC的编程技巧:
3.21数据库连接
在CRecordSet类中定义了一个成员变量 m_pDatabase:
CDatabase *m_pDatabase;
它是指向对象数据库类的指针。如果在 CRecordSet类对象调用Open(函数之
前,将一个已经打开的CDatabase类对象指针传给 m_pDatabase就能共享相同的
CDatabase类对象。女口 :
CDatabase m_db;
CRecordSet m_set1,m_set2;
m_db.Open(_T(Super_ES; //建立 ODBC 连接
m_set1.m_pDatabase=m_db; 〃m_set复用 m_db 对象
m_set2.m_pDatabse=m_db; // m_set2复用 m_db 对象
或如下:
Cdatabase db;
db.Open( “ Database 建立/ODBC 连接
CrecordSet m_set(db; /构造记录集对象,使数据库指向db
3.2
原创力文档


文档评论(0)