⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 331.htm

📁 数据库编程技巧文章
💻 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编写数据库应用程序
&nbsp;&nbsp;&nbsp;
</TH>
</TD></TR>
</TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0  width=770>
<TBODY>
<TR><TD colSpan=5 >&nbsp;
<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 >
&nbsp;
zzh
&nbsp;&nbsp;
原作
</TD>
<TD   colSpan=3 vAlign=top>
<B>出处: </B><A href='

'>

</A></TD></TR>
<TR><TD  colSpan=5 bgcolor=#cccc99>&nbsp;</TD></TR>
</TD></TR></TBODY></TABLE>
<div align=center><div class=fst align=left><div class=fstdiv3 id=print2>
<br><br>使用dao&nbsp; &nbsp; <br>4.1&nbsp;&nbsp;&nbsp;&nbsp;概述<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&nbsp;&nbsp;&nbsp;&nbsp;应用dao编程<br>4.21&nbsp;&nbsp;&nbsp;&nbsp;打开数据库<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&nbsp; db;<br>db.open(“test.mdb”,false,false,_t(“”);<br>其中参数一包括要打开的文件的全路径名。<br>4.22&nbsp;&nbsp;&nbsp;&nbsp;查询记录<br>一个dao recordset对象,代表一个数据记录的集合,该集合是一个库表或者是一个查询的运行结果中的全部记录。cdaorecorset对象有三种类型:表、动态集、快照。<br>通常情况下,我们在应用程序中可以使用cdaorecordset的导出类,这一般是通过classwizard或appwizard来生成的。但我们也可以直接使用cdaorecordset类生成的对象。此时,我们可以动态地绑定recordset对象的数据成员。<br>如下代码所示:<br>colevariant var;<br>long id;<br>cstring str;<br>cdaorecordset m_set(&amp;db);<br>m_set.open(“查询的sql语句”);<br>while(!m_set.iseof())<br>{<br>/*<br>&nbsp; &nbsp; &nbsp; 处理<br>&nbsp; &nbsp; &nbsp; m_set.getfieldvalue(“id”,var);<br>&nbsp; &nbsp; &nbsp; id=v_i4(var);<br>&nbsp; &nbsp; &nbsp; m_set.getfieldvalue(“name”,var);<br>&nbsp; &nbsp; &nbsp; str=var.pbval;<br>*/<br>&nbsp; &nbsp; m_set.movenext();<br>}<br>m_set.close();<br>4.23&nbsp;&nbsp;&nbsp;&nbsp;添加记录<br>添加记录用addnew函数,此时用setfieldvalue来进行赋值。<br>如下代码所示:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pdaorecordset-&gt;addnew ();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(strvalue,&quot;%s&quot;,&gt;m_username&nbsp; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pdaorecordset-&gt;setfieldvalue (&quot;username&quot;,strvalue);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(strvalue,&quot;%d&quot;,m_pointid&nbsp; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pdaorecordset-&gt;setfieldvalue (&quot;pointid&quot;,strvalue);<br>datasrc.setdatetime (m_updatetime .getyear ),m_updatetime .getmonth ),m_updatetime .getday (),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_updatetime .gethour (),m_updatetime .getminute (),m_updatetime .getsecond ());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valvalue=datasrc;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pdaorecordset-&gt;setfieldvalue (&quot;updatetime&quot;,valvalue);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(strvalue,&quot;%f&quot;,m_precordset-&gt;m_oldvalue&nbsp; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pdaorecordset-&gt;setfieldvalue (&quot;oldvalue&quot;,strvalue);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(strvalue,&quot;%f&quot;,m_precordset-&gt;m_newvalue );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pdaorecordset-&gt;setfieldvalue (&quot;newvalue&quot;,strvalue);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pdaorecordset-&gt;update ();<br>此时,要注意,日期时间型数据要用setdatatime函数来赋值,这里面要用到colevariant类型数据,具体用法可以参考有关帮助。<br>4.24&nbsp;&nbsp;&nbsp;&nbsp;修改记录<br>修改记录用edit()函数,把记录定位到要修改的位置,调用edit函数,修改完成后,调用update函数。<br>如下代码所示:<br>m_set.edit();<br>m_set.setfieldvalue(“列名”,”字符串”);<br>m_set.update();<br>4.25&nbsp;&nbsp;&nbsp;&nbsp;删除记录<br>删除记录用delete()函数,使用后不需调用update()函数。<br>4.26&nbsp;&nbsp;&nbsp;&nbsp;统计记录<br>可以使用如下代码来统计记录数:<br>&nbsp;&nbsp;&nbsp;&nbsp;colevariant varvalue;<br>&nbsp;&nbsp;&nbsp;&nbsp;cdaorecordset m_set(&amp;db);<br>&nbsp;&nbsp;&nbsp;&nbsp;m_set.open(dbopendynaset,”sql语句”);<br>&nbsp;&nbsp;&nbsp;&nbsp;varvalue=m_set.getfieldvalue(0);<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lmaxcount=v_i4(&amp;varvalue);<br>&nbsp;&nbsp;&nbsp;&nbsp;m_set.close();<br>如果是统计一张表中总记录,可以使用cdaotabledef对象,如下代码所示:<br>&nbsp;&nbsp;&nbsp;&nbsp;cdaotabledef m_set(&amp;gusedb);<br>&nbsp; count=m_set.getrecordcount();<br>&nbsp; m_set.close();<br>不能用cdaorecordset对象的getrecordcount()来取得记录数。<br>4.3&nbsp;&nbsp;&nbsp;&nbsp;总结<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 + -