数据库 在VC++中建立自定义数据库类
|
|
作者:李健萍 摘要 ----本文较为详细的介绍了一个使用ODBC对数据库进行操作的 CdataBaseOperate类的建立,并给出了几个主要函数的具体实现,以及该类 在实际的应用程序中的使用。
----众所周知VC++的MFC类库为编程者编制好了对数据库操作的类,编程者可 以使用向导建立一个与数据库联结并对数据库进行操作的应用程序,不需要编 制任何代码,这无疑为编程人员提供了一个捷径。但是,使用向导时只有选用基 于单文档或多文档的项目才能选择数据源,与指定的的数据库相连,对用向导生成 的基于对话框的应用程序不提供数据库的支持。即使是基于单文档或多文档的 应用程序,当需要一些特殊的操作,例如,打开一个表,要求返回满足一定条件 的记录集时,MFC并没有提供完全符合要求的现成函数。如果,能利用MFC所提 供的数据库操作,再加上自己设计的函数,也就是说,设计一个对数据库操作 的类,在程序中手工加入这个类,那么就可以在基于对话框的应用程序中实现对 数据库的操作,而且,也可以针对自己应用程序的具体需要来设计类的函数,为 特定功能的实现提供了很大的方便。
----在一个涉及数据库操作的应用程序中,常用到的MFC类有CdaoDatabase类、 CdaoTableDef类、CdaoRecordset类和CdaoQueryDef类,当对数据库进行操作 时,需要先打开数据库,然后打开数据库中的表,再得到查询集和记录集。在自 己定义的类中综合这四个类的操作,设计一个打开表得到查询集和记录集的函 数,以后,在应用程序中使用该类时只需包含该类的头文件,所设计的函数就 可以直接调用了。
----建立数据库类的过程可分为如下四步:
----一、定义一个无基类的CdataBaseOperate类
----1、在Workspace窗口选择ClassView选项卡,在树型类结构图的根部单击 鼠标右键,选择NewClass…,系统将弹出建立新类的对话框;
----2、在Classtype中选择GenericClass;
----3、在Name中填写要建的新类的名称,要以大写字母C开头,系统会自动建立 新类的头文件和实现文件,文件的名称为类名去掉第一个大写字母C,如果想改变 文件的名称,可以单击change按钮.
----4、在填写好各项后,按OK按钮确定,一个无基类的新类建立成功,但,他 还是一个空类,下一步,就要给类添加内容.
----二、在自定义的类中加入有关的定义
----1、在本应用程序中,使用ODBC与SQLSERVER的数据库相连,因而,在类的 实现文件构造函数前加入如下的定义:#defineSQL_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; CDaoRecordsetloc_pRecordset; CDaoQueryDef*loc_pQueryDef;
----其中CdaoDatabase类、CdaoTableDef类和CdaoQueryDef类定义了对象指针, 在使用时要先new,最后要delete。以CdaoDatabase类为例,在 CdataBaseOperate类的构造函数中初始化对象指针loc_pDataBase=newCDaoDatabase;在析构函数中要释放该指针deleteloc_pDataBase; ----三、在自定义的类中加入所需的函数和变量
----手工加入函数包括两项工作,首先在头文件中加入函数的声明,然后,在 实现文件中加入函数的具体实现,声明与实现一定要统一;
----使用向导加入函数和变量:
----1、在Workspace窗口选择ClassView选项卡;
----2、在树型类结构图的要添加函数和变量的类上单击鼠标右键,如果加入成 员函数则单击AddMemberFunction,加入虚函数单击AddVirtualFunction, 加入成员变量单击AddMemberVariable;
----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的记录。
boolCDataBaseOperate::OpenTable (CstringstrTableName,longlNDXS) { CstringstrFieldNumber; loc_pTable=newCdaoTableDef (loc_pDataBase); if(!loc_pTable->IsOpen()) loc_pTable->Open(strTableName); //打开指定的表名 strFieldNumber.Format("%d",loc_pTable-> GetFieldCount());//得到字段数 CstringSqlstr,Sqlstr1,Sqlstr2; loc_pQueryDef=newCDaoQueryDef(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(); } returnTRUE; }
----为了维护数据库的安全,表用过后应该关闭,关闭表的同时,要释放在打 开表的操作时初始化的对象指针,例如:deleteloc_pQueryDef。同样要注意, 在构造函数中初始化的对象指针,在析构函数中一定要释放。对象指针的初始化 和释放是成对出现的。 loc_pDataBase=newCDaoDatabase; //在构造函数中初始化对象指针。 Deleteloc_pDataBase; //在析构函数中释放该对象指针。
----四、CdataBaseOperate类的应用 ----1、使用VC++的向导生成一个应用程序,可以根据需要选择基于对话框或 是基于单、多文档,选择单文档或多文档时不要选择数据库支持。
----2、在应用程序的主头文件中加入#include"DataBaseOperate.h",并且还 要声明一个CdataBaseOperate类的对象,public:CDataBaseOperatem_CDataBaseOperate;
----3、有了指向CdataBaseOperate类的对象后,刚刚在CdataBaseOperate类中 编制的函数都可以通过 "m_CdataBaseOperate .函数名"来调用。
小结:
----本文是VC++6.0下的CdataBaseOperate类建立与应用的一个初步探讨, CdataBaseOperate类所实现的功能是很强大的。除了介绍的CdataBaseOperate类 的几个基本而又常用的函数之外,CdataBaseOperate还有很多用于其他方面的功 能函数,在此不一一介绍。CdataBaseOperate类的函数,实现了数据库内容的显 示、修改、添加、删除等功能,基本上满足了数据库操作人员的需要。除了这 些,编程人员还可以根据程序的需要定义自己的特有的函数。
CSDN VC编程经验总结
|
相关推荐
VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务...
VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务...
案例8 图像在数据库中的存储 案例9 创建动态水晶数据报表 案例10 动态创建MSChart统计图表 第七章 网络应用 案例1 获取DNS 案例2 获取自己的IP地址 案例3 在窗口中PING一个IP地址 案例4 显示指定工作组内...
问:从数据库中读大于32k的内容? 65 问:如何获得CRichEditCtrl中字符的位置? 66 问:如何限制mdi子框架最大化时的大小? 66 问:如何切换视口而不破坏它们? 66 问:改变列表控制时发生闪烁现象? 68 问:处理列表控件...
VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务...
VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务...
VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务...
代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...
2.8.2 在框架类中获得当前的文档类和视图类对象指针 101 2.8.3 获得应用程序类对象的指针 101 2.8.4 从应用类对象中获得主框架类对象的指针 101 2.9 小结 102 第3章 Visual C++ 2010 MFC菜单编程 103 ...
《VC++.NET精彩百例》配套代码 <br/> [涉及平台] VC++.NET [作者] void [文件大小] 2969KB [更新日期] 2005-10-30 <br/>一、资源说明 <br/>第1章 界面编程 实例1 "欢迎"界面 ...
(5)从数据库中读大于32k的内容? 84 (6)如何获得CRichEditCtrl中字符的位置? 86 (7)如何限制mdi子框架最大化时的大小? 86 (8)如何切换视口而不破坏它们? 87 (9)改变列表控制时发生闪烁现象? 91 (10)处理列表控件可见...
问:从数据库中读大于32k的内容? 65 问:如何获得CRichEditCtrl中字符的位置? 66 问:如何限制mdi子框架最大化时的大小? 66 问:如何切换视口而不破坏它们? 66 问:改变列表控制时发生闪烁现象? 68 问:处理列表控件...
第6章 用VC++建立InternetCOM组件 IEActiveX控件 轻量级控件 安全控件 持续属性 文档对象模型编程 活动服务器组件 活动服务器页面 ASP页面的COM组件 小结 第7章 用VB建立InternetCOM组件 无窗口控件 ...
2.8.2 在框架类中获得当前的文档类和视图类对象指针 101 2.8.3 获得应用程序类对象的指针 101 2.8.4 从应用类对象中获得主框架类对象的指针 101 2.9 小结 102 第3章 Visual C++ 2010 MFC菜单编程 103 ...
在状态栏中添加时钟显示(掌握CTime类和静态成员变量和函数的用法),鼠标坐标显示,进度条(主窗口产生后立即产生进度条的巧妙思想,不能在OnCreate函数中直接处理,要用到自定义消息的方法)。如何为窗口添加背景...