王朝网络
分享
 
 
 

在VC++中建立自定义数据库类

王朝vc·作者佚名  2007-05-30
宽屏版  字体: |||超大  

数据库

在VC++中建立自定义数据库类

作者:李健萍

摘要

---- 本文较为详细的介绍了一个使用ODBC对数据库进行操作的

CdataBaseOperate类的建立,并给出了几个主要函数的具体实现,以及该类

在实际的应用程序中的使用。

---- 众所周知VC++的MFC类库为编程者编制好了对数据库操作的类,编程者可

以使用向导建立一个与数据库联结并对数据库进行操作的应用程序,不需要编

制任何代码,这无疑为编程人员提供了一个捷径。但是,使用向导时只有选用基

于单文档或多文档的项目才能选择数据源,与指定的的数据库相连,对用向导生成

的基于对话框的应用程序不提供数据库的支持。即使是基于单文档或多文档的

应用程序,当需要一些特殊的操作,例如,打开一个表,要求返回满足一定条件

的记录集时,MFC并没有提供完全符合要求的现成函数。如果,能利用MFC所提

供的数据库操作,再加上自己设计的函数,也就是说,设计一个对数据库操作

的类,在程序中手工加入这个类,那么就可以在基于对话框的应用程序中实现对

数据库的操作,而且,也可以针对自己应用程序的具体需要来设计类的函数,为

特定功能的实现提供了很大的方便。

---- 在一个涉及数据库操作的应用程序中,常用到的MFC类有CdaoDatabase类、

CdaoTableDef类、CdaoRecordset类和 CdaoQueryDef类,当对数据库进行操作

时,需要先打开数据库,然后打开数据库中的表,再得到查询集和记录集。在自

己定义的类中综合这四个类的操作,设计一个打开表得到查询集和记录集的函

数,以后,在应用程序中使用该类时只需包含该类的头文件,所设计的函数就

可以直接调用了。

---- 建立数据库类的过程可分为如下四步:

---- 一、定义一个无基类的CdataBaseOperate类

---- 1、在Workspace窗口选择ClassView选项卡,在树型类结构图的根部单击

鼠标右键,选择New Class…,系统将弹出建立新类的对话框;

---- 2、在Class type中选择Generic Class;

---- 3、在Name中填写要建的新类的名称,要以大写字母C开头,系统会自动建立

新类的头文件和实现文件,文件的名称为类名去掉第一个大写字母C,如果想改变

文件的名称,可以单击change按钮.

---- 4、在填写好各项后,按OK按钮确定,一个无基类的新类建立成功,但,他

还是一个空类,下一步,就要给类添加内容.

---- 二、在自定义的类中加入有关的定义

---- 1、在本应用程序中,使用ODBC与SQL SERVER的数据库相连,因而,在类的

实现文件构造函数前加入如下的定义: #define SQL_DATABASE _T("ODBC;

DSN=sql-database;UID=sa;PWD=pass;") DSN=sql-database表示建立的ODBC联

接的名称是sql-database,如果选用其他数据库,只需在此改变与所需数据库建

立的联接,或是重新配置sql-database 使之联接新的数据库。UID=sa;PWD=pass

表示登录数据库的用户名是sa,密码是pass,如果密码是空则表示为PWD=""。

---- 2、在该类中综合使用到了MFC类库提供的有关数据库的几个类

CdaoDatabase类、CdaoTableDef类、CdaoRecordset类和CdaoQueryDef类,

而这四个类的定义和实现都包括在头文件afxdao.h中,因此,在新定义的类

的头文件中一定要加上语句:

#include < afxdao.h >;

---- 3、对要用到的四个类各声明一个对象如下:

CDaoDatabase* loc_pDataBase;

CDaoTableDef* loc_pTable;

CDaoRecordset loc_pRecordset;

CDaoQueryDef* loc_pQueryDef;

---- 其中CdaoDatabase类、CdaoTableDef类和CdaoQueryDef类定义了对象指针,

在使用时要先new,最后要delete。以CdaoDatabase类为例,在

CdataBaseOperate类的构造函数中初始化对象指针 loc_pDataBase=new CDaoDatabase;在析构函数中要释放该指针delete loc_pDataBase;

---- 三、在自定义的类中加入所需的函数和变量

---- 手工加入函数包括两项工作,首先在头文件中加入函数的声明,然后,在

实现文件中加入函数的具体实现,声明与实现一定要统一;

---- 使用向导加入函数和变量:

---- 1、在Workspace窗口选择ClassView选项卡;

---- 2、在树型类结构图的要添加函数和变量的类上单击鼠标右键,如果加入成

员函数则单击Add Member Function,加入虚函数单击Add Virtual Function,

加入成员变量单击 Add Member Variable;

---- 3、出现对话框后,填写成员函数或变量的名称、类型,系统会自动添加函

数的声明与实现;

---- 4、添加函数的具体操作,可以通过编辑代码进一步填写;

---- 这些操作将会在Workspace窗口的ClassView选项中立即体现出来,并且,

单击ClassView中的相应函数就可进入该函数的实现部分,进行进一步编写代码,

如果做不到这一点,说明添加成员函数的操作有误。

---- 下面以本应用程序为例,给出具体的表结构和几个主要函数的实现,读者

可以根据自己的实际情况设计函数。

---- 本应用程序中的一个典型表的结构是:

序号 正题内容 难度系数 分值 答案 备注

整型 字符型 长整型 双精度 字符型 字符型

---- 打开数据库的函数实现如下:

if (!loc_pDataBase->IsOpen())

loc_pDataBase->Open( NULL, FALSE,

FALSE, SQL_DATABASE);

---- 该函数中用到了CdaoDatabase类的两个函数IsOpen()和Open(NULL, FALSE,

FALSE, SQL_DATABASE),因为已经声明了该类的指针对象loc_pDataBase,所以

可以直接调用CdaoDatabase类的函数。其中,Open()函数中的最后一个参数

SQL_DATABASE在前面已经介绍过,通过他打开相关的数据库。

---- 由于程序中打开表后,不仅要返回所有的记录集,还用到返回满足一定条

件的记录集,因此打开表的函数除了带入表名外还有一个参数难度系数,

lNDXS=0时,选择表中全部数据, lNDXS=1~n时,表示选择难度系数=1~n的记录。

bool CDataBaseOperate::OpenTable

(Cstring strTableName,long lNDXS)

{

Cstring strFieldNumber;

loc_pTable=new CdaoTableDef

(loc_pDataBase);

if (!loc_pTable->IsOpen())

loc_pTable->Open(strTableName);

//打开指定的表名

strFieldNumber.Format("%d",loc_pTable- >

GetFieldCount()); //得到字段数

Cstring Sqlstr,Sqlstr1,Sqlstr2;

loc_pQueryDef=new CDaoQueryDef(loc_pDataBase);

//得到查询集和记录集

if (lNDXS==0)

{

Sqlstr=_T("SELECT * FROM "+strTableName);

}

else

{ Sqlstr1="SELECT * FROM "+strTableName ;

Sqlstr2.Format("WHERE 难度系数= %d",lNDXS);

Sqlstr=_T(Sqlstr1+Sqlstr2);

}

loc_pQueryDef->Create(NULL,Sqlstr);

loc_pRecordset.Open(loc_pQueryDef);

m_nRecordNumber=0;

while(!loc_pRecordset.IsEOF())

{

m_nRecordNumber++;

loc_pRecordset.MoveNext( );

}

return TRUE;

}

---- 为了维护数据库的安全,表用过后应该关闭,关闭表的同时,要释放在打

开表的操作时初始化的对象指针,例如:delete loc_pQueryDef。同样要注意,

在构造函数中初始化的对象指针,在析构函数中一定要释放。对象指针的初始化

和释放是成对出现的。

loc_pDataBase=new CDaoDatabase;

//在构造函数中初始化对象指针。

Delete loc_pDataBase;

//在析构函数中释放该对象指针。

---- 四、CdataBaseOperate类的应用

---- 1、使用VC++的向导生成一个应用程序,可以根据需要选择基于对话框或

是基于单、多文档,选择单文档或多文档时不要选择数据库支持。

---- 2、在应用程序的主头文件中加入#include "DataBaseOperate.h",并且还

要声明一个CdataBaseOperate类的对象,public: CDataBaseOperate m_CDataBaseOperate;

---- 3、有了指向CdataBaseOperate类的对象后,刚刚在CdataBaseOperate类中

编制的函数都可以通过

"m_CdataBaseOperate.函数名"来调用。

小结:

---- 本文是VC++6.0下的CdataBaseOperate类建立与应用的一个初步探讨,

CdataBaseOperate类所实现的功能是很强大的。除了介绍的CdataBaseOperate类

的几个基本而又常用的函数之外,CdataBaseOperate还有很多用于其他方面的功

能函数,在此不一一介绍。CdataBaseOperate类的函数,实现了数据库内容的显

示、修改、添加、删除等功能,基本上满足了数据库操作人员的需要。除了这

些,编程人员还可以根据程序的需要定义自己的特有的函数。

CSDN VC编程经验总结

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有