基于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是为了将结果显示出来.
感兴趣的读者可以与作者联系.

Megalayer美国独立服务器配置及性能速度综合评测

Megalayer 商家在之前也有记录过,商家开始只有提供香港站群服务器和独立服务器,后来也有增加到美国独立服务器,以及前几天也有介绍到有增加香港VPS主机。对于香港服务器之前有过评测(Megalayer香港服务器配置一览及E3-1230 8GB服务器评测记录),这里申请到一台美国独立服务器,所以也准备简单的评测记录。目前市场上我们看到很多商家提供VPS或者云服务器基本上没有什么特别的,但是独立服...

建站选择网站域名和IP主机地址之间关系和注意要点

今天中午的时候有网友联系到在选择网站域名建站和主机的时候问到域名和IP地址有没有关联,或者需要注意的问题。毕竟我们在需要建站的时候,我们需要选择网站域名和主机,而主机有虚拟主机,包括共享和独立IP,同时还有云服务器、独立服务器、站群服务器等形式。通过这篇文章,简单的梳理关于网站域名和IP之间的关系。第一、什么是域名所谓网站域名,就是我们看到的类似"www.laozuo.org",我们可以通过直接记...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

vb连接数据库为你推荐
明星论坛www.51.com是一个关于什么的网站?金山杀毒怎么样金山杀毒软件咋样?金山杀毒怎么样用金山毒霸杀毒好吗?金山杀毒怎么样金山杀毒好吗打开网页出现错误网页上有错误怎么解决?打开网页出现错误为什么打不开网页,出错怎么样免费装扮qq空间要怎么免费装扮QQ空间!百度抢票浏览器百度手机浏览器怎么抢票 手机百度浏览器抢票方法正则表达式javajava正则表达式申请证书求高手教下怎么申请证书
免费网站空间 php空间租用 免费顶级域名 idc评测 dreamhost 网盘申请 panel1 免费mysql 帽子云 web服务器安全 国外ip加速器 卡巴斯基是免费的吗 闪讯官网 空间购买 申请免费空间 国外网页代理 黑科云 亿库 websitepanel apache启动失败 更多