📄 331.htm
字号:
<HTML>
<HEAD>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
<meta HTTP-EQUIV='Expires' CONTENT=0>
<link rel='stylesheet' href='../../../../news.css'>
<style type='text/css'>
.fst{padding:0px 15px;width:770px;background:#eeeecc;border-left:1px solid #000000;border-right:1px solid #000000}
.fstdiv3 img{border:0px;border-right:8px solid #eeeecc;border-top:6px solid #eeeecc}
</style>
<title>
使用ADO编写数据库应用程序
</title>
</HEAD>
<BODY aLink=#990000 bgColor=#ffffff bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 marginwidth=0 marginheight=0>
<center>
<TABLE align=center bgColor=#cccc99 border=0 cellPadding=2 cellSpacing=0 width=770>
<TBODY>
<TR>
<TH align=left >
使用ADO编写数据库应用程序
</TH>
</TD></TR>
</TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0 width=770>
<TBODY>
<TR><TD colSpan=5 >
<a href='http://www.csdn.net'>中国软件开发网络</a>
-->
<a href='http://www.csdn.net/develop'>开发图书馆</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
'>
Visual C++
</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
&smallclassid=
107
'>
数据库操作
</a>
-->
<a href='
http://www.csdn.net/develop/library/vc/datebase/331.shtm
'>
使用ADO编写数据库应用程序
</a>
</TD></tr>
<TR>
<TD align=left width=300>
<B>关键字:</B><BR>
使用ADO编写数据库应用程序
</TD>
<TD align=middle width=120>
<B>贴文时间</B><br>
2000-8-11 16:05:55
</TD>
<TD align=middle width=80>
<B>文章类型: </B><BR>
原作
</TD>
<TD align=middle width=100>
<B>给贴子投票 </B>
<BR><a href='http://www.csdn.net/develop/addscore.asp?id=
331
'>投票</a>
</TD></TR>
<TR>
<TD >
zzh
原作
</TD>
<TD colSpan=3 vAlign=top>
<B>出处: </B><A href='
'>
</A></TD></TR>
<TR><TD colSpan=5 bgcolor=#cccc99> </TD></TR>
</TD></TR></TBODY></TABLE>
<div align=center><div class=fst align=left><div class=fstdiv3 id=print2>
<br><br>使用dao <br>4.1 概述<br>visual c++提供了对dao的封装,mfc dao类封装了dao(数据库访问对象)的大部分功能,从面visual c++程序就可以使用visual c++提供的mfc dao类方便的访问microsoft jet 数据库,编制简洁、有visaul c++特色的数据库应用程序。<br>数据库访问对象(dao)提供了一种通过程序代码创建和操纵数据库的机制。多个dao对象构成一个体系结构,在这个结构里,各个dao对象协同工作。dao支持以下四个数据库选项:<br>1、 打开访问数据库(mdb文件)——mdb文件是一个自包含的数据库,它包括查询定义、安全信息、索引、关系,当然还有实际的数据表。用户只须指定mdb文件的路径名。<br>2、 直接打开odbc数据源——这里有一个很重要的限制。不能找开以jet引擎作为驱动程序的odbc数据源;只可以使用具有自己的odbc驱动程序dll的数据源。<br>3、 用jet引擎找开isam型(索引顺序访问方法)数据源(包括dbase,foxpro,paradox,btrieve,excel或文本文件)——即使已经设置了odbc数据源,要用jet引擎来访问这些文件类型中的一种,也必须以isam型数据源的方式来找开文件,而不是以odbc数据源的方式。<br>4、 给access数据库附加外部表——这实际上是用dao访问odbc数据源的首选方法。首先使用access把odbc表添加到一个mdb文件上,然后依照第一选项中介绍的方法用dao找开这个mdb文件就可以了。用户也可以用access把iasm文件附加到一个mdb文件上。<br>4.2 应用dao编程<br>4.21 打开数据库<br>cdaoworkspace对象代表一个dao workspace对象,在mfc dao体系结构中处于最高处,定义了一个用户的同数据库的会话,并包含打开的数据库,负责完成数据库的事务处理。我们可以使用隐含的workspace对象。<br>cdaodatabase对象代表了一个到数据库的连接,在mfc中,是通过cdaodatabase封装的。<br>在构造cdaodatabase对象时,有如下两种方法:<br>1、 创建一个cdaodatabase对象,并向其传递一个指向一个已经找开的cdaoworkspace对象的指针。<br>2、 创建一个cdaodatabase对象,而不明确地指定使用的workspace,此时,mfc将创建一个新的临时的cdaoworkspace对象。<br>如下代码所示:<br>cdaodatabase db;<br>db.open(“test.mdb”,false,false,_t(“”);<br>其中参数一包括要打开的文件的全路径名。<br>4.22 查询记录<br>一个dao recordset对象,代表一个数据记录的集合,该集合是一个库表或者是一个查询的运行结果中的全部记录。cdaorecorset对象有三种类型:表、动态集、快照。<br>通常情况下,我们在应用程序中可以使用cdaorecordset的导出类,这一般是通过classwizard或appwizard来生成的。但我们也可以直接使用cdaorecordset类生成的对象。此时,我们可以动态地绑定recordset对象的数据成员。<br>如下代码所示:<br>colevariant var;<br>long id;<br>cstring str;<br>cdaorecordset m_set(&db);<br>m_set.open(“查询的sql语句”);<br>while(!m_set.iseof())<br>{<br>/*<br> 处理<br> m_set.getfieldvalue(“id”,var);<br> id=v_i4(var);<br> m_set.getfieldvalue(“name”,var);<br> str=var.pbval;<br>*/<br> m_set.movenext();<br>}<br>m_set.close();<br>4.23 添加记录<br>添加记录用addnew函数,此时用setfieldvalue来进行赋值。<br>如下代码所示:<br> m_pdaorecordset->addnew ();<br> sprintf(strvalue,"%s",>m_username );<br> m_pdaorecordset->setfieldvalue ("username",strvalue);<br> sprintf(strvalue,"%d",m_pointid );<br> m_pdaorecordset->setfieldvalue ("pointid",strvalue);<br>datasrc.setdatetime (m_updatetime .getyear ),m_updatetime .getmonth ),m_updatetime .getday (),<br> m_updatetime .gethour (),m_updatetime .getminute (),m_updatetime .getsecond ());<br> valvalue=datasrc;<br> m_pdaorecordset->setfieldvalue ("updatetime",valvalue);<br> sprintf(strvalue,"%f",m_precordset->m_oldvalue );<br> m_pdaorecordset->setfieldvalue ("oldvalue",strvalue);<br> sprintf(strvalue,"%f",m_precordset->m_newvalue );<br> m_pdaorecordset->setfieldvalue ("newvalue",strvalue);<br> m_pdaorecordset->update ();<br>此时,要注意,日期时间型数据要用setdatatime函数来赋值,这里面要用到colevariant类型数据,具体用法可以参考有关帮助。<br>4.24 修改记录<br>修改记录用edit()函数,把记录定位到要修改的位置,调用edit函数,修改完成后,调用update函数。<br>如下代码所示:<br>m_set.edit();<br>m_set.setfieldvalue(“列名”,”字符串”);<br>m_set.update();<br>4.25 删除记录<br>删除记录用delete()函数,使用后不需调用update()函数。<br>4.26 统计记录<br>可以使用如下代码来统计记录数:<br> colevariant varvalue;<br> cdaorecordset m_set(&db);<br> m_set.open(dbopendynaset,”sql语句”);<br> varvalue=m_set.getfieldvalue(0);<br> m_lmaxcount=v_i4(&varvalue);<br> m_set.close();<br>如果是统计一张表中总记录,可以使用cdaotabledef对象,如下代码所示:<br> cdaotabledef m_set(&gusedb);<br> count=m_set.getrecordcount();<br> m_set.close();<br>不能用cdaorecordset对象的getrecordcount()来取得记录数。<br>4.3 总结<br>使用dao技术可以便我们方便的访问microsoft jet引擎数据库,由于microsoft jet不支持多线程,因此,必须限制调用到应用程序主线程的所有dao。<br><br><br>
</DIV></div></div>
<script src='../../../get_readnum.asp?id=
331
'></script>
</center></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -