基于VC平台的数据存取对象(DAO)技术(1)

vb连接数据库  时间:2021-02-26  阅读:()

杨峰唐常杰徐代刚宋晓梅四川联合大学计科系(610064)摘要:数据访问对象(DAO)使用MicrosoftJet数据库引擎,可访问MicrosoftAccess数据库,ODBC数据源,以及其他可安装的ISAM数据库.
在VC平台上有灵活的DAO编程方法.
MFC将DAO类封装其中.
VC是强大而灵活的编程语言.
常常需要在VC中直接对数据库中的数据进行查询等操作.
本文介绍使用数据存取对象(DAO)连接数据库的技术,并通过实例对细节加以说明.
1DAO可访问的数据库DAO使用MicrosoftJet数据库引擎可访问MicrosoftAccess(.
MDB)数据库,ODBC数据源,使用一个ODBC驱动器,以及其他可安装的ISAM数据库,如dBase,Paradox,FoxPro,Btrieve等等.
2DAO编程的三种方法(1)采用DAOOLEAutomation接口:DAO为OLEAutomation提供了一个基于vtable的应用接口.
DAOSDK提供了描述DAO的vtable接口的头文件,因此不需要再通过IDispatch机制编程.
当创建了一个DBEngine对象实例后,对象的实例是通过父类来创建.
否则,这些对象就是典型的OLEComponentObjectModel(COM)对象.
因此,应用程序需要负责释放这些对象的空间.
(2)dbDAO类:用VB开发DAO接口非常简单并且需要很少的OLECOM知识.
dbDAO类支持对象的动态分配空间和回收空间,可能的情况下,它还采用自带的C++数据类型,或标准的OLE变量.
它不需要精通C++,调用其函数的语法同VB中的调用相似.
它支持直接在数据结构中读取大量数据.
(3)采用MFCDAO类:用VC++编程,DAO的功能是通过MFC完成的.
基于CRecordset类的代码是为ODBC开发的,其派生类CDAORecordset类在继承了全部数据库功能的同时,增加了更完整的数据库功能.
此外,DAO还可通过ODBC访问其他类型的数据库.
用户可以直接调用VC++4.
0版本中所包含的DAO以及DAOSDK.
3MFC所封装的DAO类CDaoWorkspace该类对应于DAO中的工作台,为用户定义一个对话.
它包含打开的数据库,并提供同时处理机制.
CDaoDatabase该类对应于DAO中的数据库,它代表与数据库的连接,比ODBC数据库类有更强的能力去操纵数据库,可以直接读取MicrosoftJet的.
MDB文件.
CDaoTableDef该类对应于DAO中的Tabledef(表定义),表示一个表的模式(结构),使用SQL的DataManipulationLanguage(DML)子集来生成并操纵数据库中的表.
CDaoQueryDef该类对应于DAO中的Querydef(查询定义).
用户所生成的大多数应用程序只需要数据库记录的一个子集.
Querydef对象表示用户生成并运行的查询,或者用来生成记录集合,按要求过滤和排序记录.
CDAORecordset该类对应于DAO中的记录集合,它代表从数据源中选择的记录集合.
记录集合可以代表从一个或多个数据库表的行中所选择的一个或多个特定的列(栏).
CDaoException该类对应于DAO中的异常处理类.
CDaoFieldExchange该类不是MFC特有的,它管理着数据库中的记录与recordset中的字段变量之间的数据交换.
通过上述类,MFC封装了DAO的各种功能.
下面,通过两个VC5.
0做的简单数据库应用程序,阐明VC+DAO+DB的技术.
4示例例1一个简单的查询修改程序.
设已经用Access建立如下数据库ENROLL.
MDB,其中有表:Teacher和Student,如图1.
表TeacherTeacherNameCourseNameHoursTangGraphics4TangMath6WangAlgorithm3ZhangC++4表StudentStudentNoStudentNameClass1005ZhaoAlgorithm1002QianAlgorithm1002SunC++1009LeeC++图1两个数据库表本程序欲显示如下SQL语句的查询结果:SELECT*FROMTeacher,StudentWHERETeacher.
CourseName=Student.
Class用VC的AppWizard新建一个Project:MyDAO1.
在AppWizard-step2(数据库选项页)中,选择"Databaseviewwithoutfilesupport"选项,单击DataSource按钮,在DatabaseOptions对话框中选择ENROLL.
MDB,然后选择Teacher和Student表.
AppWizard将使用Dynaset作为缺省的记录集合类型,同时选择DirtyFields以检测数据是否改变.
其余选项皆取默认值.
按CTRL-W进入ClassWizard,选择MemberVariables页,可以发现其中各字段皆已被赋以成员变量名,比如TeacherName字段为m_pSet->m_TeacherName,CourseName字段为m_pSet->m_CourseName,Hours对应m_pSet->m_Hours.
然后,在ResourceView页中单击Dialog,选择IDD_MYDAO_FORM对话框,设计对话模板.
向其中加入一个EditBox,按住CTRL键后,双击该编辑框,在MemberVariableName中选择m_TeacherName,表示该栏将为教师名称字段.
对另外四个字段进行同样的操作.
可得到如图2的对话框.
下面加入SQL语句.
在FileView中,选择MyDAO1Set.
cpp,修改成员函数GetDefaultSQL()为:CStringCMyDao1Set::GetDefaultDBName(){return_T("SELECT*FROM[Student],[Teacher]""WHERE[Teacher].
CourseName=[Student].
Class");}编译、链接后运行,将看到表中的单个记录显示在屏幕上.
单击图标中的箭头,还可改变当前记录.
这样,一个简单的数据库查询应用程序就完成了.
图2例2:本程序将显示Student表中的所有记录,其功能相当于Xbase中的LIST命令.
按CTRL-N新建一个Workspace:MyDAO2,在step1中选择SingleDocument,在Step2of6中选择None,在Step6of6中单击CMyDAO2View,在BaseClass中选择CListView,其余都采用默认值.
在ClassView中,对MyDAO2Classes单击鼠标右键,选择NewClasses,ClassType定义为GenericClass,ClassName定义为CCrack.
再对MyDAO2Classes单击鼠标右键,增加一个新类,ClassType定义为MFCClasses,类名为CListCtrlEx,其基类为CListCtrl.
对CMyDAO2Doc单击鼠标右键,增加CMyDAO2View*m_pListView变量,和CDaoDatabase*m_pDB变量;再增加对ID_FILE_OPEN命令的事件处理函数:voidOnFileOpen().
其中,OnFileOpen()函数的功能是打开enroll.
mdb数据库.
同时,在CMyDAO2Doc.
h文件前面加上classCMyDAO2Doc;classCListCtrlEx;#include"afxdao.
h"程序主要部分如下:CMyDao2Doc::CMyDao2Doc(){m_pDB=NULL;m_pListView=NULL;//将两个变量置为NULL.
}CMyDao2Doc::~CMyDao2Doc(){if(m_pDB){//在析构函数中删除指针变量.
if(m_pDB->IsOpen())m_pDB->Close();deletem_pDB;}}BOOLCMyDao2Doc::OnNewDocument(){//对m_pListView变量进行初始化if(!
CDocument::OnNewDocument())returnFALSE;POSITIONpos=GetFirstViewPosition();CView*pView=GetNextView(pos);m_pListView=DYNAMIC_DOWNCAST(CMyDao2View,pView);returnTRUE;}voidCMyDao2Doc::OnFileOpen(){LPCTSTRlpszPathName;lpszPathName="enroll.
mdb";//自动打开所需的数据库文件CDaoDatabase*tmpDB=newCDaoDatabase;try{tmpDB->Open(lpszPathName);}catch(CDaoException*e){deletetmpDB;e->Delete();returnFALSE;}//如果有错,则删除指针并返回if(m_pDB){if(m_pDB->IsOpen())m_pDB->Close();deletem_pDB;}//关闭数据库m_pDB=tmpDB;m_pListView->m_pDB=m_pDB;m_pListView->ListTableData();//显示Student表returnTRUE;}对CMyDAO2View单击鼠标右键,增加CDaoDatabase*m_pDB变量;再添加voidListTableData(LPCTSTRstrTableName)和voidAddItem(intnItem,intnSubItem,LPCTSTRstrItem)两个函数.
再对CMyDAO2View单击鼠标右键,在AddWindowsMessageHandler中,选择WM_CREATE,增加对OnCreate()事件的处理函数.
其中,ShowTableData()函数是显示的主控程序,而每读出一条记录都通过AddItem()函数将其添加到ListView中.
同时,在MyDAO2View.
h应前面加入以下语句:#includeclassCListCtrlEx;classCMyDao2View;程序主要部分如下:intCMyDao2View::OnCreate(LPCREATESTRUCTlpCreateStruct){lpCreateStruct->style|=LVS_REPORT;//用报表的方式显示数据if(CListView::OnCreate(lpCreateStruct)==-1)return-1;return0;}voidCMyDao2View::ListTableData(){ASSERT(m_pDB);ASSERT(m_pDB->IsOpen());CListCtrlEx&ctlList=(CListCtrlEx&)GetListCtrl();CDaoFieldInfofieldInfo;intnFields;CDaoTableDeftd(m_pDB);try{strTableName="Student";td.
Open(strTableName);nFields=td.
GetFieldCount();for(intj=0;jDelete();}td.
Close();CDaoRecordsetrs(m_pDB);intnItem=0;intnLoaded=0;BOOLMAXRECORDS=100;//可读取的最大记录数try{CStringstrSelect(_T("Select*From[Student]自动显示Student表rs.
Open(dbOpenDynaset,strSelect);while(!
rs.
IsEOF()){if(nItemDelete();return;}if(nItem>=MAXRECORDS)MessageBox(strRecCount);//提示记录数太多rs.
Close();//关闭数据库}voidCMyDao2View::AddItem(intnItem,intnSubItem,LPCTSTRstrItem){CListCtrlEx&ctlList=(CListCtrlEx&)GetListCtrl();ctlList.
AddItem(nSubItem,1,strItem);}编译、链接后运行,将看到enroll.
mdb的Studnet表中的全部记录显示在屏幕上.
如图3所示.
图3由于Crack.
cpp和ListCtrlEx.
cpp源程序较长,限于篇幅,不能在此一一列出.
Crack用于读出每一个字段内容,ListCtrlEx是为了将结果显示出来.
感兴趣的读者可以与作者联系.

CloudCone(1.99美元),可以额外选择Voxility高防IP

CloudCone 商家也是比较有特点的,和我们熟悉的DO、Vultr、Linode商家均是可以随时删除机器开通的小时计费模式。这个对于有需要短租服务器的来说是比较有性价比的。但是,他们还有一个缺点就是机房比较少,不同于上面几个小时计费服务商可以有多机房可选,如果有这个多机房方案的话,应该更有特点。这次我们可以看到CloudCone闪购活动提供洛杉矶三个促销方案,低至月付1.99美元。商家也可以随...

腾讯云轻量应用服务器关于多个实例套餐带宽

腾讯云轻量应用服务器又要免费升级配置了,之前已经免费升级过一次了(腾讯云轻量应用服务器套餐配置升级 轻量老用户专享免费升配!),这次在上次的基础上再次升级。也许这就是良心云吧,名不虚传。腾讯云怎么样?腾讯云好不好。腾讯云轻量应用服务器 Lighthouse 是一种易于使用和管理、适合承载轻量级业务负载的云服务器,能帮助个人和企业在云端快速构建网站、博客、电商、论坛等各类应用以及开发测试环境,并提供...

Tudcloud(月付7.2美元),香港VPS,可选大带宽或不限流量

Tudcloud是一家新开的主机商,提供VPS和独立服务器租用,数据中心在中国香港(VPS和独立服务器)和美国洛杉矶(独立服务器),商家VPS基于KVM架构,开设在香港机房,可以选择限制流量大带宽或者限制带宽不限流量套餐。目前提供8折优惠码,优惠后最低每月7.2美元起。虽然主机商网站为英文界面,但是支付方式仅支付宝和Stripe,可能是国人商家。下面列出部分VPS主机套餐配置信息。CPU:1cor...

vb连接数据库为你推荐
spgnux怎么安装思普操作系统不兼容软件和电脑不兼容会怎样?创维云电视功能很喜欢创维云电视,它到底有哪些独特功能?lockdowndios8.1怎么激活内置卡贴mate8价格华为mate8什么时候会降价安全漏洞计算机一般存在哪些安全漏洞?去鼠标加速度CS去鼠标加速度和鼠标灵敏度的区别?怎么在图片上写文字怎么才能在图片上写字呢如何修改ie主页如何修改ie主页黑龙江计算机等级考试网计算机2级考试成绩怎么查?
网通vps lamp z.com 一点优惠网 国内加速器 个人免费空间 创梦 新天域互联 帽子云 刀片式服务器 共享主机 免费asp空间 万网空间 可外链的相册 xshell5注册码 美国vpn代理 hosts文件修改 cc攻击 赵荣 winscpiphone 更多